3 * Copyright (c) 1991-2000, 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_UTF8;
119 pm->op_pmregexp = CALLREGCOMP(aTHX_ t, t + len, pm);
120 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
121 inside tie/overload accessors. */
125 #ifndef INCOMPLETE_TAINTS
128 pm->op_pmdynflags |= PMdf_TAINTED;
130 pm->op_pmdynflags &= ~PMdf_TAINTED;
134 if (!pm->op_pmregexp->prelen && PL_curpm)
136 else if (strEQ("\\s+", pm->op_pmregexp->precomp))
137 pm->op_pmflags |= PMf_WHITE;
139 /* XXX runtime compiled output needs to move to the pad */
140 if (pm->op_pmflags & PMf_KEEP) {
141 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
142 #if !defined(USE_ITHREADS) && !defined(USE_THREADS)
143 /* XXX can't change the optree at runtime either */
144 cLOGOP->op_first->op_next = PL_op->op_next;
153 register PMOP *pm = (PMOP*) cLOGOP->op_other;
154 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
155 register SV *dstr = cx->sb_dstr;
156 register char *s = cx->sb_s;
157 register char *m = cx->sb_m;
158 char *orig = cx->sb_orig;
159 register REGEXP *rx = cx->sb_rx;
161 rxres_restore(&cx->sb_rxres, rx);
163 if (cx->sb_iters++) {
164 if (cx->sb_iters > cx->sb_maxiters)
165 DIE(aTHX_ "Substitution loop");
167 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
168 cx->sb_rxtainted |= 2;
169 sv_catsv(dstr, POPs);
172 if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
173 s == m, cx->sb_targ, NULL,
174 ((cx->sb_rflags & REXEC_COPY_STR)
175 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
176 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
178 SV *targ = cx->sb_targ;
179 sv_catpvn(dstr, s, cx->sb_strend - s);
181 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
183 (void)SvOOK_off(targ);
184 Safefree(SvPVX(targ));
185 SvPVX(targ) = SvPVX(dstr);
186 SvCUR_set(targ, SvCUR(dstr));
187 SvLEN_set(targ, SvLEN(dstr));
191 TAINT_IF(cx->sb_rxtainted & 1);
192 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
194 (void)SvPOK_only(targ);
195 TAINT_IF(cx->sb_rxtainted);
199 LEAVE_SCOPE(cx->sb_oldsave);
201 RETURNOP(pm->op_next);
204 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
207 cx->sb_orig = orig = rx->subbeg;
209 cx->sb_strend = s + (cx->sb_strend - m);
211 cx->sb_m = m = rx->startp[0] + orig;
212 sv_catpvn(dstr, s, m-s);
213 cx->sb_s = rx->endp[0] + orig;
214 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
215 rxres_save(&cx->sb_rxres, rx);
216 RETURNOP(pm->op_pmreplstart);
220 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
225 if (!p || p[1] < rx->nparens) {
226 i = 6 + rx->nparens * 2;
234 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
235 RX_MATCH_COPIED_off(rx);
239 *p++ = PTR2UV(rx->subbeg);
240 *p++ = (UV)rx->sublen;
241 for (i = 0; i <= rx->nparens; ++i) {
242 *p++ = (UV)rx->startp[i];
243 *p++ = (UV)rx->endp[i];
248 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
253 if (RX_MATCH_COPIED(rx))
254 Safefree(rx->subbeg);
255 RX_MATCH_COPIED_set(rx, *p);
260 rx->subbeg = INT2PTR(char*,*p++);
261 rx->sublen = (I32)(*p++);
262 for (i = 0; i <= rx->nparens; ++i) {
263 rx->startp[i] = (I32)(*p++);
264 rx->endp[i] = (I32)(*p++);
269 Perl_rxres_free(pTHX_ void **rsp)
274 Safefree(INT2PTR(char*,*p));
282 djSP; dMARK; dORIGMARK;
283 register SV *tmpForm = *++MARK;
295 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
301 STRLEN fudge = SvCUR(tmpForm) * (IN_BYTE ? 1 : 3) + 1;
302 bool item_is_utf = FALSE;
304 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
305 if (SvREADONLY(tmpForm)) {
306 SvREADONLY_off(tmpForm);
307 doparseform(tmpForm);
308 SvREADONLY_on(tmpForm);
311 doparseform(tmpForm);
314 SvPV_force(PL_formtarget, len);
315 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
317 f = SvPV(tmpForm, len);
318 /* need to jump to the next word */
319 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
328 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
329 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
330 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
331 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
332 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
334 case FF_CHECKNL: name = "CHECKNL"; break;
335 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
336 case FF_SPACE: name = "SPACE"; break;
337 case FF_HALFSPACE: name = "HALFSPACE"; break;
338 case FF_ITEM: name = "ITEM"; break;
339 case FF_CHOP: name = "CHOP"; break;
340 case FF_LINEGLOB: name = "LINEGLOB"; break;
341 case FF_NEWLINE: name = "NEWLINE"; break;
342 case FF_MORE: name = "MORE"; break;
343 case FF_LINEMARK: name = "LINEMARK"; break;
344 case FF_END: name = "END"; break;
347 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
349 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
377 if (ckWARN(WARN_SYNTAX))
378 Perl_warner(aTHX_ WARN_SYNTAX, "Not enough format arguments");
383 item = s = SvPV(sv, len);
386 itemsize = sv_len_utf8(sv);
387 if (itemsize != len) {
389 if (itemsize > fieldsize) {
390 itemsize = fieldsize;
391 itembytes = itemsize;
392 sv_pos_u2b(sv, &itembytes, 0);
396 send = chophere = s + itembytes;
406 sv_pos_b2u(sv, &itemsize);
411 if (itemsize > fieldsize)
412 itemsize = fieldsize;
413 send = chophere = s + itemsize;
425 item = s = SvPV(sv, len);
428 itemsize = sv_len_utf8(sv);
429 if (itemsize != len) {
431 if (itemsize <= fieldsize) {
432 send = chophere = s + itemsize;
443 itemsize = fieldsize;
444 itembytes = itemsize;
445 sv_pos_u2b(sv, &itembytes, 0);
446 send = chophere = s + itembytes;
447 while (s < send || (s == send && isSPACE(*s))) {
457 if (strchr(PL_chopset, *s))
462 itemsize = chophere - item;
463 sv_pos_b2u(sv, &itemsize);
470 if (itemsize <= fieldsize) {
471 send = chophere = s + itemsize;
482 itemsize = fieldsize;
483 send = chophere = s + itemsize;
484 while (s < send || (s == send && isSPACE(*s))) {
494 if (strchr(PL_chopset, *s))
499 itemsize = chophere - item;
504 arg = fieldsize - itemsize;
513 arg = fieldsize - itemsize;
528 switch (UTF8SKIP(s)) {
539 if ( !((*t++ = *s++) & ~31) )
547 int ch = *t++ = *s++;
550 if ( !((*t++ = *s++) & ~31) )
559 while (*s && isSPACE(*s))
566 item = s = SvPV(sv, len);
568 item_is_utf = FALSE; /* XXX is this correct? */
580 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
581 sv_catpvn(PL_formtarget, item, itemsize);
582 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
583 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
588 /* If the field is marked with ^ and the value is undefined,
591 if ((arg & 512) && !SvOK(sv)) {
599 /* Formats aren't yet marked for locales, so assume "yes". */
601 STORE_NUMERIC_STANDARD_SET_LOCAL();
602 #if defined(USE_LONG_DOUBLE)
604 sprintf(t, "%#*.*" PERL_PRIfldbl,
605 (int) fieldsize, (int) arg & 255, value);
607 sprintf(t, "%*.0" PERL_PRIfldbl, (int) fieldsize, value);
612 (int) fieldsize, (int) arg & 255, value);
615 (int) fieldsize, value);
618 RESTORE_NUMERIC_STANDARD();
625 while (t-- > linemark && *t == ' ') ;
633 if (arg) { /* repeat until fields exhausted? */
635 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
636 lines += FmLINES(PL_formtarget);
639 if (strnEQ(linemark, linemark - arg, arg))
640 DIE(aTHX_ "Runaway format");
642 FmLINES(PL_formtarget) = lines;
644 RETURNOP(cLISTOP->op_first);
657 while (*s && isSPACE(*s) && s < send)
661 arg = fieldsize - itemsize;
668 if (strnEQ(s," ",3)) {
669 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
680 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
681 FmLINES(PL_formtarget) += lines;
693 if (PL_stack_base + *PL_markstack_ptr == SP) {
695 if (GIMME_V == G_SCALAR)
696 XPUSHs(sv_2mortal(newSViv(0)));
697 RETURNOP(PL_op->op_next->op_next);
699 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
700 pp_pushmark(); /* push dst */
701 pp_pushmark(); /* push src */
702 ENTER; /* enter outer scope */
705 /* SAVE_DEFSV does *not* suffice here for USE_THREADS */
707 ENTER; /* enter inner scope */
710 src = PL_stack_base[*PL_markstack_ptr];
715 if (PL_op->op_type == OP_MAPSTART)
716 pp_pushmark(); /* push top */
717 return ((LOGOP*)PL_op->op_next)->op_other;
722 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
728 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
734 /* first, move source pointer to the next item in the source list */
735 ++PL_markstack_ptr[-1];
737 /* if there are new items, push them into the destination list */
739 /* might need to make room back there first */
740 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
741 /* XXX this implementation is very pessimal because the stack
742 * is repeatedly extended for every set of items. Is possible
743 * to do this without any stack extension or copying at all
744 * by maintaining a separate list over which the map iterates
745 * (like foreach does). --gsar */
747 /* everything in the stack after the destination list moves
748 * towards the end the stack by the amount of room needed */
749 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
751 /* items to shift up (accounting for the moved source pointer) */
752 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
754 /* This optimization is by Ben Tilly and it does
755 * things differently from what Sarathy (gsar)
756 * is describing. The downside of this optimization is
757 * that leaves "holes" (uninitialized and hopefully unused areas)
758 * to the Perl stack, but on the other hand this
759 * shouldn't be a problem. If Sarathy's idea gets
760 * implemented, this optimization should become
761 * irrelevant. --jhi */
763 shift = count; /* Avoid shifting too often --Ben Tilly */
768 PL_markstack_ptr[-1] += shift;
769 *PL_markstack_ptr += shift;
773 /* copy the new items down to the destination list */
774 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
776 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
778 LEAVE; /* exit inner scope */
781 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
784 (void)POPMARK; /* pop top */
785 LEAVE; /* exit outer scope */
786 (void)POPMARK; /* pop src */
787 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
788 (void)POPMARK; /* pop dst */
789 SP = PL_stack_base + POPMARK; /* pop original mark */
790 if (gimme == G_SCALAR) {
794 else if (gimme == G_ARRAY)
801 ENTER; /* enter inner scope */
804 /* set $_ to the new source item */
805 src = PL_stack_base[PL_markstack_ptr[-1]];
809 RETURNOP(cLOGOP->op_other);
815 djSP; dMARK; dORIGMARK;
817 SV **myorigmark = ORIGMARK;
823 OP* nextop = PL_op->op_next;
825 bool hasargs = FALSE;
828 if (gimme != G_ARRAY) {
834 SAVEVPTR(PL_sortcop);
835 if (PL_op->op_flags & OPf_STACKED) {
836 if (PL_op->op_flags & OPf_SPECIAL) {
837 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
838 kid = kUNOP->op_first; /* pass rv2gv */
839 kid = kUNOP->op_first; /* pass leave */
840 PL_sortcop = kid->op_next;
841 stash = CopSTASH(PL_curcop);
844 cv = sv_2cv(*++MARK, &stash, &gv, 0);
845 if (cv && SvPOK(cv)) {
847 char *proto = SvPV((SV*)cv, n_a);
848 if (proto && strEQ(proto, "$$")) {
852 if (!(cv && CvROOT(cv))) {
853 if (cv && CvXSUB(cv)) {
857 SV *tmpstr = sv_newmortal();
858 gv_efullname3(tmpstr, gv, Nullch);
859 DIE(aTHX_ "Undefined sort subroutine \"%s\" called",
863 DIE(aTHX_ "Undefined subroutine in sort");
868 PL_sortcop = (OP*)cv;
870 PL_sortcop = CvSTART(cv);
871 SAVEVPTR(CvROOT(cv)->op_ppaddr);
872 CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
875 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
881 stash = CopSTASH(PL_curcop);
885 while (MARK < SP) { /* This may or may not shift down one here. */
887 if ((*up = *++MARK)) { /* Weed out nulls. */
889 if (!PL_sortcop && !SvPOK(*up)) {
894 (void)sv_2pv(*up, &n_a);
899 max = --up - myorigmark;
904 bool oldcatch = CATCH_GET;
910 PUSHSTACKi(PERLSI_SORT);
911 if (!hasargs && !is_xsub) {
912 if (PL_sortstash != stash || !PL_firstgv || !PL_secondgv) {
913 SAVESPTR(PL_firstgv);
914 SAVESPTR(PL_secondgv);
915 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
916 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
917 PL_sortstash = stash;
920 sv_lock((SV *)PL_firstgv);
921 sv_lock((SV *)PL_secondgv);
923 SAVESPTR(GvSV(PL_firstgv));
924 SAVESPTR(GvSV(PL_secondgv));
927 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
928 if (!(PL_op->op_flags & OPf_SPECIAL)) {
929 cx->cx_type = CXt_SUB;
930 cx->blk_gimme = G_SCALAR;
933 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
935 PL_sortcxix = cxstack_ix;
937 if (hasargs && !is_xsub) {
938 /* This is mostly copied from pp_entersub */
939 AV *av = (AV*)PL_curpad[0];
942 cx->blk_sub.savearray = GvAV(PL_defgv);
943 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
944 #endif /* USE_THREADS */
945 cx->blk_sub.oldcurpad = PL_curpad;
946 cx->blk_sub.argarray = av;
948 qsortsv((myorigmark+1), max,
949 is_xsub ? sortcv_xsub : hasargs ? sortcv_stacked : sortcv);
951 POPBLOCK(cx,PL_curpm);
959 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
960 qsortsv(ORIGMARK+1, max,
961 (PL_op->op_private & OPpSORT_NUMERIC)
962 ? ( (PL_op->op_private & OPpSORT_INTEGER)
963 ? ( overloading ? amagic_i_ncmp : sv_i_ncmp)
964 : ( overloading ? amagic_ncmp : sv_ncmp))
965 : ( (PL_op->op_private & OPpLOCALE)
968 : sv_cmp_locale_static)
969 : ( overloading ? amagic_cmp : sv_cmp_static)));
970 if (PL_op->op_private & OPpSORT_REVERSE) {
972 SV **q = ORIGMARK+max;
982 PL_stack_sp = ORIGMARK + max;
990 if (GIMME == G_ARRAY)
992 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
993 return cLOGOP->op_other;
1002 if (GIMME == G_ARRAY) {
1003 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1007 SV *targ = PAD_SV(PL_op->op_targ);
1009 if ((PL_op->op_private & OPpFLIP_LINENUM)
1010 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1012 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1013 if (PL_op->op_flags & OPf_SPECIAL) {
1021 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1034 if (GIMME == G_ARRAY) {
1040 if (SvGMAGICAL(left))
1042 if (SvGMAGICAL(right))
1045 if (SvNIOKp(left) || !SvPOKp(left) ||
1046 SvNIOKp(right) || !SvPOKp(right) ||
1047 (looks_like_number(left) && *SvPVX(left) != '0' &&
1048 looks_like_number(right) && *SvPVX(right) != '0'))
1050 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
1051 DIE(aTHX_ "Range iterator outside integer range");
1062 sv = sv_2mortal(newSViv(i++));
1067 SV *final = sv_mortalcopy(right);
1069 char *tmps = SvPV(final, len);
1071 sv = sv_mortalcopy(left);
1073 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1075 if (strEQ(SvPVX(sv),tmps))
1077 sv = sv_2mortal(newSVsv(sv));
1084 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1086 if ((PL_op->op_private & OPpFLIP_LINENUM)
1087 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1089 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1090 sv_catpv(targ, "E0");
1101 S_dopoptolabel(pTHX_ char *label)
1105 register PERL_CONTEXT *cx;
1107 for (i = cxstack_ix; i >= 0; i--) {
1109 switch (CxTYPE(cx)) {
1111 if (ckWARN(WARN_EXITING))
1112 Perl_warner(aTHX_ WARN_EXITING, "Exiting substitution via %s",
1113 PL_op_name[PL_op->op_type]);
1116 if (ckWARN(WARN_EXITING))
1117 Perl_warner(aTHX_ WARN_EXITING, "Exiting subroutine via %s",
1118 PL_op_name[PL_op->op_type]);
1121 if (ckWARN(WARN_EXITING))
1122 Perl_warner(aTHX_ WARN_EXITING, "Exiting format via %s",
1123 PL_op_name[PL_op->op_type]);
1126 if (ckWARN(WARN_EXITING))
1127 Perl_warner(aTHX_ WARN_EXITING, "Exiting eval via %s",
1128 PL_op_name[PL_op->op_type]);
1131 if (ckWARN(WARN_EXITING))
1132 Perl_warner(aTHX_ WARN_EXITING, "Exiting pseudo-block via %s",
1133 PL_op_name[PL_op->op_type]);
1136 if (!cx->blk_loop.label ||
1137 strNE(label, cx->blk_loop.label) ) {
1138 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1139 (long)i, cx->blk_loop.label));
1142 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1150 Perl_dowantarray(pTHX)
1152 I32 gimme = block_gimme();
1153 return (gimme == G_VOID) ? G_SCALAR : gimme;
1157 Perl_block_gimme(pTHX)
1162 cxix = dopoptosub(cxstack_ix);
1166 switch (cxstack[cxix].blk_gimme) {
1174 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1181 S_dopoptosub(pTHX_ I32 startingblock)
1184 return dopoptosub_at(cxstack, startingblock);
1188 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1192 register PERL_CONTEXT *cx;
1193 for (i = startingblock; i >= 0; i--) {
1195 switch (CxTYPE(cx)) {
1201 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1209 S_dopoptoeval(pTHX_ I32 startingblock)
1213 register PERL_CONTEXT *cx;
1214 for (i = startingblock; i >= 0; i--) {
1216 switch (CxTYPE(cx)) {
1220 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1228 S_dopoptoloop(pTHX_ I32 startingblock)
1232 register PERL_CONTEXT *cx;
1233 for (i = startingblock; i >= 0; i--) {
1235 switch (CxTYPE(cx)) {
1237 if (ckWARN(WARN_EXITING))
1238 Perl_warner(aTHX_ WARN_EXITING, "Exiting substitution via %s",
1239 PL_op_name[PL_op->op_type]);
1242 if (ckWARN(WARN_EXITING))
1243 Perl_warner(aTHX_ WARN_EXITING, "Exiting subroutine via %s",
1244 PL_op_name[PL_op->op_type]);
1247 if (ckWARN(WARN_EXITING))
1248 Perl_warner(aTHX_ WARN_EXITING, "Exiting format via %s",
1249 PL_op_name[PL_op->op_type]);
1252 if (ckWARN(WARN_EXITING))
1253 Perl_warner(aTHX_ WARN_EXITING, "Exiting eval via %s",
1254 PL_op_name[PL_op->op_type]);
1257 if (ckWARN(WARN_EXITING))
1258 Perl_warner(aTHX_ WARN_EXITING, "Exiting pseudo-block via %s",
1259 PL_op_name[PL_op->op_type]);
1262 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1270 Perl_dounwind(pTHX_ I32 cxix)
1273 register PERL_CONTEXT *cx;
1276 while (cxstack_ix > cxix) {
1278 cx = &cxstack[cxstack_ix];
1279 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1280 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1281 /* Note: we don't need to restore the base context info till the end. */
1282 switch (CxTYPE(cx)) {
1285 continue; /* not break */
1307 * Closures mentioned at top level of eval cannot be referenced
1308 * again, and their presence indirectly causes a memory leak.
1309 * (Note that the fact that compcv and friends are still set here
1310 * is, AFAIK, an accident.) --Chip
1312 * XXX need to get comppad et al from eval's cv rather than
1313 * relying on the incidental global values.
1316 S_free_closures(pTHX)
1319 SV **svp = AvARRAY(PL_comppad_name);
1321 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
1323 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
1325 svp[ix] = &PL_sv_undef;
1329 SvREFCNT_dec(CvOUTSIDE(sv));
1330 CvOUTSIDE(sv) = Nullcv;
1343 Perl_qerror(pTHX_ SV *err)
1346 sv_catsv(ERRSV, err);
1348 sv_catsv(PL_errors, err);
1350 Perl_warn(aTHX_ "%"SVf, err);
1355 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1360 register PERL_CONTEXT *cx;
1365 if (PL_in_eval & EVAL_KEEPERR) {
1366 static char prefix[] = "\t(in cleanup) ";
1371 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1374 if (*e != *message || strNE(e,message))
1378 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1379 sv_catpvn(err, prefix, sizeof(prefix)-1);
1380 sv_catpvn(err, message, msglen);
1381 if (ckWARN(WARN_MISC)) {
1382 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1383 Perl_warner(aTHX_ WARN_MISC, SvPVX(err)+start);
1388 sv_setpvn(ERRSV, message, msglen);
1391 message = SvPVx(ERRSV, msglen);
1393 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1394 && PL_curstackinfo->si_prev)
1403 if (cxix < cxstack_ix)
1406 POPBLOCK(cx,PL_curpm);
1407 if (CxTYPE(cx) != CXt_EVAL) {
1408 PerlIO_write(Perl_error_log, "panic: die ", 11);
1409 PerlIO_write(Perl_error_log, message, msglen);
1414 if (gimme == G_SCALAR)
1415 *++newsp = &PL_sv_undef;
1416 PL_stack_sp = newsp;
1420 /* LEAVE could clobber PL_curcop (see save_re_context())
1421 * XXX it might be better to find a way to avoid messing with
1422 * PL_curcop in save_re_context() instead, but this is a more
1423 * minimal fix --GSAR */
1424 PL_curcop = cx->blk_oldcop;
1426 if (optype == OP_REQUIRE) {
1427 char* msg = SvPVx(ERRSV, n_a);
1428 DIE(aTHX_ "%sCompilation failed in require",
1429 *msg ? msg : "Unknown error\n");
1431 return pop_return();
1435 message = SvPVx(ERRSV, msglen);
1438 /* SFIO can really mess with your errno */
1441 PerlIO *serr = Perl_error_log;
1443 PerlIO_write(serr, message, msglen);
1444 (void)PerlIO_flush(serr);
1457 if (SvTRUE(left) != SvTRUE(right))
1469 RETURNOP(cLOGOP->op_other);
1478 RETURNOP(cLOGOP->op_other);
1484 register I32 cxix = dopoptosub(cxstack_ix);
1485 register PERL_CONTEXT *cx;
1486 register PERL_CONTEXT *ccstack = cxstack;
1487 PERL_SI *top_si = PL_curstackinfo;
1498 /* we may be in a higher stacklevel, so dig down deeper */
1499 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1500 top_si = top_si->si_prev;
1501 ccstack = top_si->si_cxstack;
1502 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1505 if (GIMME != G_ARRAY)
1509 if (PL_DBsub && cxix >= 0 &&
1510 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1514 cxix = dopoptosub_at(ccstack, cxix - 1);
1517 cx = &ccstack[cxix];
1518 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1519 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1520 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1521 field below is defined for any cx. */
1522 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1523 cx = &ccstack[dbcxix];
1526 stashname = CopSTASHPV(cx->blk_oldcop);
1527 if (GIMME != G_ARRAY) {
1529 PUSHs(&PL_sv_undef);
1532 sv_setpv(TARG, stashname);
1539 PUSHs(&PL_sv_undef);
1541 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1542 PUSHs(sv_2mortal(newSVpv(CopFILE(cx->blk_oldcop), 0)));
1543 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1546 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1547 /* So is ccstack[dbcxix]. */
1549 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1550 PUSHs(sv_2mortal(sv));
1551 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1554 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1555 PUSHs(sv_2mortal(newSViv(0)));
1557 gimme = (I32)cx->blk_gimme;
1558 if (gimme == G_VOID)
1559 PUSHs(&PL_sv_undef);
1561 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1562 if (CxTYPE(cx) == CXt_EVAL) {
1564 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1565 PUSHs(cx->blk_eval.cur_text);
1569 else if (cx->blk_eval.old_namesv) {
1570 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1573 /* eval BLOCK (try blocks have old_namesv == 0) */
1575 PUSHs(&PL_sv_undef);
1576 PUSHs(&PL_sv_undef);
1580 PUSHs(&PL_sv_undef);
1581 PUSHs(&PL_sv_undef);
1583 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1584 && CopSTASH_eq(PL_curcop, PL_debstash))
1586 AV *ary = cx->blk_sub.argarray;
1587 int off = AvARRAY(ary) - AvALLOC(ary);
1591 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1594 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1597 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1598 av_extend(PL_dbargs, AvFILLp(ary) + off);
1599 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1600 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1602 /* XXX only hints propagated via op_private are currently
1603 * visible (others are not easily accessible, since they
1604 * use the global PL_hints) */
1605 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1606 HINT_PRIVATE_MASK)));
1609 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1611 if (old_warnings == pWARN_NONE ||
1612 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1613 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1614 else if (old_warnings == pWARN_ALL ||
1615 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON))
1616 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1618 mask = newSVsv(old_warnings);
1619 PUSHs(sv_2mortal(mask));
1634 sv_reset(tmps, CopSTASH(PL_curcop));
1646 PL_curcop = (COP*)PL_op;
1647 TAINT_NOT; /* Each statement is presumed innocent */
1648 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1651 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1655 register PERL_CONTEXT *cx;
1656 I32 gimme = G_ARRAY;
1663 DIE(aTHX_ "No DB::DB routine defined");
1665 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1677 push_return(PL_op->op_next);
1678 PUSHBLOCK(cx, CXt_SUB, SP);
1681 (void)SvREFCNT_inc(cv);
1682 SAVEVPTR(PL_curpad);
1683 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1684 RETURNOP(CvSTART(cv));
1698 register PERL_CONTEXT *cx;
1699 I32 gimme = GIMME_V;
1701 U32 cxtype = CXt_LOOP;
1710 if (PL_op->op_flags & OPf_SPECIAL) {
1712 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1713 SAVEGENERICSV(*svp);
1717 #endif /* USE_THREADS */
1718 if (PL_op->op_targ) {
1719 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1722 iterdata = (void*)PL_op->op_targ;
1723 cxtype |= CXp_PADVAR;
1728 svp = &GvSV(gv); /* symbol table variable */
1729 SAVEGENERICSV(*svp);
1732 iterdata = (void*)gv;
1738 PUSHBLOCK(cx, cxtype, SP);
1740 PUSHLOOP(cx, iterdata, MARK);
1742 PUSHLOOP(cx, svp, MARK);
1744 if (PL_op->op_flags & OPf_STACKED) {
1745 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1746 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1748 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1749 SvNIOKp(cx->blk_loop.iterary) || !SvPOKp(cx->blk_loop.iterary) ||
1750 (looks_like_number(sv) && *SvPVX(sv) != '0' &&
1751 looks_like_number((SV*)cx->blk_loop.iterary) &&
1752 *SvPVX(cx->blk_loop.iterary) != '0'))
1754 if (SvNV(sv) < IV_MIN ||
1755 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1756 DIE(aTHX_ "Range iterator outside integer range");
1757 cx->blk_loop.iterix = SvIV(sv);
1758 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1761 cx->blk_loop.iterlval = newSVsv(sv);
1765 cx->blk_loop.iterary = PL_curstack;
1766 AvFILLp(PL_curstack) = SP - PL_stack_base;
1767 cx->blk_loop.iterix = MARK - PL_stack_base;
1776 register PERL_CONTEXT *cx;
1777 I32 gimme = GIMME_V;
1783 PUSHBLOCK(cx, CXt_LOOP, SP);
1784 PUSHLOOP(cx, 0, SP);
1792 register PERL_CONTEXT *cx;
1800 newsp = PL_stack_base + cx->blk_loop.resetsp;
1803 if (gimme == G_VOID)
1805 else if (gimme == G_SCALAR) {
1807 *++newsp = sv_mortalcopy(*SP);
1809 *++newsp = &PL_sv_undef;
1813 *++newsp = sv_mortalcopy(*++mark);
1814 TAINT_NOT; /* Each item is independent */
1820 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1821 PL_curpm = newpm; /* ... and pop $1 et al */
1833 register PERL_CONTEXT *cx;
1834 bool popsub2 = FALSE;
1835 bool clear_errsv = FALSE;
1842 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1843 if (cxstack_ix == PL_sortcxix
1844 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1846 if (cxstack_ix > PL_sortcxix)
1847 dounwind(PL_sortcxix);
1848 AvARRAY(PL_curstack)[1] = *SP;
1849 PL_stack_sp = PL_stack_base + 1;
1854 cxix = dopoptosub(cxstack_ix);
1856 DIE(aTHX_ "Can't return outside a subroutine");
1857 if (cxix < cxstack_ix)
1861 switch (CxTYPE(cx)) {
1866 if (!(PL_in_eval & EVAL_KEEPERR))
1871 if (AvFILLp(PL_comppad_name) >= 0)
1874 if (optype == OP_REQUIRE &&
1875 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1877 /* Unassume the success we assumed earlier. */
1878 SV *nsv = cx->blk_eval.old_namesv;
1879 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
1880 DIE(aTHX_ "%s did not return a true value", SvPVX(nsv));
1887 DIE(aTHX_ "panic: return");
1891 if (gimme == G_SCALAR) {
1894 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1896 *++newsp = SvREFCNT_inc(*SP);
1901 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
1903 *++newsp = sv_mortalcopy(sv);
1908 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1911 *++newsp = sv_mortalcopy(*SP);
1914 *++newsp = &PL_sv_undef;
1916 else if (gimme == G_ARRAY) {
1917 while (++MARK <= SP) {
1918 *++newsp = (popsub2 && SvTEMP(*MARK))
1919 ? *MARK : sv_mortalcopy(*MARK);
1920 TAINT_NOT; /* Each item is independent */
1923 PL_stack_sp = newsp;
1925 /* Stack values are safe: */
1927 POPSUB(cx,sv); /* release CV and @_ ... */
1931 PL_curpm = newpm; /* ... and pop $1 et al */
1937 return pop_return();
1944 register PERL_CONTEXT *cx;
1954 if (PL_op->op_flags & OPf_SPECIAL) {
1955 cxix = dopoptoloop(cxstack_ix);
1957 DIE(aTHX_ "Can't \"last\" outside a loop block");
1960 cxix = dopoptolabel(cPVOP->op_pv);
1962 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1964 if (cxix < cxstack_ix)
1969 switch (CxTYPE(cx)) {
1972 newsp = PL_stack_base + cx->blk_loop.resetsp;
1973 nextop = cx->blk_loop.last_op->op_next;
1977 nextop = pop_return();
1981 nextop = pop_return();
1985 nextop = pop_return();
1988 DIE(aTHX_ "panic: last");
1992 if (gimme == G_SCALAR) {
1994 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1995 ? *SP : sv_mortalcopy(*SP);
1997 *++newsp = &PL_sv_undef;
1999 else if (gimme == G_ARRAY) {
2000 while (++MARK <= SP) {
2001 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2002 ? *MARK : sv_mortalcopy(*MARK);
2003 TAINT_NOT; /* Each item is independent */
2009 /* Stack values are safe: */
2012 POPLOOP(cx); /* release loop vars ... */
2016 POPSUB(cx,sv); /* release CV and @_ ... */
2019 PL_curpm = newpm; /* ... and pop $1 et al */
2029 register PERL_CONTEXT *cx;
2032 if (PL_op->op_flags & OPf_SPECIAL) {
2033 cxix = dopoptoloop(cxstack_ix);
2035 DIE(aTHX_ "Can't \"next\" outside a loop block");
2038 cxix = dopoptolabel(cPVOP->op_pv);
2040 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2042 if (cxix < cxstack_ix)
2045 /* clear off anything above the scope we're re-entering, but
2046 * save the rest until after a possible continue block */
2047 inner = PL_scopestack_ix;
2049 if (PL_scopestack_ix < inner)
2050 leave_scope(PL_scopestack[PL_scopestack_ix]);
2051 return cx->blk_loop.next_op;
2057 register PERL_CONTEXT *cx;
2060 if (PL_op->op_flags & OPf_SPECIAL) {
2061 cxix = dopoptoloop(cxstack_ix);
2063 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2066 cxix = dopoptolabel(cPVOP->op_pv);
2068 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2070 if (cxix < cxstack_ix)
2074 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2075 LEAVE_SCOPE(oldsave);
2076 return cx->blk_loop.redo_op;
2080 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
2084 static char too_deep[] = "Target of goto is too deeply nested";
2087 Perl_croak(aTHX_ too_deep);
2088 if (o->op_type == OP_LEAVE ||
2089 o->op_type == OP_SCOPE ||
2090 o->op_type == OP_LEAVELOOP ||
2091 o->op_type == OP_LEAVETRY)
2093 *ops++ = cUNOPo->op_first;
2095 Perl_croak(aTHX_ too_deep);
2098 if (o->op_flags & OPf_KIDS) {
2100 /* First try all the kids at this level, since that's likeliest. */
2101 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2102 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2103 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2106 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2107 if (kid == PL_lastgotoprobe)
2109 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2111 (ops[-1]->op_type != OP_NEXTSTATE &&
2112 ops[-1]->op_type != OP_DBSTATE)))
2114 if ((o = dofindlabel(kid, label, ops, oplimit)))
2133 register PERL_CONTEXT *cx;
2134 #define GOTO_DEPTH 64
2135 OP *enterops[GOTO_DEPTH];
2137 int do_dump = (PL_op->op_type == OP_DUMP);
2138 static char must_have_label[] = "goto must have label";
2141 if (PL_op->op_flags & OPf_STACKED) {
2145 /* This egregious kludge implements goto &subroutine */
2146 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2148 register PERL_CONTEXT *cx;
2149 CV* cv = (CV*)SvRV(sv);
2155 if (!CvROOT(cv) && !CvXSUB(cv)) {
2160 /* autoloaded stub? */
2161 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2163 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2164 GvNAMELEN(gv), FALSE);
2165 if (autogv && (cv = GvCV(autogv)))
2167 tmpstr = sv_newmortal();
2168 gv_efullname3(tmpstr, gv, Nullch);
2169 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2171 DIE(aTHX_ "Goto undefined subroutine");
2174 /* First do some returnish stuff. */
2175 cxix = dopoptosub(cxstack_ix);
2177 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2178 if (cxix < cxstack_ix)
2181 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2182 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2184 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2185 /* put @_ back onto stack */
2186 AV* av = cx->blk_sub.argarray;
2188 items = AvFILLp(av) + 1;
2190 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2191 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2192 PL_stack_sp += items;
2194 SvREFCNT_dec(GvAV(PL_defgv));
2195 GvAV(PL_defgv) = cx->blk_sub.savearray;
2196 #endif /* USE_THREADS */
2197 /* abandon @_ if it got reified */
2199 (void)sv_2mortal((SV*)av); /* delay until return */
2201 av_extend(av, items-1);
2202 AvFLAGS(av) = AVf_REIFY;
2203 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2206 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2209 av = (AV*)PL_curpad[0];
2211 av = GvAV(PL_defgv);
2213 items = AvFILLp(av) + 1;
2215 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2216 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2217 PL_stack_sp += items;
2219 if (CxTYPE(cx) == CXt_SUB &&
2220 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2221 SvREFCNT_dec(cx->blk_sub.cv);
2222 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2223 LEAVE_SCOPE(oldsave);
2225 /* Now do some callish stuff. */
2228 #ifdef PERL_XSUB_OLDSTYLE
2229 if (CvOLDSTYLE(cv)) {
2230 I32 (*fp3)(int,int,int);
2235 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2236 items = (*fp3)(CvXSUBANY(cv).any_i32,
2237 mark - PL_stack_base + 1,
2239 SP = PL_stack_base + items;
2242 #endif /* PERL_XSUB_OLDSTYLE */
2247 PL_stack_sp--; /* There is no cv arg. */
2248 /* Push a mark for the start of arglist */
2250 (void)(*CvXSUB(cv))(aTHXo_ cv);
2251 /* Pop the current context like a decent sub should */
2252 POPBLOCK(cx, PL_curpm);
2253 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2256 return pop_return();
2259 AV* padlist = CvPADLIST(cv);
2260 SV** svp = AvARRAY(padlist);
2261 if (CxTYPE(cx) == CXt_EVAL) {
2262 PL_in_eval = cx->blk_eval.old_in_eval;
2263 PL_eval_root = cx->blk_eval.old_eval_root;
2264 cx->cx_type = CXt_SUB;
2265 cx->blk_sub.hasargs = 0;
2267 cx->blk_sub.cv = cv;
2268 cx->blk_sub.olddepth = CvDEPTH(cv);
2270 if (CvDEPTH(cv) < 2)
2271 (void)SvREFCNT_inc(cv);
2272 else { /* save temporaries on recursion? */
2273 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2274 sub_crush_depth(cv);
2275 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2276 AV *newpad = newAV();
2277 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2278 I32 ix = AvFILLp((AV*)svp[1]);
2279 I32 names_fill = AvFILLp((AV*)svp[0]);
2280 svp = AvARRAY(svp[0]);
2281 for ( ;ix > 0; ix--) {
2282 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2283 char *name = SvPVX(svp[ix]);
2284 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2287 /* outer lexical or anon code */
2288 av_store(newpad, ix,
2289 SvREFCNT_inc(oldpad[ix]) );
2291 else { /* our own lexical */
2293 av_store(newpad, ix, sv = (SV*)newAV());
2294 else if (*name == '%')
2295 av_store(newpad, ix, sv = (SV*)newHV());
2297 av_store(newpad, ix, sv = NEWSV(0,0));
2301 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2302 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2305 av_store(newpad, ix, sv = NEWSV(0,0));
2309 if (cx->blk_sub.hasargs) {
2312 av_store(newpad, 0, (SV*)av);
2313 AvFLAGS(av) = AVf_REIFY;
2315 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2316 AvFILLp(padlist) = CvDEPTH(cv);
2317 svp = AvARRAY(padlist);
2321 if (!cx->blk_sub.hasargs) {
2322 AV* av = (AV*)PL_curpad[0];
2324 items = AvFILLp(av) + 1;
2326 /* Mark is at the end of the stack. */
2328 Copy(AvARRAY(av), SP + 1, items, SV*);
2333 #endif /* USE_THREADS */
2334 SAVEVPTR(PL_curpad);
2335 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2337 if (cx->blk_sub.hasargs)
2338 #endif /* USE_THREADS */
2340 AV* av = (AV*)PL_curpad[0];
2344 cx->blk_sub.savearray = GvAV(PL_defgv);
2345 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2346 #endif /* USE_THREADS */
2347 cx->blk_sub.oldcurpad = PL_curpad;
2348 cx->blk_sub.argarray = av;
2351 if (items >= AvMAX(av) + 1) {
2353 if (AvARRAY(av) != ary) {
2354 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2355 SvPVX(av) = (char*)ary;
2357 if (items >= AvMAX(av) + 1) {
2358 AvMAX(av) = items - 1;
2359 Renew(ary,items+1,SV*);
2361 SvPVX(av) = (char*)ary;
2364 Copy(mark,AvARRAY(av),items,SV*);
2365 AvFILLp(av) = items - 1;
2366 assert(!AvREAL(av));
2373 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2375 * We do not care about using sv to call CV;
2376 * it's for informational purposes only.
2378 SV *sv = GvSV(PL_DBsub);
2381 if (PERLDB_SUB_NN) {
2382 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2385 gv_efullname3(sv, CvGV(cv), Nullch);
2388 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2389 PUSHMARK( PL_stack_sp );
2390 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2394 RETURNOP(CvSTART(cv));
2398 label = SvPV(sv,n_a);
2399 if (!(do_dump || *label))
2400 DIE(aTHX_ must_have_label);
2403 else if (PL_op->op_flags & OPf_SPECIAL) {
2405 DIE(aTHX_ must_have_label);
2408 label = cPVOP->op_pv;
2410 if (label && *label) {
2415 PL_lastgotoprobe = 0;
2417 for (ix = cxstack_ix; ix >= 0; ix--) {
2419 switch (CxTYPE(cx)) {
2421 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2424 gotoprobe = cx->blk_oldcop->op_sibling;
2430 gotoprobe = cx->blk_oldcop->op_sibling;
2432 gotoprobe = PL_main_root;
2435 if (CvDEPTH(cx->blk_sub.cv)) {
2436 gotoprobe = CvROOT(cx->blk_sub.cv);
2442 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2445 DIE(aTHX_ "panic: goto");
2446 gotoprobe = PL_main_root;
2450 retop = dofindlabel(gotoprobe, label,
2451 enterops, enterops + GOTO_DEPTH);
2455 PL_lastgotoprobe = gotoprobe;
2458 DIE(aTHX_ "Can't find label %s", label);
2460 /* pop unwanted frames */
2462 if (ix < cxstack_ix) {
2469 oldsave = PL_scopestack[PL_scopestack_ix];
2470 LEAVE_SCOPE(oldsave);
2473 /* push wanted frames */
2475 if (*enterops && enterops[1]) {
2477 for (ix = 1; enterops[ix]; ix++) {
2478 PL_op = enterops[ix];
2479 /* Eventually we may want to stack the needed arguments
2480 * for each op. For now, we punt on the hard ones. */
2481 if (PL_op->op_type == OP_ENTERITER)
2482 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2483 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2491 if (!retop) retop = PL_main_start;
2493 PL_restartop = retop;
2494 PL_do_undump = TRUE;
2498 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2499 PL_do_undump = FALSE;
2515 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2519 PL_exit_flags |= PERL_EXIT_EXPECTED;
2521 PUSHs(&PL_sv_undef);
2529 NV value = SvNVx(GvSV(cCOP->cop_gv));
2530 register I32 match = I_32(value);
2533 if (((NV)match) > value)
2534 --match; /* was fractional--truncate other way */
2536 match -= cCOP->uop.scop.scop_offset;
2539 else if (match > cCOP->uop.scop.scop_max)
2540 match = cCOP->uop.scop.scop_max;
2541 PL_op = cCOP->uop.scop.scop_next[match];
2551 PL_op = PL_op->op_next; /* can't assume anything */
2554 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2555 match -= cCOP->uop.scop.scop_offset;
2558 else if (match > cCOP->uop.scop.scop_max)
2559 match = cCOP->uop.scop.scop_max;
2560 PL_op = cCOP->uop.scop.scop_next[match];
2569 S_save_lines(pTHX_ AV *array, SV *sv)
2571 register char *s = SvPVX(sv);
2572 register char *send = SvPVX(sv) + SvCUR(sv);
2574 register I32 line = 1;
2576 while (s && s < send) {
2577 SV *tmpstr = NEWSV(85,0);
2579 sv_upgrade(tmpstr, SVt_PVMG);
2580 t = strchr(s, '\n');
2586 sv_setpvn(tmpstr, s, t - s);
2587 av_store(array, line++, tmpstr);
2592 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2594 S_docatch_body(pTHX_ va_list args)
2596 return docatch_body();
2601 S_docatch_body(pTHX)
2608 S_docatch(pTHX_ OP *o)
2613 volatile PERL_SI *cursi = PL_curstackinfo;
2617 assert(CATCH_GET == TRUE);
2620 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2622 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2628 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2634 if (PL_restartop && cursi == PL_curstackinfo) {
2635 PL_op = PL_restartop;
2652 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2653 /* sv Text to convert to OP tree. */
2654 /* startop op_free() this to undo. */
2655 /* code Short string id of the caller. */
2657 dSP; /* Make POPBLOCK work. */
2660 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2664 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2665 char *tmpbuf = tbuf;
2671 /* switch to eval mode */
2673 if (PL_curcop == &PL_compiling) {
2674 SAVECOPSTASH_FREE(&PL_compiling);
2675 CopSTASH_set(&PL_compiling, PL_curstash);
2677 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2678 SV *sv = sv_newmortal();
2679 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2680 code, (unsigned long)++PL_evalseq,
2681 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2685 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2686 SAVECOPFILE_FREE(&PL_compiling);
2687 CopFILE_set(&PL_compiling, tmpbuf+2);
2688 SAVECOPLINE(&PL_compiling);
2689 CopLINE_set(&PL_compiling, 1);
2690 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2691 deleting the eval's FILEGV from the stash before gv_check() runs
2692 (i.e. before run-time proper). To work around the coredump that
2693 ensues, we always turn GvMULTI_on for any globals that were
2694 introduced within evals. See force_ident(). GSAR 96-10-12 */
2695 safestr = savepv(tmpbuf);
2696 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2698 #ifdef OP_IN_REGISTER
2706 PL_op->op_type = OP_ENTEREVAL;
2707 PL_op->op_flags = 0; /* Avoid uninit warning. */
2708 PUSHBLOCK(cx, CXt_EVAL, SP);
2709 PUSHEVAL(cx, 0, Nullgv);
2710 rop = doeval(G_SCALAR, startop);
2711 POPBLOCK(cx,PL_curpm);
2714 (*startop)->op_type = OP_NULL;
2715 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2717 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2719 if (PL_curcop == &PL_compiling)
2720 PL_compiling.op_private = PL_hints;
2721 #ifdef OP_IN_REGISTER
2727 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2729 S_doeval(pTHX_ int gimme, OP** startop)
2737 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2738 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2743 /* set up a scratch pad */
2746 SAVEVPTR(PL_curpad);
2747 SAVESPTR(PL_comppad);
2748 SAVESPTR(PL_comppad_name);
2749 SAVEI32(PL_comppad_name_fill);
2750 SAVEI32(PL_min_intro_pending);
2751 SAVEI32(PL_max_intro_pending);
2754 for (i = cxstack_ix - 1; i >= 0; i--) {
2755 PERL_CONTEXT *cx = &cxstack[i];
2756 if (CxTYPE(cx) == CXt_EVAL)
2758 else if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2759 caller = cx->blk_sub.cv;
2764 SAVESPTR(PL_compcv);
2765 PL_compcv = (CV*)NEWSV(1104,0);
2766 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2767 CvEVAL_on(PL_compcv);
2769 CvOWNER(PL_compcv) = 0;
2770 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2771 MUTEX_INIT(CvMUTEXP(PL_compcv));
2772 #endif /* USE_THREADS */
2774 PL_comppad = newAV();
2775 av_push(PL_comppad, Nullsv);
2776 PL_curpad = AvARRAY(PL_comppad);
2777 PL_comppad_name = newAV();
2778 PL_comppad_name_fill = 0;
2779 PL_min_intro_pending = 0;
2782 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2783 PL_curpad[0] = (SV*)newAV();
2784 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2785 #endif /* USE_THREADS */
2787 comppadlist = newAV();
2788 AvREAL_off(comppadlist);
2789 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2790 av_store(comppadlist, 1, (SV*)PL_comppad);
2791 CvPADLIST(PL_compcv) = comppadlist;
2794 (saveop->op_type != OP_REQUIRE && saveop->op_type != OP_DOFILE))
2796 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2799 SAVEFREESV(PL_compcv);
2801 /* make sure we compile in the right package */
2803 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2804 SAVESPTR(PL_curstash);
2805 PL_curstash = CopSTASH(PL_curcop);
2807 SAVESPTR(PL_beginav);
2808 PL_beginav = newAV();
2809 SAVEFREESV(PL_beginav);
2810 SAVEI32(PL_error_count);
2812 /* try to compile it */
2814 PL_eval_root = Nullop;
2816 PL_curcop = &PL_compiling;
2817 PL_curcop->cop_arybase = 0;
2818 SvREFCNT_dec(PL_rs);
2819 PL_rs = newSVpvn("\n", 1);
2820 if (saveop && saveop->op_flags & OPf_SPECIAL)
2821 PL_in_eval |= EVAL_KEEPERR;
2824 if (yyparse() || PL_error_count || !PL_eval_root) {
2828 I32 optype = 0; /* Might be reset by POPEVAL. */
2833 op_free(PL_eval_root);
2834 PL_eval_root = Nullop;
2836 SP = PL_stack_base + POPMARK; /* pop original mark */
2838 POPBLOCK(cx,PL_curpm);
2844 if (optype == OP_REQUIRE) {
2845 char* msg = SvPVx(ERRSV, n_a);
2846 DIE(aTHX_ "%sCompilation failed in require",
2847 *msg ? msg : "Unknown error\n");
2850 char* msg = SvPVx(ERRSV, n_a);
2852 POPBLOCK(cx,PL_curpm);
2854 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2855 (*msg ? msg : "Unknown error\n"));
2857 SvREFCNT_dec(PL_rs);
2858 PL_rs = SvREFCNT_inc(PL_nrs);
2860 MUTEX_LOCK(&PL_eval_mutex);
2862 COND_SIGNAL(&PL_eval_cond);
2863 MUTEX_UNLOCK(&PL_eval_mutex);
2864 #endif /* USE_THREADS */
2867 SvREFCNT_dec(PL_rs);
2868 PL_rs = SvREFCNT_inc(PL_nrs);
2869 CopLINE_set(&PL_compiling, 0);
2871 *startop = PL_eval_root;
2872 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2873 CvOUTSIDE(PL_compcv) = Nullcv;
2875 SAVEFREEOP(PL_eval_root);
2877 scalarvoid(PL_eval_root);
2878 else if (gimme & G_ARRAY)
2881 scalar(PL_eval_root);
2883 DEBUG_x(dump_eval());
2885 /* Register with debugger: */
2886 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2887 CV *cv = get_cv("DB::postponed", FALSE);
2891 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2893 call_sv((SV*)cv, G_DISCARD);
2897 /* compiled okay, so do it */
2899 CvDEPTH(PL_compcv) = 1;
2900 SP = PL_stack_base + POPMARK; /* pop original mark */
2901 PL_op = saveop; /* The caller may need it. */
2902 PL_lex_state = LEX_NOTPARSING; /* $^S needs this. */
2904 MUTEX_LOCK(&PL_eval_mutex);
2906 COND_SIGNAL(&PL_eval_cond);
2907 MUTEX_UNLOCK(&PL_eval_mutex);
2908 #endif /* USE_THREADS */
2910 RETURNOP(PL_eval_start);
2914 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2916 STRLEN namelen = strlen(name);
2919 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2920 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2921 char *pmc = SvPV_nolen(pmcsv);
2924 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2925 fp = PerlIO_open(name, mode);
2928 if (PerlLIO_stat(name, &pmstat) < 0 ||
2929 pmstat.st_mtime < pmcstat.st_mtime)
2931 fp = PerlIO_open(pmc, mode);
2934 fp = PerlIO_open(name, mode);
2937 SvREFCNT_dec(pmcsv);
2940 fp = PerlIO_open(name, mode);
2948 register PERL_CONTEXT *cx;
2953 SV *namesv = Nullsv;
2955 I32 gimme = G_SCALAR;
2956 PerlIO *tryrsfp = 0;
2958 int filter_has_file = 0;
2959 GV *filter_child_proc = 0;
2960 SV *filter_state = 0;
2965 if (SvPOK(sv) && SvNOK(sv)) { /* require v5.6.1 */
2966 UV rev = 0, ver = 0, sver = 0;
2968 U8 *s = (U8*)SvPVX(sv);
2969 U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
2971 rev = utf8_to_uv_chk(s, &len, 0);
2974 ver = utf8_to_uv_chk(s, &len, 0);
2977 sver = utf8_to_uv_chk(s, &len, 0);
2980 if (PERL_REVISION < rev
2981 || (PERL_REVISION == rev
2982 && (PERL_VERSION < ver
2983 || (PERL_VERSION == ver
2984 && PERL_SUBVERSION < sver))))
2986 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only "
2987 "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
2988 PERL_VERSION, PERL_SUBVERSION);
2992 else if (!SvPOKp(sv)) { /* require 5.005_03 */
2993 if ((NV)PERL_REVISION + ((NV)PERL_VERSION/(NV)1000)
2994 + ((NV)PERL_SUBVERSION/(NV)1000000)
2995 + 0.00000099 < SvNV(sv))
2999 NV nver = (nrev - rev) * 1000;
3000 UV ver = (UV)(nver + 0.0009);
3001 NV nsver = (nver - ver) * 1000;
3002 UV sver = (UV)(nsver + 0.0009);
3004 /* help out with the "use 5.6" confusion */
3005 if (sver == 0 && (rev > 5 || (rev == 5 && ver >= 100))) {
3006 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
3007 "this is only v%d.%d.%d, stopped"
3008 " (did you mean v%"UVuf".%"UVuf".0?)",
3009 rev, ver, sver, PERL_REVISION, PERL_VERSION,
3010 PERL_SUBVERSION, rev, ver/100);
3013 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
3014 "this is only v%d.%d.%d, stopped",
3015 rev, ver, sver, PERL_REVISION, PERL_VERSION,
3022 name = SvPV(sv, len);
3023 if (!(name && len > 0 && *name))
3024 DIE(aTHX_ "Null filename used");
3025 TAINT_PROPER("require");
3026 if (PL_op->op_type == OP_REQUIRE &&
3027 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
3028 *svp != &PL_sv_undef)
3031 /* prepare to compile file */
3033 if (PERL_FILE_IS_ABSOLUTE(name)
3034 || (*name == '.' && (name[1] == '/' ||
3035 (name[1] == '.' && name[2] == '/'))))
3038 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
3039 #ifdef MACOS_TRADITIONAL
3040 /* We consider paths of the form :a:b ambiguous and interpret them first
3041 as global then as local
3043 if (!tryrsfp && name[0] == ':' && name[1] != ':' && strchr(name+2, ':'))
3052 AV *ar = GvAVn(PL_incgv);
3056 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3059 namesv = NEWSV(806, 0);
3060 for (i = 0; i <= AvFILL(ar); i++) {
3061 SV *dirsv = *av_fetch(ar, i, TRUE);
3067 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
3068 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3071 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3072 PTR2UV(SvANY(loader)), name);
3073 tryname = SvPVX(namesv);
3084 count = call_sv(loader, G_ARRAY);
3094 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3098 if (SvTYPE(arg) == SVt_PVGV) {
3099 IO *io = GvIO((GV *)arg);
3104 tryrsfp = IoIFP(io);
3105 if (IoTYPE(io) == IoTYPE_PIPE) {
3106 /* reading from a child process doesn't
3107 nest -- when returning from reading
3108 the inner module, the outer one is
3109 unreadable (closed?) I've tried to
3110 save the gv to manage the lifespan of
3111 the pipe, but this didn't help. XXX */
3112 filter_child_proc = (GV *)arg;
3113 (void)SvREFCNT_inc(filter_child_proc);
3116 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3117 PerlIO_close(IoOFP(io));
3129 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3131 (void)SvREFCNT_inc(filter_sub);
3134 filter_state = SP[i];
3135 (void)SvREFCNT_inc(filter_state);
3139 tryrsfp = PerlIO_open("/dev/null",
3153 filter_has_file = 0;
3154 if (filter_child_proc) {
3155 SvREFCNT_dec(filter_child_proc);
3156 filter_child_proc = 0;
3159 SvREFCNT_dec(filter_state);
3163 SvREFCNT_dec(filter_sub);
3168 char *dir = SvPVx(dirsv, n_a);
3169 #ifdef MACOS_TRADITIONAL
3171 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf), name+(name[0] == ':'));
3175 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3177 sv_setpv(namesv, unixdir);
3178 sv_catpv(namesv, unixname);
3180 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3183 TAINT_PROPER("require");
3184 tryname = SvPVX(namesv);
3185 #ifdef MACOS_TRADITIONAL
3187 /* Convert slashes in the name part, but not the directory part, to colons */
3189 for (colon = tryname+strlen(dir); colon = strchr(colon, '/'); )
3193 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
3195 if (tryname[0] == '.' && tryname[1] == '/')
3203 SAVECOPFILE_FREE(&PL_compiling);
3204 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3205 SvREFCNT_dec(namesv);
3207 if (PL_op->op_type == OP_REQUIRE) {
3208 char *msgstr = name;
3209 if (namesv) { /* did we lookup @INC? */
3210 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3211 SV *dirmsgsv = NEWSV(0, 0);
3212 AV *ar = GvAVn(PL_incgv);
3214 sv_catpvn(msg, " in @INC", 8);
3215 if (instr(SvPVX(msg), ".h "))
3216 sv_catpv(msg, " (change .h to .ph maybe?)");
3217 if (instr(SvPVX(msg), ".ph "))
3218 sv_catpv(msg, " (did you run h2ph?)");
3219 sv_catpv(msg, " (@INC contains:");
3220 for (i = 0; i <= AvFILL(ar); i++) {
3221 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3222 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3223 sv_catsv(msg, dirmsgsv);
3225 sv_catpvn(msg, ")", 1);
3226 SvREFCNT_dec(dirmsgsv);
3227 msgstr = SvPV_nolen(msg);
3229 DIE(aTHX_ "Can't locate %s", msgstr);
3235 SETERRNO(0, SS$_NORMAL);
3237 /* Assume success here to prevent recursive requirement. */
3238 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
3239 newSVpv(CopFILE(&PL_compiling), 0), 0 );
3243 lex_start(sv_2mortal(newSVpvn("",0)));
3244 SAVEGENERICSV(PL_rsfp_filters);
3245 PL_rsfp_filters = Nullav;
3250 SAVESPTR(PL_compiling.cop_warnings);
3251 if (PL_dowarn & G_WARN_ALL_ON)
3252 PL_compiling.cop_warnings = pWARN_ALL ;
3253 else if (PL_dowarn & G_WARN_ALL_OFF)
3254 PL_compiling.cop_warnings = pWARN_NONE ;
3256 PL_compiling.cop_warnings = pWARN_STD ;
3258 if (filter_sub || filter_child_proc) {
3259 SV *datasv = filter_add(run_user_filter, Nullsv);
3260 IoLINES(datasv) = filter_has_file;
3261 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3262 IoTOP_GV(datasv) = (GV *)filter_state;
3263 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3266 /* switch to eval mode */
3267 push_return(PL_op->op_next);
3268 PUSHBLOCK(cx, CXt_EVAL, SP);
3269 PUSHEVAL(cx, name, Nullgv);
3271 SAVECOPLINE(&PL_compiling);
3272 CopLINE_set(&PL_compiling, 0);
3276 MUTEX_LOCK(&PL_eval_mutex);
3277 if (PL_eval_owner && PL_eval_owner != thr)
3278 while (PL_eval_owner)
3279 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3280 PL_eval_owner = thr;
3281 MUTEX_UNLOCK(&PL_eval_mutex);
3282 #endif /* USE_THREADS */
3283 return DOCATCH(doeval(G_SCALAR, NULL));
3288 return pp_require();
3294 register PERL_CONTEXT *cx;
3296 I32 gimme = GIMME_V, was = PL_sub_generation;
3297 char tbuf[TYPE_DIGITS(long) + 12];
3298 char *tmpbuf = tbuf;
3303 if (!SvPV(sv,len) || !len)
3305 TAINT_PROPER("eval");
3311 /* switch to eval mode */
3313 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3314 SV *sv = sv_newmortal();
3315 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3316 (unsigned long)++PL_evalseq,
3317 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3321 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3322 SAVECOPFILE_FREE(&PL_compiling);
3323 CopFILE_set(&PL_compiling, tmpbuf+2);
3324 SAVECOPLINE(&PL_compiling);
3325 CopLINE_set(&PL_compiling, 1);
3326 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3327 deleting the eval's FILEGV from the stash before gv_check() runs
3328 (i.e. before run-time proper). To work around the coredump that
3329 ensues, we always turn GvMULTI_on for any globals that were
3330 introduced within evals. See force_ident(). GSAR 96-10-12 */
3331 safestr = savepv(tmpbuf);
3332 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3334 PL_hints = PL_op->op_targ;
3335 SAVESPTR(PL_compiling.cop_warnings);
3336 if (specialWARN(PL_curcop->cop_warnings))
3337 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3339 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3340 SAVEFREESV(PL_compiling.cop_warnings);
3343 push_return(PL_op->op_next);
3344 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3345 PUSHEVAL(cx, 0, Nullgv);
3347 /* prepare to compile string */
3349 if (PERLDB_LINE && PL_curstash != PL_debstash)
3350 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
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 ret = doeval(gimme, NULL);
3361 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3362 && ret != PL_op->op_next) { /* Successive compilation. */
3363 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3365 return DOCATCH(ret);
3375 register PERL_CONTEXT *cx;
3377 U8 save_flags = PL_op -> op_flags;
3382 retop = pop_return();
3385 if (gimme == G_VOID)
3387 else if (gimme == G_SCALAR) {
3390 if (SvFLAGS(TOPs) & SVs_TEMP)
3393 *MARK = sv_mortalcopy(TOPs);
3397 *MARK = &PL_sv_undef;
3402 /* in case LEAVE wipes old return values */
3403 for (mark = newsp + 1; mark <= SP; mark++) {
3404 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3405 *mark = sv_mortalcopy(*mark);
3406 TAINT_NOT; /* Each item is independent */
3410 PL_curpm = newpm; /* Don't pop $1 et al till now */
3412 if (AvFILLp(PL_comppad_name) >= 0)
3416 assert(CvDEPTH(PL_compcv) == 1);
3418 CvDEPTH(PL_compcv) = 0;
3421 if (optype == OP_REQUIRE &&
3422 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3424 /* Unassume the success we assumed earlier. */
3425 SV *nsv = cx->blk_eval.old_namesv;
3426 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
3427 retop = Perl_die(aTHX_ "%s did not return a true value", SvPVX(nsv));
3428 /* die_where() did LEAVE, or we won't be here */
3432 if (!(save_flags & OPf_SPECIAL))
3442 register PERL_CONTEXT *cx;
3443 I32 gimme = GIMME_V;
3448 push_return(cLOGOP->op_other->op_next);
3449 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3451 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3453 PL_in_eval = EVAL_INEVAL;
3456 return DOCATCH(PL_op->op_next);
3466 register PERL_CONTEXT *cx;
3474 if (gimme == G_VOID)
3476 else if (gimme == G_SCALAR) {
3479 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3482 *MARK = sv_mortalcopy(TOPs);
3486 *MARK = &PL_sv_undef;
3491 /* in case LEAVE wipes old return values */
3492 for (mark = newsp + 1; mark <= SP; mark++) {
3493 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3494 *mark = sv_mortalcopy(*mark);
3495 TAINT_NOT; /* Each item is independent */
3499 PL_curpm = newpm; /* Don't pop $1 et al till now */
3507 S_doparseform(pTHX_ SV *sv)
3510 register char *s = SvPV_force(sv, len);
3511 register char *send = s + len;
3512 register char *base;
3513 register I32 skipspaces = 0;
3516 bool postspace = FALSE;
3524 Perl_croak(aTHX_ "Null picture in formline");
3526 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3531 *fpc++ = FF_LINEMARK;
3532 noblank = repeat = FALSE;
3550 case ' ': case '\t':
3561 *fpc++ = FF_LITERAL;
3569 *fpc++ = skipspaces;
3573 *fpc++ = FF_NEWLINE;
3577 arg = fpc - linepc + 1;
3584 *fpc++ = FF_LINEMARK;
3585 noblank = repeat = FALSE;
3594 ischop = s[-1] == '^';
3600 arg = (s - base) - 1;
3602 *fpc++ = FF_LITERAL;
3611 *fpc++ = FF_LINEGLOB;
3613 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3614 arg = ischop ? 512 : 0;
3624 arg |= 256 + (s - f);
3626 *fpc++ = s - base; /* fieldsize for FETCH */
3627 *fpc++ = FF_DECIMAL;
3632 bool ismore = FALSE;
3635 while (*++s == '>') ;
3636 prespace = FF_SPACE;
3638 else if (*s == '|') {
3639 while (*++s == '|') ;
3640 prespace = FF_HALFSPACE;
3645 while (*++s == '<') ;
3648 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3652 *fpc++ = s - base; /* fieldsize for FETCH */
3654 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3672 { /* need to jump to the next word */
3674 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3675 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3676 s = SvPVX(sv) + SvCUR(sv) + z;
3678 Copy(fops, s, arg, U16);
3680 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3685 * The mergesort implementation is by Peter M. Mcilroy <pmcilroy@lucent.com>.
3687 * The original code was written in conjunction with BSD Computer Software
3688 * Research Group at University of California, Berkeley.
3690 * See also: "Optimistic Merge Sort" (SODA '92)
3692 * The integration to Perl is by John P. Linderman <jpl@research.att.com>.
3694 * The code can be distributed under the same terms as Perl itself.
3699 #include <sys/types.h>
3704 #define New(ID,VAR,N,TYPE) VAR=(TYPE *)malloc((N)*sizeof(TYPE))
3705 #define Safefree(VAR) free(VAR)
3706 typedef int (*SVCOMPARE_t) (pTHXo_ SV*, SV*);
3707 #endif /* TESTHARNESS */
3709 typedef char * aptr; /* pointer for arithmetic on sizes */
3710 typedef SV * gptr; /* pointers in our lists */
3712 /* Binary merge internal sort, with a few special mods
3713 ** for the special perl environment it now finds itself in.
3715 ** Things that were once options have been hotwired
3716 ** to values suitable for this use. In particular, we'll always
3717 ** initialize looking for natural runs, we'll always produce stable
3718 ** output, and we'll always do Peter McIlroy's binary merge.
3721 /* Pointer types for arithmetic and storage and convenience casts */
3723 #define APTR(P) ((aptr)(P))
3724 #define GPTP(P) ((gptr *)(P))
3725 #define GPPP(P) ((gptr **)(P))
3728 /* byte offset from pointer P to (larger) pointer Q */
3729 #define BYTEOFF(P, Q) (APTR(Q) - APTR(P))
3731 #define PSIZE sizeof(gptr)
3733 /* If PSIZE is power of 2, make PSHIFT that power, if that helps */
3736 #define PNELEM(P, Q) (BYTEOFF(P,Q) >> (PSHIFT))
3737 #define PNBYTE(N) ((N) << (PSHIFT))
3738 #define PINDEX(P, N) (GPTP(APTR(P) + PNBYTE(N)))
3740 /* Leave optimization to compiler */
3741 #define PNELEM(P, Q) (GPTP(Q) - GPTP(P))
3742 #define PNBYTE(N) ((N) * (PSIZE))
3743 #define PINDEX(P, N) (GPTP(P) + (N))
3746 /* Pointer into other corresponding to pointer into this */
3747 #define POTHER(P, THIS, OTHER) GPTP(APTR(OTHER) + BYTEOFF(THIS,P))
3749 #define FROMTOUPTO(src, dst, lim) do *dst++ = *src++; while(src<lim)
3752 /* Runs are identified by a pointer in the auxilliary list.
3753 ** The pointer is at the start of the list,
3754 ** and it points to the start of the next list.
3755 ** NEXT is used as an lvalue, too.
3758 #define NEXT(P) (*GPPP(P))
3761 /* PTHRESH is the minimum number of pairs with the same sense to justify
3762 ** checking for a run and extending it. Note that PTHRESH counts PAIRS,
3763 ** not just elements, so PTHRESH == 8 means a run of 16.
3768 /* RTHRESH is the number of elements in a run that must compare low
3769 ** to the low element from the opposing run before we justify
3770 ** doing a binary rampup instead of single stepping.
3771 ** In random input, N in a row low should only happen with
3772 ** probability 2^(1-N), so we can risk that we are dealing
3773 ** with orderly input without paying much when we aren't.
3780 ** Overview of algorithm and variables.
3781 ** The array of elements at list1 will be organized into runs of length 2,
3782 ** or runs of length >= 2 * PTHRESH. We only try to form long runs when
3783 ** PTHRESH adjacent pairs compare in the same way, suggesting overall order.
3785 ** Unless otherwise specified, pair pointers address the first of two elements.
3787 ** b and b+1 are a pair that compare with sense ``sense''.
3788 ** b is the ``bottom'' of adjacent pairs that might form a longer run.
3790 ** p2 parallels b in the list2 array, where runs are defined by
3793 ** t represents the ``top'' of the adjacent pairs that might extend
3794 ** the run beginning at b. Usually, t addresses a pair
3795 ** that compares with opposite sense from (b,b+1).
3796 ** However, it may also address a singleton element at the end of list1,
3797 ** or it may be equal to ``last'', the first element beyond list1.
3799 ** r addresses the Nth pair following b. If this would be beyond t,
3800 ** we back it off to t. Only when r is less than t do we consider the
3801 ** run long enough to consider checking.
3803 ** q addresses a pair such that the pairs at b through q already form a run.
3804 ** Often, q will equal b, indicating we only are sure of the pair itself.
3805 ** However, a search on the previous cycle may have revealed a longer run,
3806 ** so q may be greater than b.
3808 ** p is used to work back from a candidate r, trying to reach q,
3809 ** which would mean b through r would be a run. If we discover such a run,
3810 ** we start q at r and try to push it further towards t.
3811 ** If b through r is NOT a run, we detect the wrong order at (p-1,p).
3812 ** In any event, after the check (if any), we have two main cases.
3814 ** 1) Short run. b <= q < p <= r <= t.
3815 ** b through q is a run (perhaps trivial)
3816 ** q through p are uninteresting pairs
3817 ** p through r is a run
3819 ** 2) Long run. b < r <= q < t.
3820 ** b through q is a run (of length >= 2 * PTHRESH)
3822 ** Note that degenerate cases are not only possible, but likely.
3823 ** For example, if the pair following b compares with opposite sense,
3824 ** then b == q < p == r == t.
3829 dynprep(pTHX_ gptr *list1, gptr *list2, size_t nmemb, SVCOMPARE_t cmp)
3832 register gptr *b, *p, *q, *t, *p2;
3833 register gptr c, *last, *r;
3837 last = PINDEX(b, nmemb);
3838 sense = (cmp(aTHX_ *b, *(b+1)) > 0);
3839 for (p2 = list2; b < last; ) {
3840 /* We just started, or just reversed sense.
3841 ** Set t at end of pairs with the prevailing sense.
3843 for (p = b+2, t = p; ++p < last; t = ++p) {
3844 if ((cmp(aTHX_ *t, *p) > 0) != sense) break;
3847 /* Having laid out the playing field, look for long runs */
3849 p = r = b + (2 * PTHRESH);
3850 if (r >= t) p = r = t; /* too short to care about */
3852 while (((cmp(aTHX_ *(p-1), *p) > 0) == sense) &&
3855 /* b through r is a (long) run.
3856 ** Extend it as far as possible.
3859 while (((p += 2) < t) &&
3860 ((cmp(aTHX_ *(p-1), *p) > 0) == sense)) q = p;
3861 r = p = q + 2; /* no simple pairs, no after-run */
3864 if (q > b) { /* run of greater than 2 at b */
3867 /* pick up singleton, if possible */
3869 ((t + 1) == last) &&
3870 ((cmp(aTHX_ *(p-1), *p) > 0) == sense))
3871 savep = r = p = q = last;
3872 p2 = NEXT(p2) = p2 + (p - b);
3873 if (sense) while (b < --p) {
3880 while (q < p) { /* simple pairs */
3881 p2 = NEXT(p2) = p2 + 2;
3888 if (((b = p) == t) && ((t+1) == last)) {
3900 /* Overview of bmerge variables:
3902 ** list1 and list2 address the main and auxiliary arrays.
3903 ** They swap identities after each merge pass.
3904 ** Base points to the original list1, so we can tell if
3905 ** the pointers ended up where they belonged (or must be copied).
3907 ** When we are merging two lists, f1 and f2 are the next elements
3908 ** on the respective lists. l1 and l2 mark the end of the lists.
3909 ** tp2 is the current location in the merged list.
3911 ** p1 records where f1 started.
3912 ** After the merge, a new descriptor is built there.
3914 ** p2 is a ``parallel'' pointer in (what starts as) descriptor space.
3915 ** It is used to identify and delimit the runs.
3917 ** In the heat of determining where q, the greater of the f1/f2 elements,
3918 ** belongs in the other list, b, t and p, represent bottom, top and probe
3919 ** locations, respectively, in the other list.
3920 ** They make convenient temporary pointers in other places.
3924 S_qsortsv(pTHX_ gptr *list1, size_t nmemb, SVCOMPARE_t cmp)
3928 register gptr *f1, *f2, *t, *b, *p, *tp2, *l1, *l2, *q;
3929 gptr *aux, *list2, *p2, *last;
3933 if (nmemb <= 1) return; /* sorted trivially */
3934 New(799,list2,nmemb,gptr); /* allocate auxilliary array */
3936 dynprep(aTHX_ list1, list2, nmemb, cmp);
3937 last = PINDEX(list2, nmemb);
3938 while (NEXT(list2) != last) {
3939 /* More than one run remains. Do some merging to reduce runs. */
3941 for (tp2 = p2 = list2; p2 != last;) {
3942 /* The new first run begins where the old second list ended.
3943 ** Use the p2 ``parallel'' pointer to identify the end of the run.
3947 f2 = l1 = POTHER(t, list2, list1);
3948 if (t != last) t = NEXT(t);
3949 l2 = POTHER(t, list2, list1);
3951 while (f1 < l1 && f2 < l2) {
3952 /* If head 1 is larger than head 2, find ALL the elements
3953 ** in list 2 strictly less than head1, write them all,
3954 ** then head 1. Then compare the new heads, and repeat,
3955 ** until one or both lists are exhausted.
3957 ** In all comparisons (after establishing
3958 ** which head to merge) the item to merge
3959 ** (at pointer q) is the first operand of
3960 ** the comparison. When we want to know
3961 ** if ``q is strictly less than the other'',
3963 ** cmp(q, other) < 0
3964 ** because stability demands that we treat equality
3965 ** as high when q comes from l2, and as low when
3966 ** q was from l1. So we ask the question by doing
3967 ** cmp(q, other) <= sense
3968 ** and make sense == 0 when equality should look low,
3969 ** and -1 when equality should look high.
3973 if (cmp(aTHX_ *f1, *f2) <= 0) {
3974 q = f2; b = f1; t = l1;
3977 q = f1; b = f2; t = l2;
3984 ** Leave t at something strictly
3985 ** greater than q (or at the end of the list),
3986 ** and b at something strictly less than q.
3988 for (i = 1, run = 0 ;;) {
3989 if ((p = PINDEX(b, i)) >= t) {
3991 if (((p = PINDEX(t, -1)) > b) &&
3992 (cmp(aTHX_ *q, *p) <= sense))
3996 } else if (cmp(aTHX_ *q, *p) <= sense) {
4000 if (++run >= RTHRESH) i += i;
4004 /* q is known to follow b and must be inserted before t.
4005 ** Increment b, so the range of possibilities is [b,t).
4006 ** Round binary split down, to favor early appearance.
4007 ** Adjust b and t until q belongs just before t.
4012 p = PINDEX(b, (PNELEM(b, t) - 1) / 2);
4013 if (cmp(aTHX_ *q, *p) <= sense) {
4019 /* Copy all the strictly low elements */
4022 FROMTOUPTO(f2, tp2, t);
4025 FROMTOUPTO(f1, tp2, t);
4031 /* Run out remaining list */
4033 if (f2 < l2) FROMTOUPTO(f2, tp2, l2);
4034 } else FROMTOUPTO(f1, tp2, l1);
4035 p1 = NEXT(p1) = POTHER(tp2, list2, list1);
4040 last = PINDEX(list2, nmemb);
4042 if (base == list2) {
4043 last = PINDEX(list1, nmemb);
4044 FROMTOUPTO(list1, list2, last);
4059 sortcv(pTHXo_ SV *a, SV *b)
4062 I32 oldsaveix = PL_savestack_ix;
4063 I32 oldscopeix = PL_scopestack_ix;
4065 GvSV(PL_firstgv) = a;
4066 GvSV(PL_secondgv) = b;
4067 PL_stack_sp = PL_stack_base;
4070 if (PL_stack_sp != PL_stack_base + 1)
4071 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4072 if (!SvNIOKp(*PL_stack_sp))
4073 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4074 result = SvIV(*PL_stack_sp);
4075 while (PL_scopestack_ix > oldscopeix) {
4078 leave_scope(oldsaveix);
4083 sortcv_stacked(pTHXo_ SV *a, SV *b)
4086 I32 oldsaveix = PL_savestack_ix;
4087 I32 oldscopeix = PL_scopestack_ix;
4092 av = (AV*)PL_curpad[0];
4094 av = GvAV(PL_defgv);
4097 if (AvMAX(av) < 1) {
4098 SV** ary = AvALLOC(av);
4099 if (AvARRAY(av) != ary) {
4100 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
4101 SvPVX(av) = (char*)ary;
4103 if (AvMAX(av) < 1) {
4106 SvPVX(av) = (char*)ary;
4113 PL_stack_sp = PL_stack_base;
4116 if (PL_stack_sp != PL_stack_base + 1)
4117 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4118 if (!SvNIOKp(*PL_stack_sp))
4119 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4120 result = SvIV(*PL_stack_sp);
4121 while (PL_scopestack_ix > oldscopeix) {
4124 leave_scope(oldsaveix);
4129 sortcv_xsub(pTHXo_ SV *a, SV *b)
4132 I32 oldsaveix = PL_savestack_ix;
4133 I32 oldscopeix = PL_scopestack_ix;
4135 CV *cv=(CV*)PL_sortcop;
4143 (void)(*CvXSUB(cv))(aTHXo_ cv);
4144 if (PL_stack_sp != PL_stack_base + 1)
4145 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4146 if (!SvNIOKp(*PL_stack_sp))
4147 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4148 result = SvIV(*PL_stack_sp);
4149 while (PL_scopestack_ix > oldscopeix) {
4152 leave_scope(oldsaveix);
4158 sv_ncmp(pTHXo_ SV *a, SV *b)
4162 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4166 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4170 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4172 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4174 if (PL_amagic_generation) { \
4175 if (SvAMAGIC(left)||SvAMAGIC(right))\
4176 *svp = amagic_call(left, \
4184 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4187 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4192 I32 i = SvIVX(tmpsv);
4202 return sv_ncmp(aTHXo_ a, b);
4206 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4209 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4214 I32 i = SvIVX(tmpsv);
4224 return sv_i_ncmp(aTHXo_ a, b);
4228 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4231 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4236 I32 i = SvIVX(tmpsv);
4246 return sv_cmp(str1, str2);
4250 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4253 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4258 I32 i = SvIVX(tmpsv);
4268 return sv_cmp_locale(str1, str2);
4272 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4274 SV *datasv = FILTER_DATA(idx);
4275 int filter_has_file = IoLINES(datasv);
4276 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4277 SV *filter_state = (SV *)IoTOP_GV(datasv);
4278 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4281 /* I was having segfault trouble under Linux 2.2.5 after a
4282 parse error occured. (Had to hack around it with a test
4283 for PL_error_count == 0.) Solaris doesn't segfault --
4284 not sure where the trouble is yet. XXX */
4286 if (filter_has_file) {
4287 len = FILTER_READ(idx+1, buf_sv, maxlen);
4290 if (filter_sub && len >= 0) {
4301 PUSHs(sv_2mortal(newSViv(maxlen)));
4303 PUSHs(filter_state);
4306 count = call_sv(filter_sub, G_SCALAR);
4322 IoLINES(datasv) = 0;
4323 if (filter_child_proc) {
4324 SvREFCNT_dec(filter_child_proc);
4325 IoFMT_GV(datasv) = Nullgv;
4328 SvREFCNT_dec(filter_state);
4329 IoTOP_GV(datasv) = Nullgv;
4332 SvREFCNT_dec(filter_sub);
4333 IoBOTTOM_GV(datasv) = Nullgv;
4335 filter_del(run_user_filter);
4344 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4346 return sv_cmp_locale(str1, str2);
4350 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4352 return sv_cmp(str1, str2);
4355 #endif /* PERL_OBJECT */