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 RESTORE_NUMERIC_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). */
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);
757 PL_markstack_ptr[-1] += shift;
758 *PL_markstack_ptr += shift;
762 /* copy the new items down to the destination list */
763 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
765 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
767 LEAVE; /* exit inner scope */
770 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
773 (void)POPMARK; /* pop top */
774 LEAVE; /* exit outer scope */
775 (void)POPMARK; /* pop src */
776 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
777 (void)POPMARK; /* pop dst */
778 SP = PL_stack_base + POPMARK; /* pop original mark */
779 if (gimme == G_SCALAR) {
783 else if (gimme == G_ARRAY)
790 ENTER; /* enter inner scope */
793 /* set $_ to the new source item */
794 src = PL_stack_base[PL_markstack_ptr[-1]];
798 RETURNOP(cLOGOP->op_other);
804 djSP; dMARK; dORIGMARK;
806 SV **myorigmark = ORIGMARK;
812 OP* nextop = PL_op->op_next;
814 bool hasargs = FALSE;
817 if (gimme != G_ARRAY) {
823 SAVEVPTR(PL_sortcop);
824 if (PL_op->op_flags & OPf_STACKED) {
825 if (PL_op->op_flags & OPf_SPECIAL) {
826 OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
827 kid = kUNOP->op_first; /* pass rv2gv */
828 kid = kUNOP->op_first; /* pass leave */
829 PL_sortcop = kid->op_next;
830 stash = CopSTASH(PL_curcop);
833 cv = sv_2cv(*++MARK, &stash, &gv, 0);
834 if (cv && SvPOK(cv)) {
836 char *proto = SvPV((SV*)cv, n_a);
837 if (proto && strEQ(proto, "$$")) {
841 if (!(cv && CvROOT(cv))) {
842 if (cv && CvXSUB(cv)) {
846 SV *tmpstr = sv_newmortal();
847 gv_efullname3(tmpstr, gv, Nullch);
848 DIE(aTHX_ "Undefined sort subroutine \"%s\" called",
852 DIE(aTHX_ "Undefined subroutine in sort");
857 PL_sortcop = (OP*)cv;
859 PL_sortcop = CvSTART(cv);
860 SAVEVPTR(CvROOT(cv)->op_ppaddr);
861 CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
864 PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
870 stash = CopSTASH(PL_curcop);
874 while (MARK < SP) { /* This may or may not shift down one here. */
876 if ((*up = *++MARK)) { /* Weed out nulls. */
878 if (!PL_sortcop && !SvPOK(*up)) {
883 (void)sv_2pv(*up, &n_a);
888 max = --up - myorigmark;
893 bool oldcatch = CATCH_GET;
899 PUSHSTACKi(PERLSI_SORT);
900 if (!hasargs && !is_xsub) {
901 if (PL_sortstash != stash || !PL_firstgv || !PL_secondgv) {
902 SAVESPTR(PL_firstgv);
903 SAVESPTR(PL_secondgv);
904 PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
905 PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
906 PL_sortstash = stash;
909 sv_lock((SV *)PL_firstgv);
910 sv_lock((SV *)PL_secondgv);
912 SAVESPTR(GvSV(PL_firstgv));
913 SAVESPTR(GvSV(PL_secondgv));
916 PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
917 if (!(PL_op->op_flags & OPf_SPECIAL)) {
918 cx->cx_type = CXt_SUB;
919 cx->blk_gimme = G_SCALAR;
922 (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
924 PL_sortcxix = cxstack_ix;
926 if (hasargs && !is_xsub) {
927 /* This is mostly copied from pp_entersub */
928 AV *av = (AV*)PL_curpad[0];
931 cx->blk_sub.savearray = GvAV(PL_defgv);
932 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
933 #endif /* USE_THREADS */
934 cx->blk_sub.oldcurpad = PL_curpad;
935 cx->blk_sub.argarray = av;
937 qsortsv((myorigmark+1), max,
938 is_xsub ? sortcv_xsub : hasargs ? sortcv_stacked : sortcv);
940 POPBLOCK(cx,PL_curpm);
948 MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
949 qsortsv(ORIGMARK+1, max,
950 (PL_op->op_private & OPpSORT_NUMERIC)
951 ? ( (PL_op->op_private & OPpSORT_INTEGER)
952 ? ( overloading ? amagic_i_ncmp : sv_i_ncmp)
953 : ( overloading ? amagic_ncmp : sv_ncmp))
954 : ( (PL_op->op_private & OPpLOCALE)
957 : sv_cmp_locale_static)
958 : ( overloading ? amagic_cmp : sv_cmp_static)));
959 if (PL_op->op_private & OPpSORT_REVERSE) {
961 SV **q = ORIGMARK+max;
971 PL_stack_sp = ORIGMARK + max;
979 if (GIMME == G_ARRAY)
981 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
982 return cLOGOP->op_other;
991 if (GIMME == G_ARRAY) {
992 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
996 SV *targ = PAD_SV(PL_op->op_targ);
998 if ((PL_op->op_private & OPpFLIP_LINENUM)
999 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1001 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1002 if (PL_op->op_flags & OPf_SPECIAL) {
1010 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1023 if (GIMME == G_ARRAY) {
1029 if (SvGMAGICAL(left))
1031 if (SvGMAGICAL(right))
1034 if (SvNIOKp(left) || !SvPOKp(left) ||
1035 SvNIOKp(right) || !SvPOKp(right) ||
1036 (looks_like_number(left) && *SvPVX(left) != '0' &&
1037 looks_like_number(right) && *SvPVX(right) != '0'))
1039 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
1040 DIE(aTHX_ "Range iterator outside integer range");
1051 sv = sv_2mortal(newSViv(i++));
1056 SV *final = sv_mortalcopy(right);
1058 char *tmps = SvPV(final, len);
1060 sv = sv_mortalcopy(left);
1062 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1064 if (strEQ(SvPVX(sv),tmps))
1066 sv = sv_2mortal(newSVsv(sv));
1073 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1075 if ((PL_op->op_private & OPpFLIP_LINENUM)
1076 ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
1078 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1079 sv_catpv(targ, "E0");
1090 S_dopoptolabel(pTHX_ char *label)
1094 register PERL_CONTEXT *cx;
1096 for (i = cxstack_ix; i >= 0; i--) {
1098 switch (CxTYPE(cx)) {
1100 if (ckWARN(WARN_EXITING))
1101 Perl_warner(aTHX_ WARN_EXITING, "Exiting substitution via %s",
1102 PL_op_name[PL_op->op_type]);
1105 if (ckWARN(WARN_EXITING))
1106 Perl_warner(aTHX_ WARN_EXITING, "Exiting subroutine via %s",
1107 PL_op_name[PL_op->op_type]);
1110 if (ckWARN(WARN_EXITING))
1111 Perl_warner(aTHX_ WARN_EXITING, "Exiting format via %s",
1112 PL_op_name[PL_op->op_type]);
1115 if (ckWARN(WARN_EXITING))
1116 Perl_warner(aTHX_ WARN_EXITING, "Exiting eval via %s",
1117 PL_op_name[PL_op->op_type]);
1120 if (ckWARN(WARN_EXITING))
1121 Perl_warner(aTHX_ WARN_EXITING, "Exiting pseudo-block via %s",
1122 PL_op_name[PL_op->op_type]);
1125 if (!cx->blk_loop.label ||
1126 strNE(label, cx->blk_loop.label) ) {
1127 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1128 (long)i, cx->blk_loop.label));
1131 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1139 Perl_dowantarray(pTHX)
1141 I32 gimme = block_gimme();
1142 return (gimme == G_VOID) ? G_SCALAR : gimme;
1146 Perl_block_gimme(pTHX)
1151 cxix = dopoptosub(cxstack_ix);
1155 switch (cxstack[cxix].blk_gimme) {
1163 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1170 S_dopoptosub(pTHX_ I32 startingblock)
1173 return dopoptosub_at(cxstack, startingblock);
1177 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1181 register PERL_CONTEXT *cx;
1182 for (i = startingblock; i >= 0; i--) {
1184 switch (CxTYPE(cx)) {
1190 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1198 S_dopoptoeval(pTHX_ I32 startingblock)
1202 register PERL_CONTEXT *cx;
1203 for (i = startingblock; i >= 0; i--) {
1205 switch (CxTYPE(cx)) {
1209 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1217 S_dopoptoloop(pTHX_ I32 startingblock)
1221 register PERL_CONTEXT *cx;
1222 for (i = startingblock; i >= 0; i--) {
1224 switch (CxTYPE(cx)) {
1226 if (ckWARN(WARN_EXITING))
1227 Perl_warner(aTHX_ WARN_EXITING, "Exiting substitution via %s",
1228 PL_op_name[PL_op->op_type]);
1231 if (ckWARN(WARN_EXITING))
1232 Perl_warner(aTHX_ WARN_EXITING, "Exiting subroutine via %s",
1233 PL_op_name[PL_op->op_type]);
1236 if (ckWARN(WARN_EXITING))
1237 Perl_warner(aTHX_ WARN_EXITING, "Exiting format via %s",
1238 PL_op_name[PL_op->op_type]);
1241 if (ckWARN(WARN_EXITING))
1242 Perl_warner(aTHX_ WARN_EXITING, "Exiting eval via %s",
1243 PL_op_name[PL_op->op_type]);
1246 if (ckWARN(WARN_EXITING))
1247 Perl_warner(aTHX_ WARN_EXITING, "Exiting pseudo-block via %s",
1248 PL_op_name[PL_op->op_type]);
1251 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1259 Perl_dounwind(pTHX_ I32 cxix)
1262 register PERL_CONTEXT *cx;
1265 while (cxstack_ix > cxix) {
1267 cx = &cxstack[cxstack_ix];
1268 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1269 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1270 /* Note: we don't need to restore the base context info till the end. */
1271 switch (CxTYPE(cx)) {
1274 continue; /* not break */
1296 * Closures mentioned at top level of eval cannot be referenced
1297 * again, and their presence indirectly causes a memory leak.
1298 * (Note that the fact that compcv and friends are still set here
1299 * is, AFAIK, an accident.) --Chip
1301 * XXX need to get comppad et al from eval's cv rather than
1302 * relying on the incidental global values.
1305 S_free_closures(pTHX)
1308 SV **svp = AvARRAY(PL_comppad_name);
1310 for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
1312 if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
1314 svp[ix] = &PL_sv_undef;
1318 SvREFCNT_dec(CvOUTSIDE(sv));
1319 CvOUTSIDE(sv) = Nullcv;
1332 Perl_qerror(pTHX_ SV *err)
1335 sv_catsv(ERRSV, err);
1337 sv_catsv(PL_errors, err);
1339 Perl_warn(aTHX_ "%"SVf, err);
1344 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1349 register PERL_CONTEXT *cx;
1354 if (PL_in_eval & EVAL_KEEPERR) {
1355 static char prefix[] = "\t(in cleanup) ";
1360 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1363 if (*e != *message || strNE(e,message))
1367 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1368 sv_catpvn(err, prefix, sizeof(prefix)-1);
1369 sv_catpvn(err, message, msglen);
1370 if (ckWARN(WARN_MISC)) {
1371 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1372 Perl_warner(aTHX_ WARN_MISC, SvPVX(err)+start);
1377 sv_setpvn(ERRSV, message, msglen);
1380 message = SvPVx(ERRSV, msglen);
1382 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1383 && PL_curstackinfo->si_prev)
1392 if (cxix < cxstack_ix)
1395 POPBLOCK(cx,PL_curpm);
1396 if (CxTYPE(cx) != CXt_EVAL) {
1397 PerlIO_write(Perl_error_log, "panic: die ", 11);
1398 PerlIO_write(Perl_error_log, message, msglen);
1403 if (gimme == G_SCALAR)
1404 *++newsp = &PL_sv_undef;
1405 PL_stack_sp = newsp;
1409 if (optype == OP_REQUIRE) {
1410 char* msg = SvPVx(ERRSV, n_a);
1411 DIE(aTHX_ "%sCompilation failed in require",
1412 *msg ? msg : "Unknown error\n");
1414 return pop_return();
1418 message = SvPVx(ERRSV, msglen);
1421 /* SFIO can really mess with your errno */
1424 PerlIO *serr = Perl_error_log;
1426 PerlIO_write(serr, message, msglen);
1427 (void)PerlIO_flush(serr);
1440 if (SvTRUE(left) != SvTRUE(right))
1452 RETURNOP(cLOGOP->op_other);
1461 RETURNOP(cLOGOP->op_other);
1467 register I32 cxix = dopoptosub(cxstack_ix);
1468 register PERL_CONTEXT *cx;
1469 register PERL_CONTEXT *ccstack = cxstack;
1470 PERL_SI *top_si = PL_curstackinfo;
1481 /* we may be in a higher stacklevel, so dig down deeper */
1482 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1483 top_si = top_si->si_prev;
1484 ccstack = top_si->si_cxstack;
1485 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1488 if (GIMME != G_ARRAY)
1492 if (PL_DBsub && cxix >= 0 &&
1493 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1497 cxix = dopoptosub_at(ccstack, cxix - 1);
1500 cx = &ccstack[cxix];
1501 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1502 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1503 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1504 field below is defined for any cx. */
1505 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1506 cx = &ccstack[dbcxix];
1509 stashname = CopSTASHPV(cx->blk_oldcop);
1510 if (GIMME != G_ARRAY) {
1512 PUSHs(&PL_sv_undef);
1515 sv_setpv(TARG, stashname);
1522 PUSHs(&PL_sv_undef);
1524 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1525 PUSHs(sv_2mortal(newSVpv(CopFILE(cx->blk_oldcop), 0)));
1526 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1529 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1530 /* So is ccstack[dbcxix]. */
1532 gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
1533 PUSHs(sv_2mortal(sv));
1534 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1537 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1538 PUSHs(sv_2mortal(newSViv(0)));
1540 gimme = (I32)cx->blk_gimme;
1541 if (gimme == G_VOID)
1542 PUSHs(&PL_sv_undef);
1544 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1545 if (CxTYPE(cx) == CXt_EVAL) {
1547 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1548 PUSHs(cx->blk_eval.cur_text);
1552 else if (cx->blk_eval.old_namesv) {
1553 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1556 /* eval BLOCK (try blocks have old_namesv == 0) */
1558 PUSHs(&PL_sv_undef);
1559 PUSHs(&PL_sv_undef);
1563 PUSHs(&PL_sv_undef);
1564 PUSHs(&PL_sv_undef);
1566 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1567 && CopSTASH_eq(PL_curcop, PL_debstash))
1569 AV *ary = cx->blk_sub.argarray;
1570 int off = AvARRAY(ary) - AvALLOC(ary);
1574 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1577 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1580 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1581 av_extend(PL_dbargs, AvFILLp(ary) + off);
1582 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1583 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1585 /* XXX only hints propagated via op_private are currently
1586 * visible (others are not easily accessible, since they
1587 * use the global PL_hints) */
1588 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1589 HINT_PRIVATE_MASK)));
1592 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1594 if (old_warnings == pWARN_NONE ||
1595 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1596 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1597 else if (old_warnings == pWARN_ALL ||
1598 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON))
1599 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1601 mask = newSVsv(old_warnings);
1602 PUSHs(sv_2mortal(mask));
1617 sv_reset(tmps, CopSTASH(PL_curcop));
1629 PL_curcop = (COP*)PL_op;
1630 TAINT_NOT; /* Each statement is presumed innocent */
1631 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1634 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1638 register PERL_CONTEXT *cx;
1639 I32 gimme = G_ARRAY;
1646 DIE(aTHX_ "No DB::DB routine defined");
1648 if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
1660 push_return(PL_op->op_next);
1661 PUSHBLOCK(cx, CXt_SUB, SP);
1664 (void)SvREFCNT_inc(cv);
1665 SAVEVPTR(PL_curpad);
1666 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1667 RETURNOP(CvSTART(cv));
1681 register PERL_CONTEXT *cx;
1682 I32 gimme = GIMME_V;
1684 U32 cxtype = CXt_LOOP;
1693 if (PL_op->op_flags & OPf_SPECIAL) {
1695 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1696 SAVEGENERICSV(*svp);
1700 #endif /* USE_THREADS */
1701 if (PL_op->op_targ) {
1702 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1705 iterdata = (void*)PL_op->op_targ;
1706 cxtype |= CXp_PADVAR;
1711 svp = &GvSV(gv); /* symbol table variable */
1712 SAVEGENERICSV(*svp);
1715 iterdata = (void*)gv;
1721 PUSHBLOCK(cx, cxtype, SP);
1723 PUSHLOOP(cx, iterdata, MARK);
1725 PUSHLOOP(cx, svp, MARK);
1727 if (PL_op->op_flags & OPf_STACKED) {
1728 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1729 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1731 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1732 SvNIOKp(cx->blk_loop.iterary) || !SvPOKp(cx->blk_loop.iterary) ||
1733 (looks_like_number(sv) && *SvPVX(sv) != '0' &&
1734 looks_like_number((SV*)cx->blk_loop.iterary) &&
1735 *SvPVX(cx->blk_loop.iterary) != '0'))
1737 if (SvNV(sv) < IV_MIN ||
1738 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1739 DIE(aTHX_ "Range iterator outside integer range");
1740 cx->blk_loop.iterix = SvIV(sv);
1741 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1744 cx->blk_loop.iterlval = newSVsv(sv);
1748 cx->blk_loop.iterary = PL_curstack;
1749 AvFILLp(PL_curstack) = SP - PL_stack_base;
1750 cx->blk_loop.iterix = MARK - PL_stack_base;
1759 register PERL_CONTEXT *cx;
1760 I32 gimme = GIMME_V;
1766 PUSHBLOCK(cx, CXt_LOOP, SP);
1767 PUSHLOOP(cx, 0, SP);
1775 register PERL_CONTEXT *cx;
1783 newsp = PL_stack_base + cx->blk_loop.resetsp;
1786 if (gimme == G_VOID)
1788 else if (gimme == G_SCALAR) {
1790 *++newsp = sv_mortalcopy(*SP);
1792 *++newsp = &PL_sv_undef;
1796 *++newsp = sv_mortalcopy(*++mark);
1797 TAINT_NOT; /* Each item is independent */
1803 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1804 PL_curpm = newpm; /* ... and pop $1 et al */
1816 register PERL_CONTEXT *cx;
1817 bool popsub2 = FALSE;
1818 bool clear_errsv = FALSE;
1825 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1826 if (cxstack_ix == PL_sortcxix
1827 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1829 if (cxstack_ix > PL_sortcxix)
1830 dounwind(PL_sortcxix);
1831 AvARRAY(PL_curstack)[1] = *SP;
1832 PL_stack_sp = PL_stack_base + 1;
1837 cxix = dopoptosub(cxstack_ix);
1839 DIE(aTHX_ "Can't return outside a subroutine");
1840 if (cxix < cxstack_ix)
1844 switch (CxTYPE(cx)) {
1849 if (!(PL_in_eval & EVAL_KEEPERR))
1854 if (AvFILLp(PL_comppad_name) >= 0)
1857 if (optype == OP_REQUIRE &&
1858 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1860 /* Unassume the success we assumed earlier. */
1861 SV *nsv = cx->blk_eval.old_namesv;
1862 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
1863 DIE(aTHX_ "%s did not return a true value", SvPVX(nsv));
1870 DIE(aTHX_ "panic: return");
1874 if (gimme == G_SCALAR) {
1877 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1879 *++newsp = SvREFCNT_inc(*SP);
1884 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
1886 *++newsp = sv_mortalcopy(sv);
1891 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1894 *++newsp = sv_mortalcopy(*SP);
1897 *++newsp = &PL_sv_undef;
1899 else if (gimme == G_ARRAY) {
1900 while (++MARK <= SP) {
1901 *++newsp = (popsub2 && SvTEMP(*MARK))
1902 ? *MARK : sv_mortalcopy(*MARK);
1903 TAINT_NOT; /* Each item is independent */
1906 PL_stack_sp = newsp;
1908 /* Stack values are safe: */
1910 POPSUB(cx,sv); /* release CV and @_ ... */
1914 PL_curpm = newpm; /* ... and pop $1 et al */
1920 return pop_return();
1927 register PERL_CONTEXT *cx;
1937 if (PL_op->op_flags & OPf_SPECIAL) {
1938 cxix = dopoptoloop(cxstack_ix);
1940 DIE(aTHX_ "Can't \"last\" outside a loop block");
1943 cxix = dopoptolabel(cPVOP->op_pv);
1945 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1947 if (cxix < cxstack_ix)
1952 switch (CxTYPE(cx)) {
1955 newsp = PL_stack_base + cx->blk_loop.resetsp;
1956 nextop = cx->blk_loop.last_op->op_next;
1960 nextop = pop_return();
1964 nextop = pop_return();
1968 nextop = pop_return();
1971 DIE(aTHX_ "panic: last");
1975 if (gimme == G_SCALAR) {
1977 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1978 ? *SP : sv_mortalcopy(*SP);
1980 *++newsp = &PL_sv_undef;
1982 else if (gimme == G_ARRAY) {
1983 while (++MARK <= SP) {
1984 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1985 ? *MARK : sv_mortalcopy(*MARK);
1986 TAINT_NOT; /* Each item is independent */
1992 /* Stack values are safe: */
1995 POPLOOP(cx); /* release loop vars ... */
1999 POPSUB(cx,sv); /* release CV and @_ ... */
2002 PL_curpm = newpm; /* ... and pop $1 et al */
2012 register PERL_CONTEXT *cx;
2015 if (PL_op->op_flags & OPf_SPECIAL) {
2016 cxix = dopoptoloop(cxstack_ix);
2018 DIE(aTHX_ "Can't \"next\" outside a loop block");
2021 cxix = dopoptolabel(cPVOP->op_pv);
2023 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2025 if (cxix < cxstack_ix)
2028 /* clear off anything above the scope we're re-entering, but
2029 * save the rest until after a possible continue block */
2030 inner = PL_scopestack_ix;
2032 if (PL_scopestack_ix < inner)
2033 leave_scope(PL_scopestack[PL_scopestack_ix]);
2034 return cx->blk_loop.next_op;
2040 register PERL_CONTEXT *cx;
2043 if (PL_op->op_flags & OPf_SPECIAL) {
2044 cxix = dopoptoloop(cxstack_ix);
2046 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2049 cxix = dopoptolabel(cPVOP->op_pv);
2051 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2053 if (cxix < cxstack_ix)
2057 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2058 LEAVE_SCOPE(oldsave);
2059 return cx->blk_loop.redo_op;
2063 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
2067 static char too_deep[] = "Target of goto is too deeply nested";
2070 Perl_croak(aTHX_ too_deep);
2071 if (o->op_type == OP_LEAVE ||
2072 o->op_type == OP_SCOPE ||
2073 o->op_type == OP_LEAVELOOP ||
2074 o->op_type == OP_LEAVETRY)
2076 *ops++ = cUNOPo->op_first;
2078 Perl_croak(aTHX_ too_deep);
2081 if (o->op_flags & OPf_KIDS) {
2083 /* First try all the kids at this level, since that's likeliest. */
2084 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2085 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2086 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2089 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2090 if (kid == PL_lastgotoprobe)
2092 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2094 (ops[-1]->op_type != OP_NEXTSTATE &&
2095 ops[-1]->op_type != OP_DBSTATE)))
2097 if ((o = dofindlabel(kid, label, ops, oplimit)))
2116 register PERL_CONTEXT *cx;
2117 #define GOTO_DEPTH 64
2118 OP *enterops[GOTO_DEPTH];
2120 int do_dump = (PL_op->op_type == OP_DUMP);
2121 static char must_have_label[] = "goto must have label";
2124 if (PL_op->op_flags & OPf_STACKED) {
2128 /* This egregious kludge implements goto &subroutine */
2129 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2131 register PERL_CONTEXT *cx;
2132 CV* cv = (CV*)SvRV(sv);
2138 if (!CvROOT(cv) && !CvXSUB(cv)) {
2143 /* autoloaded stub? */
2144 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2146 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2147 GvNAMELEN(gv), FALSE);
2148 if (autogv && (cv = GvCV(autogv)))
2150 tmpstr = sv_newmortal();
2151 gv_efullname3(tmpstr, gv, Nullch);
2152 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2154 DIE(aTHX_ "Goto undefined subroutine");
2157 /* First do some returnish stuff. */
2158 cxix = dopoptosub(cxstack_ix);
2160 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2161 if (cxix < cxstack_ix)
2164 if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
2165 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2167 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2168 /* put @_ back onto stack */
2169 AV* av = cx->blk_sub.argarray;
2171 items = AvFILLp(av) + 1;
2173 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2174 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2175 PL_stack_sp += items;
2177 SvREFCNT_dec(GvAV(PL_defgv));
2178 GvAV(PL_defgv) = cx->blk_sub.savearray;
2179 #endif /* USE_THREADS */
2180 /* abandon @_ if it got reified */
2182 (void)sv_2mortal((SV*)av); /* delay until return */
2184 av_extend(av, items-1);
2185 AvFLAGS(av) = AVf_REIFY;
2186 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2189 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2192 av = (AV*)PL_curpad[0];
2194 av = GvAV(PL_defgv);
2196 items = AvFILLp(av) + 1;
2198 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2199 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2200 PL_stack_sp += items;
2202 if (CxTYPE(cx) == CXt_SUB &&
2203 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2204 SvREFCNT_dec(cx->blk_sub.cv);
2205 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2206 LEAVE_SCOPE(oldsave);
2208 /* Now do some callish stuff. */
2211 #ifdef PERL_XSUB_OLDSTYLE
2212 if (CvOLDSTYLE(cv)) {
2213 I32 (*fp3)(int,int,int);
2218 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2219 items = (*fp3)(CvXSUBANY(cv).any_i32,
2220 mark - PL_stack_base + 1,
2222 SP = PL_stack_base + items;
2225 #endif /* PERL_XSUB_OLDSTYLE */
2230 PL_stack_sp--; /* There is no cv arg. */
2231 /* Push a mark for the start of arglist */
2233 (void)(*CvXSUB(cv))(aTHXo_ cv);
2234 /* Pop the current context like a decent sub should */
2235 POPBLOCK(cx, PL_curpm);
2236 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2239 return pop_return();
2242 AV* padlist = CvPADLIST(cv);
2243 SV** svp = AvARRAY(padlist);
2244 if (CxTYPE(cx) == CXt_EVAL) {
2245 PL_in_eval = cx->blk_eval.old_in_eval;
2246 PL_eval_root = cx->blk_eval.old_eval_root;
2247 cx->cx_type = CXt_SUB;
2248 cx->blk_sub.hasargs = 0;
2250 cx->blk_sub.cv = cv;
2251 cx->blk_sub.olddepth = CvDEPTH(cv);
2253 if (CvDEPTH(cv) < 2)
2254 (void)SvREFCNT_inc(cv);
2255 else { /* save temporaries on recursion? */
2256 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2257 sub_crush_depth(cv);
2258 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2259 AV *newpad = newAV();
2260 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2261 I32 ix = AvFILLp((AV*)svp[1]);
2262 I32 names_fill = AvFILLp((AV*)svp[0]);
2263 svp = AvARRAY(svp[0]);
2264 for ( ;ix > 0; ix--) {
2265 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2266 char *name = SvPVX(svp[ix]);
2267 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2270 /* outer lexical or anon code */
2271 av_store(newpad, ix,
2272 SvREFCNT_inc(oldpad[ix]) );
2274 else { /* our own lexical */
2276 av_store(newpad, ix, sv = (SV*)newAV());
2277 else if (*name == '%')
2278 av_store(newpad, ix, sv = (SV*)newHV());
2280 av_store(newpad, ix, sv = NEWSV(0,0));
2284 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2285 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2288 av_store(newpad, ix, sv = NEWSV(0,0));
2292 if (cx->blk_sub.hasargs) {
2295 av_store(newpad, 0, (SV*)av);
2296 AvFLAGS(av) = AVf_REIFY;
2298 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2299 AvFILLp(padlist) = CvDEPTH(cv);
2300 svp = AvARRAY(padlist);
2304 if (!cx->blk_sub.hasargs) {
2305 AV* av = (AV*)PL_curpad[0];
2307 items = AvFILLp(av) + 1;
2309 /* Mark is at the end of the stack. */
2311 Copy(AvARRAY(av), SP + 1, items, SV*);
2316 #endif /* USE_THREADS */
2317 SAVEVPTR(PL_curpad);
2318 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2320 if (cx->blk_sub.hasargs)
2321 #endif /* USE_THREADS */
2323 AV* av = (AV*)PL_curpad[0];
2327 cx->blk_sub.savearray = GvAV(PL_defgv);
2328 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2329 #endif /* USE_THREADS */
2330 cx->blk_sub.oldcurpad = PL_curpad;
2331 cx->blk_sub.argarray = av;
2334 if (items >= AvMAX(av) + 1) {
2336 if (AvARRAY(av) != ary) {
2337 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2338 SvPVX(av) = (char*)ary;
2340 if (items >= AvMAX(av) + 1) {
2341 AvMAX(av) = items - 1;
2342 Renew(ary,items+1,SV*);
2344 SvPVX(av) = (char*)ary;
2347 Copy(mark,AvARRAY(av),items,SV*);
2348 AvFILLp(av) = items - 1;
2349 assert(!AvREAL(av));
2356 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2358 * We do not care about using sv to call CV;
2359 * it's for informational purposes only.
2361 SV *sv = GvSV(PL_DBsub);
2364 if (PERLDB_SUB_NN) {
2365 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2368 gv_efullname3(sv, CvGV(cv), Nullch);
2371 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2372 PUSHMARK( PL_stack_sp );
2373 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2377 RETURNOP(CvSTART(cv));
2381 label = SvPV(sv,n_a);
2382 if (!(do_dump || *label))
2383 DIE(aTHX_ must_have_label);
2386 else if (PL_op->op_flags & OPf_SPECIAL) {
2388 DIE(aTHX_ must_have_label);
2391 label = cPVOP->op_pv;
2393 if (label && *label) {
2398 PL_lastgotoprobe = 0;
2400 for (ix = cxstack_ix; ix >= 0; ix--) {
2402 switch (CxTYPE(cx)) {
2404 gotoprobe = PL_eval_root; /* XXX not good for nested eval */
2407 gotoprobe = cx->blk_oldcop->op_sibling;
2413 gotoprobe = cx->blk_oldcop->op_sibling;
2415 gotoprobe = PL_main_root;
2418 if (CvDEPTH(cx->blk_sub.cv)) {
2419 gotoprobe = CvROOT(cx->blk_sub.cv);
2425 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2428 DIE(aTHX_ "panic: goto");
2429 gotoprobe = PL_main_root;
2433 retop = dofindlabel(gotoprobe, label,
2434 enterops, enterops + GOTO_DEPTH);
2438 PL_lastgotoprobe = gotoprobe;
2441 DIE(aTHX_ "Can't find label %s", label);
2443 /* pop unwanted frames */
2445 if (ix < cxstack_ix) {
2452 oldsave = PL_scopestack[PL_scopestack_ix];
2453 LEAVE_SCOPE(oldsave);
2456 /* push wanted frames */
2458 if (*enterops && enterops[1]) {
2460 for (ix = 1; enterops[ix]; ix++) {
2461 PL_op = enterops[ix];
2462 /* Eventually we may want to stack the needed arguments
2463 * for each op. For now, we punt on the hard ones. */
2464 if (PL_op->op_type == OP_ENTERITER)
2465 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2466 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2474 if (!retop) retop = PL_main_start;
2476 PL_restartop = retop;
2477 PL_do_undump = TRUE;
2481 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2482 PL_do_undump = FALSE;
2498 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2502 PL_exit_flags |= PERL_EXIT_EXPECTED;
2504 PUSHs(&PL_sv_undef);
2512 NV value = SvNVx(GvSV(cCOP->cop_gv));
2513 register I32 match = I_32(value);
2516 if (((NV)match) > value)
2517 --match; /* was fractional--truncate other way */
2519 match -= cCOP->uop.scop.scop_offset;
2522 else if (match > cCOP->uop.scop.scop_max)
2523 match = cCOP->uop.scop.scop_max;
2524 PL_op = cCOP->uop.scop.scop_next[match];
2534 PL_op = PL_op->op_next; /* can't assume anything */
2537 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2538 match -= cCOP->uop.scop.scop_offset;
2541 else if (match > cCOP->uop.scop.scop_max)
2542 match = cCOP->uop.scop.scop_max;
2543 PL_op = cCOP->uop.scop.scop_next[match];
2552 S_save_lines(pTHX_ AV *array, SV *sv)
2554 register char *s = SvPVX(sv);
2555 register char *send = SvPVX(sv) + SvCUR(sv);
2557 register I32 line = 1;
2559 while (s && s < send) {
2560 SV *tmpstr = NEWSV(85,0);
2562 sv_upgrade(tmpstr, SVt_PVMG);
2563 t = strchr(s, '\n');
2569 sv_setpvn(tmpstr, s, t - s);
2570 av_store(array, line++, tmpstr);
2575 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2577 S_docatch_body(pTHX_ va_list args)
2579 return docatch_body();
2584 S_docatch_body(pTHX)
2591 S_docatch(pTHX_ OP *o)
2596 volatile PERL_SI *cursi = PL_curstackinfo;
2600 assert(CATCH_GET == TRUE);
2603 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2605 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2611 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2617 if (PL_restartop && cursi == PL_curstackinfo) {
2618 PL_op = PL_restartop;
2635 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2636 /* sv Text to convert to OP tree. */
2637 /* startop op_free() this to undo. */
2638 /* code Short string id of the caller. */
2640 dSP; /* Make POPBLOCK work. */
2643 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2647 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2648 char *tmpbuf = tbuf;
2654 /* switch to eval mode */
2656 if (PL_curcop == &PL_compiling) {
2657 SAVECOPSTASH_FREE(&PL_compiling);
2658 CopSTASH_set(&PL_compiling, PL_curstash);
2660 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2661 SV *sv = sv_newmortal();
2662 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2663 code, (unsigned long)++PL_evalseq,
2664 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2668 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2669 SAVECOPFILE_FREE(&PL_compiling);
2670 CopFILE_set(&PL_compiling, tmpbuf+2);
2671 SAVECOPLINE(&PL_compiling);
2672 CopLINE_set(&PL_compiling, 1);
2673 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2674 deleting the eval's FILEGV from the stash before gv_check() runs
2675 (i.e. before run-time proper). To work around the coredump that
2676 ensues, we always turn GvMULTI_on for any globals that were
2677 introduced within evals. See force_ident(). GSAR 96-10-12 */
2678 safestr = savepv(tmpbuf);
2679 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2681 #ifdef OP_IN_REGISTER
2689 PL_op->op_type = OP_ENTEREVAL;
2690 PL_op->op_flags = 0; /* Avoid uninit warning. */
2691 PUSHBLOCK(cx, CXt_EVAL, SP);
2692 PUSHEVAL(cx, 0, Nullgv);
2693 rop = doeval(G_SCALAR, startop);
2694 POPBLOCK(cx,PL_curpm);
2697 (*startop)->op_type = OP_NULL;
2698 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2700 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2702 if (PL_curcop == &PL_compiling)
2703 PL_compiling.op_private = PL_hints;
2704 #ifdef OP_IN_REGISTER
2710 /* With USE_THREADS, eval_owner must be held on entry to doeval */
2712 S_doeval(pTHX_ int gimme, OP** startop)
2720 PL_in_eval = EVAL_INEVAL;
2724 /* set up a scratch pad */
2727 SAVEVPTR(PL_curpad);
2728 SAVESPTR(PL_comppad);
2729 SAVESPTR(PL_comppad_name);
2730 SAVEI32(PL_comppad_name_fill);
2731 SAVEI32(PL_min_intro_pending);
2732 SAVEI32(PL_max_intro_pending);
2735 for (i = cxstack_ix - 1; i >= 0; i--) {
2736 PERL_CONTEXT *cx = &cxstack[i];
2737 if (CxTYPE(cx) == CXt_EVAL)
2739 else if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2740 caller = cx->blk_sub.cv;
2745 SAVESPTR(PL_compcv);
2746 PL_compcv = (CV*)NEWSV(1104,0);
2747 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2748 CvEVAL_on(PL_compcv);
2750 CvOWNER(PL_compcv) = 0;
2751 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2752 MUTEX_INIT(CvMUTEXP(PL_compcv));
2753 #endif /* USE_THREADS */
2755 PL_comppad = newAV();
2756 av_push(PL_comppad, Nullsv);
2757 PL_curpad = AvARRAY(PL_comppad);
2758 PL_comppad_name = newAV();
2759 PL_comppad_name_fill = 0;
2760 PL_min_intro_pending = 0;
2763 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2764 PL_curpad[0] = (SV*)newAV();
2765 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2766 #endif /* USE_THREADS */
2768 comppadlist = newAV();
2769 AvREAL_off(comppadlist);
2770 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2771 av_store(comppadlist, 1, (SV*)PL_comppad);
2772 CvPADLIST(PL_compcv) = comppadlist;
2775 (saveop->op_type != OP_REQUIRE && saveop->op_type != OP_DOFILE))
2777 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2780 SAVEFREESV(PL_compcv);
2782 /* make sure we compile in the right package */
2784 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2785 SAVESPTR(PL_curstash);
2786 PL_curstash = CopSTASH(PL_curcop);
2788 SAVESPTR(PL_beginav);
2789 PL_beginav = newAV();
2790 SAVEFREESV(PL_beginav);
2791 SAVEI32(PL_error_count);
2793 /* try to compile it */
2795 PL_eval_root = Nullop;
2797 PL_curcop = &PL_compiling;
2798 PL_curcop->cop_arybase = 0;
2799 SvREFCNT_dec(PL_rs);
2800 PL_rs = newSVpvn("\n", 1);
2801 if (saveop && saveop->op_flags & OPf_SPECIAL)
2802 PL_in_eval |= EVAL_KEEPERR;
2805 if (yyparse() || PL_error_count || !PL_eval_root) {
2809 I32 optype = 0; /* Might be reset by POPEVAL. */
2814 op_free(PL_eval_root);
2815 PL_eval_root = Nullop;
2817 SP = PL_stack_base + POPMARK; /* pop original mark */
2819 POPBLOCK(cx,PL_curpm);
2825 if (optype == OP_REQUIRE) {
2826 char* msg = SvPVx(ERRSV, n_a);
2827 DIE(aTHX_ "%sCompilation failed in require",
2828 *msg ? msg : "Unknown error\n");
2831 char* msg = SvPVx(ERRSV, n_a);
2833 POPBLOCK(cx,PL_curpm);
2835 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2836 (*msg ? msg : "Unknown error\n"));
2838 SvREFCNT_dec(PL_rs);
2839 PL_rs = SvREFCNT_inc(PL_nrs);
2841 MUTEX_LOCK(&PL_eval_mutex);
2843 COND_SIGNAL(&PL_eval_cond);
2844 MUTEX_UNLOCK(&PL_eval_mutex);
2845 #endif /* USE_THREADS */
2848 SvREFCNT_dec(PL_rs);
2849 PL_rs = SvREFCNT_inc(PL_nrs);
2850 CopLINE_set(&PL_compiling, 0);
2852 *startop = PL_eval_root;
2853 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2854 CvOUTSIDE(PL_compcv) = Nullcv;
2856 SAVEFREEOP(PL_eval_root);
2858 scalarvoid(PL_eval_root);
2859 else if (gimme & G_ARRAY)
2862 scalar(PL_eval_root);
2864 DEBUG_x(dump_eval());
2866 /* Register with debugger: */
2867 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2868 CV *cv = get_cv("DB::postponed", FALSE);
2872 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2874 call_sv((SV*)cv, G_DISCARD);
2878 /* compiled okay, so do it */
2880 CvDEPTH(PL_compcv) = 1;
2881 SP = PL_stack_base + POPMARK; /* pop original mark */
2882 PL_op = saveop; /* The caller may need it. */
2884 MUTEX_LOCK(&PL_eval_mutex);
2886 COND_SIGNAL(&PL_eval_cond);
2887 MUTEX_UNLOCK(&PL_eval_mutex);
2888 #endif /* USE_THREADS */
2890 RETURNOP(PL_eval_start);
2894 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2896 STRLEN namelen = strlen(name);
2899 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2900 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2901 char *pmc = SvPV_nolen(pmcsv);
2904 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2905 fp = PerlIO_open(name, mode);
2908 if (PerlLIO_stat(name, &pmstat) < 0 ||
2909 pmstat.st_mtime < pmcstat.st_mtime)
2911 fp = PerlIO_open(pmc, mode);
2914 fp = PerlIO_open(name, mode);
2917 SvREFCNT_dec(pmcsv);
2920 fp = PerlIO_open(name, mode);
2928 register PERL_CONTEXT *cx;
2933 SV *namesv = Nullsv;
2935 I32 gimme = G_SCALAR;
2936 PerlIO *tryrsfp = 0;
2938 int filter_has_file = 0;
2939 GV *filter_child_proc = 0;
2940 SV *filter_state = 0;
2945 if (SvPOK(sv) && SvNOK(sv)) { /* require v5.6.1 */
2946 UV rev = 0, ver = 0, sver = 0;
2948 U8 *s = (U8*)SvPVX(sv);
2949 U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
2951 rev = utf8_to_uv(s, &len);
2954 ver = utf8_to_uv(s, &len);
2957 sver = utf8_to_uv(s, &len);
2960 if (PERL_REVISION < rev
2961 || (PERL_REVISION == rev
2962 && (PERL_VERSION < ver
2963 || (PERL_VERSION == ver
2964 && PERL_SUBVERSION < sver))))
2966 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only "
2967 "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
2968 PERL_VERSION, PERL_SUBVERSION);
2972 else if (!SvPOKp(sv)) { /* require 5.005_03 */
2973 if ((NV)PERL_REVISION + ((NV)PERL_VERSION/(NV)1000)
2974 + ((NV)PERL_SUBVERSION/(NV)1000000)
2975 + 0.00000099 < SvNV(sv))
2979 NV nver = (nrev - rev) * 1000;
2980 UV ver = (UV)(nver + 0.0009);
2981 NV nsver = (nver - ver) * 1000;
2982 UV sver = (UV)(nsver + 0.0009);
2984 /* help out with the "use 5.6" confusion */
2985 if (sver == 0 && (rev > 5 || (rev == 5 && ver >= 100))) {
2986 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
2987 "this is only v%d.%d.%d, stopped"
2988 " (did you mean v%"UVuf".%"UVuf".0?)",
2989 rev, ver, sver, PERL_REVISION, PERL_VERSION,
2990 PERL_SUBVERSION, rev, ver/100);
2993 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
2994 "this is only v%d.%d.%d, stopped",
2995 rev, ver, sver, PERL_REVISION, PERL_VERSION,
3002 name = SvPV(sv, len);
3003 if (!(name && len > 0 && *name))
3004 DIE(aTHX_ "Null filename used");
3005 TAINT_PROPER("require");
3006 if (PL_op->op_type == OP_REQUIRE &&
3007 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
3008 *svp != &PL_sv_undef)
3011 /* prepare to compile file */
3013 if (PERL_FILE_IS_ABSOLUTE(name)
3014 || (*name == '.' && (name[1] == '/' ||
3015 (name[1] == '.' && name[2] == '/'))))
3018 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
3019 #ifdef MACOS_TRADITIONAL
3020 /* We consider paths of the form :a:b ambiguous and interpret them first
3021 as global then as local
3023 if (!tryrsfp && name[0] == ':' && name[1] != ':' && strchr(name+2, ':'))
3032 AV *ar = GvAVn(PL_incgv);
3036 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3039 namesv = NEWSV(806, 0);
3040 for (i = 0; i <= AvFILL(ar); i++) {
3041 SV *dirsv = *av_fetch(ar, i, TRUE);
3047 if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
3048 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3051 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3052 PTR2UV(SvANY(loader)), name);
3053 tryname = SvPVX(namesv);
3064 count = call_sv(loader, G_ARRAY);
3074 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3078 if (SvTYPE(arg) == SVt_PVGV) {
3079 IO *io = GvIO((GV *)arg);
3084 tryrsfp = IoIFP(io);
3085 if (IoTYPE(io) == '|') {
3086 /* reading from a child process doesn't
3087 nest -- when returning from reading
3088 the inner module, the outer one is
3089 unreadable (closed?) I've tried to
3090 save the gv to manage the lifespan of
3091 the pipe, but this didn't help. XXX */
3092 filter_child_proc = (GV *)arg;
3093 (void)SvREFCNT_inc(filter_child_proc);
3096 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3097 PerlIO_close(IoOFP(io));
3109 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3111 (void)SvREFCNT_inc(filter_sub);
3114 filter_state = SP[i];
3115 (void)SvREFCNT_inc(filter_state);
3119 tryrsfp = PerlIO_open("/dev/null",
3133 filter_has_file = 0;
3134 if (filter_child_proc) {
3135 SvREFCNT_dec(filter_child_proc);
3136 filter_child_proc = 0;
3139 SvREFCNT_dec(filter_state);
3143 SvREFCNT_dec(filter_sub);
3148 char *dir = SvPVx(dirsv, n_a);
3149 #ifdef MACOS_TRADITIONAL
3150 /* We have ensured in incpush that library ends with ':' */
3151 Perl_sv_setpvf(aTHX_ namesv, "%s%s", dir, name+(name[0] == ':'));
3155 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3157 sv_setpv(namesv, unixdir);
3158 sv_catpv(namesv, unixname);
3160 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3163 TAINT_PROPER("require");
3164 tryname = SvPVX(namesv);
3165 #ifdef MACOS_TRADITIONAL
3167 /* Convert slashes in the name part, but not the directory part, to colons */
3169 for (colon = tryname+strlen(dir); colon = strchr(colon, '/'); )
3173 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
3175 if (tryname[0] == '.' && tryname[1] == '/')
3183 SAVECOPFILE_FREE(&PL_compiling);
3184 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3185 SvREFCNT_dec(namesv);
3187 if (PL_op->op_type == OP_REQUIRE) {
3188 char *msgstr = name;
3189 if (namesv) { /* did we lookup @INC? */
3190 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3191 SV *dirmsgsv = NEWSV(0, 0);
3192 AV *ar = GvAVn(PL_incgv);
3194 sv_catpvn(msg, " in @INC", 8);
3195 if (instr(SvPVX(msg), ".h "))
3196 sv_catpv(msg, " (change .h to .ph maybe?)");
3197 if (instr(SvPVX(msg), ".ph "))
3198 sv_catpv(msg, " (did you run h2ph?)");
3199 sv_catpv(msg, " (@INC contains:");
3200 for (i = 0; i <= AvFILL(ar); i++) {
3201 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3202 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3203 sv_catsv(msg, dirmsgsv);
3205 sv_catpvn(msg, ")", 1);
3206 SvREFCNT_dec(dirmsgsv);
3207 msgstr = SvPV_nolen(msg);
3209 DIE(aTHX_ "Can't locate %s", msgstr);
3215 SETERRNO(0, SS$_NORMAL);
3217 /* Assume success here to prevent recursive requirement. */
3218 (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
3219 newSVpv(CopFILE(&PL_compiling), 0), 0 );
3223 lex_start(sv_2mortal(newSVpvn("",0)));
3224 SAVEGENERICSV(PL_rsfp_filters);
3225 PL_rsfp_filters = Nullav;
3230 SAVESPTR(PL_compiling.cop_warnings);
3231 if (PL_dowarn & G_WARN_ALL_ON)
3232 PL_compiling.cop_warnings = pWARN_ALL ;
3233 else if (PL_dowarn & G_WARN_ALL_OFF)
3234 PL_compiling.cop_warnings = pWARN_NONE ;
3236 PL_compiling.cop_warnings = pWARN_STD ;
3238 if (filter_sub || filter_child_proc) {
3239 SV *datasv = filter_add(run_user_filter, Nullsv);
3240 IoLINES(datasv) = filter_has_file;
3241 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3242 IoTOP_GV(datasv) = (GV *)filter_state;
3243 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3246 /* switch to eval mode */
3247 push_return(PL_op->op_next);
3248 PUSHBLOCK(cx, CXt_EVAL, SP);
3249 PUSHEVAL(cx, name, Nullgv);
3251 SAVECOPLINE(&PL_compiling);
3252 CopLINE_set(&PL_compiling, 0);
3256 MUTEX_LOCK(&PL_eval_mutex);
3257 if (PL_eval_owner && PL_eval_owner != thr)
3258 while (PL_eval_owner)
3259 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3260 PL_eval_owner = thr;
3261 MUTEX_UNLOCK(&PL_eval_mutex);
3262 #endif /* USE_THREADS */
3263 return DOCATCH(doeval(G_SCALAR, NULL));
3268 return pp_require();
3274 register PERL_CONTEXT *cx;
3276 I32 gimme = GIMME_V, was = PL_sub_generation;
3277 char tbuf[TYPE_DIGITS(long) + 12];
3278 char *tmpbuf = tbuf;
3283 if (!SvPV(sv,len) || !len)
3285 TAINT_PROPER("eval");
3291 /* switch to eval mode */
3293 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3294 SV *sv = sv_newmortal();
3295 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3296 (unsigned long)++PL_evalseq,
3297 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3301 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3302 SAVECOPFILE_FREE(&PL_compiling);
3303 CopFILE_set(&PL_compiling, tmpbuf+2);
3304 SAVECOPLINE(&PL_compiling);
3305 CopLINE_set(&PL_compiling, 1);
3306 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3307 deleting the eval's FILEGV from the stash before gv_check() runs
3308 (i.e. before run-time proper). To work around the coredump that
3309 ensues, we always turn GvMULTI_on for any globals that were
3310 introduced within evals. See force_ident(). GSAR 96-10-12 */
3311 safestr = savepv(tmpbuf);
3312 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3314 PL_hints = PL_op->op_targ;
3315 SAVESPTR(PL_compiling.cop_warnings);
3316 if (specialWARN(PL_curcop->cop_warnings))
3317 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3319 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3320 SAVEFREESV(PL_compiling.cop_warnings);
3323 push_return(PL_op->op_next);
3324 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3325 PUSHEVAL(cx, 0, Nullgv);
3327 /* prepare to compile string */
3329 if (PERLDB_LINE && PL_curstash != PL_debstash)
3330 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3333 MUTEX_LOCK(&PL_eval_mutex);
3334 if (PL_eval_owner && PL_eval_owner != thr)
3335 while (PL_eval_owner)
3336 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3337 PL_eval_owner = thr;
3338 MUTEX_UNLOCK(&PL_eval_mutex);
3339 #endif /* USE_THREADS */
3340 ret = doeval(gimme, NULL);
3341 if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
3342 && ret != PL_op->op_next) { /* Successive compilation. */
3343 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3345 return DOCATCH(ret);
3355 register PERL_CONTEXT *cx;
3357 U8 save_flags = PL_op -> op_flags;
3362 retop = pop_return();
3365 if (gimme == G_VOID)
3367 else if (gimme == G_SCALAR) {
3370 if (SvFLAGS(TOPs) & SVs_TEMP)
3373 *MARK = sv_mortalcopy(TOPs);
3377 *MARK = &PL_sv_undef;
3382 /* in case LEAVE wipes old return values */
3383 for (mark = newsp + 1; mark <= SP; mark++) {
3384 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3385 *mark = sv_mortalcopy(*mark);
3386 TAINT_NOT; /* Each item is independent */
3390 PL_curpm = newpm; /* Don't pop $1 et al till now */
3392 if (AvFILLp(PL_comppad_name) >= 0)
3396 assert(CvDEPTH(PL_compcv) == 1);
3398 CvDEPTH(PL_compcv) = 0;
3401 if (optype == OP_REQUIRE &&
3402 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3404 /* Unassume the success we assumed earlier. */
3405 SV *nsv = cx->blk_eval.old_namesv;
3406 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
3407 retop = Perl_die(aTHX_ "%s did not return a true value", SvPVX(nsv));
3408 /* die_where() did LEAVE, or we won't be here */
3412 if (!(save_flags & OPf_SPECIAL))
3422 register PERL_CONTEXT *cx;
3423 I32 gimme = GIMME_V;
3428 push_return(cLOGOP->op_other->op_next);
3429 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3431 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3433 PL_in_eval = EVAL_INEVAL;
3436 return DOCATCH(PL_op->op_next);
3446 register PERL_CONTEXT *cx;
3454 if (gimme == G_VOID)
3456 else if (gimme == G_SCALAR) {
3459 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3462 *MARK = sv_mortalcopy(TOPs);
3466 *MARK = &PL_sv_undef;
3471 /* in case LEAVE wipes old return values */
3472 for (mark = newsp + 1; mark <= SP; mark++) {
3473 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3474 *mark = sv_mortalcopy(*mark);
3475 TAINT_NOT; /* Each item is independent */
3479 PL_curpm = newpm; /* Don't pop $1 et al till now */
3487 S_doparseform(pTHX_ SV *sv)
3490 register char *s = SvPV_force(sv, len);
3491 register char *send = s + len;
3492 register char *base;
3493 register I32 skipspaces = 0;
3496 bool postspace = FALSE;
3504 Perl_croak(aTHX_ "Null picture in formline");
3506 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3511 *fpc++ = FF_LINEMARK;
3512 noblank = repeat = FALSE;
3530 case ' ': case '\t':
3541 *fpc++ = FF_LITERAL;
3549 *fpc++ = skipspaces;
3553 *fpc++ = FF_NEWLINE;
3557 arg = fpc - linepc + 1;
3564 *fpc++ = FF_LINEMARK;
3565 noblank = repeat = FALSE;
3574 ischop = s[-1] == '^';
3580 arg = (s - base) - 1;
3582 *fpc++ = FF_LITERAL;
3591 *fpc++ = FF_LINEGLOB;
3593 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3594 arg = ischop ? 512 : 0;
3604 arg |= 256 + (s - f);
3606 *fpc++ = s - base; /* fieldsize for FETCH */
3607 *fpc++ = FF_DECIMAL;
3612 bool ismore = FALSE;
3615 while (*++s == '>') ;
3616 prespace = FF_SPACE;
3618 else if (*s == '|') {
3619 while (*++s == '|') ;
3620 prespace = FF_HALFSPACE;
3625 while (*++s == '<') ;
3628 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3632 *fpc++ = s - base; /* fieldsize for FETCH */
3634 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3652 { /* need to jump to the next word */
3654 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3655 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3656 s = SvPVX(sv) + SvCUR(sv) + z;
3658 Copy(fops, s, arg, U16);
3660 sv_magic(sv, Nullsv, 'f', Nullch, 0);
3665 * The rest of this file was derived from source code contributed
3668 * NOTE: this code was derived from Tom Horsley's qsort replacement
3669 * and should not be confused with the original code.
3672 /* Copyright (C) Tom Horsley, 1997. All rights reserved.
3674 Permission granted to distribute under the same terms as perl which are
3677 This program is free software; you can redistribute it and/or modify
3678 it under the terms of either:
3680 a) the GNU General Public License as published by the Free
3681 Software Foundation; either version 1, or (at your option) any
3684 b) the "Artistic License" which comes with this Kit.
3686 Details on the perl license can be found in the perl source code which
3687 may be located via the www.perl.com web page.
3689 This is the most wonderfulest possible qsort I can come up with (and
3690 still be mostly portable) My (limited) tests indicate it consistently
3691 does about 20% fewer calls to compare than does the qsort in the Visual
3692 C++ library, other vendors may vary.
3694 Some of the ideas in here can be found in "Algorithms" by Sedgewick,
3695 others I invented myself (or more likely re-invented since they seemed
3696 pretty obvious once I watched the algorithm operate for a while).
3698 Most of this code was written while watching the Marlins sweep the Giants
3699 in the 1997 National League Playoffs - no Braves fans allowed to use this
3700 code (just kidding :-).
3702 I realize that if I wanted to be true to the perl tradition, the only
3703 comment in this file would be something like:
3705 ...they shuffled back towards the rear of the line. 'No, not at the
3706 rear!' the slave-driver shouted. 'Three files up. And stay there...
3708 However, I really needed to violate that tradition just so I could keep
3709 track of what happens myself, not to mention some poor fool trying to
3710 understand this years from now :-).
3713 /* ********************************************************** Configuration */
3715 #ifndef QSORT_ORDER_GUESS
3716 #define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
3719 /* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
3720 future processing - a good max upper bound is log base 2 of memory size
3721 (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
3722 safely be smaller than that since the program is taking up some space and
3723 most operating systems only let you grab some subset of contiguous
3724 memory (not to mention that you are normally sorting data larger than
3725 1 byte element size :-).
3727 #ifndef QSORT_MAX_STACK
3728 #define QSORT_MAX_STACK 32
3731 /* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
3732 Anything bigger and we use qsort. If you make this too small, the qsort
3733 will probably break (or become less efficient), because it doesn't expect
3734 the middle element of a partition to be the same as the right or left -
3735 you have been warned).
3737 #ifndef QSORT_BREAK_EVEN
3738 #define QSORT_BREAK_EVEN 6
3741 /* ************************************************************* Data Types */
3743 /* hold left and right index values of a partition waiting to be sorted (the
3744 partition includes both left and right - right is NOT one past the end or
3745 anything like that).
3747 struct partition_stack_entry {
3750 #ifdef QSORT_ORDER_GUESS
3751 int qsort_break_even;
3755 /* ******************************************************* Shorthand Macros */
3757 /* Note that these macros will be used from inside the qsort function where
3758 we happen to know that the variable 'elt_size' contains the size of an
3759 array element and the variable 'temp' points to enough space to hold a
3760 temp element and the variable 'array' points to the array being sorted
3761 and 'compare' is the pointer to the compare routine.
3763 Also note that there are very many highly architecture specific ways
3764 these might be sped up, but this is simply the most generally portable
3765 code I could think of.
3768 /* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
3770 #define qsort_cmp(elt1, elt2) \
3771 ((*compare)(aTHXo_ array[elt1], array[elt2]))
3773 #ifdef QSORT_ORDER_GUESS
3774 #define QSORT_NOTICE_SWAP swapped++;
3776 #define QSORT_NOTICE_SWAP
3779 /* swaps contents of array elements elt1, elt2.
3781 #define qsort_swap(elt1, elt2) \
3784 temp = array[elt1]; \
3785 array[elt1] = array[elt2]; \
3786 array[elt2] = temp; \
3789 /* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
3790 elt3 and elt3 gets elt1.
3792 #define qsort_rotate(elt1, elt2, elt3) \
3795 temp = array[elt1]; \
3796 array[elt1] = array[elt2]; \
3797 array[elt2] = array[elt3]; \
3798 array[elt3] = temp; \
3801 /* ************************************************************ Debug stuff */
3808 return; /* good place to set a breakpoint */
3811 #define qsort_assert(t) (void)( (t) || (break_here(), 0) )
3814 doqsort_all_asserts(
3818 int (*compare)(const void * elt1, const void * elt2),
3819 int pc_left, int pc_right, int u_left, int u_right)
3823 qsort_assert(pc_left <= pc_right);
3824 qsort_assert(u_right < pc_left);
3825 qsort_assert(pc_right < u_left);
3826 for (i = u_right + 1; i < pc_left; ++i) {
3827 qsort_assert(qsort_cmp(i, pc_left) < 0);
3829 for (i = pc_left; i < pc_right; ++i) {
3830 qsort_assert(qsort_cmp(i, pc_right) == 0);
3832 for (i = pc_right + 1; i < u_left; ++i) {
3833 qsort_assert(qsort_cmp(pc_right, i) < 0);
3837 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
3838 doqsort_all_asserts(array, num_elts, elt_size, compare, \
3839 PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
3843 #define qsort_assert(t) ((void)0)
3845 #define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
3849 /* ****************************************************************** qsort */
3852 S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
3856 struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
3857 int next_stack_entry = 0;
3861 #ifdef QSORT_ORDER_GUESS
3862 int qsort_break_even;
3866 /* Make sure we actually have work to do.
3868 if (num_elts <= 1) {
3872 /* Setup the initial partition definition and fall into the sorting loop
3875 part_right = (int)(num_elts - 1);
3876 #ifdef QSORT_ORDER_GUESS
3877 qsort_break_even = QSORT_BREAK_EVEN;
3879 #define qsort_break_even QSORT_BREAK_EVEN
3882 if ((part_right - part_left) >= qsort_break_even) {
3883 /* OK, this is gonna get hairy, so lets try to document all the
3884 concepts and abbreviations and variables and what they keep
3887 pc: pivot chunk - the set of array elements we accumulate in the
3888 middle of the partition, all equal in value to the original
3889 pivot element selected. The pc is defined by:
3891 pc_left - the leftmost array index of the pc
3892 pc_right - the rightmost array index of the pc
3894 we start with pc_left == pc_right and only one element
3895 in the pivot chunk (but it can grow during the scan).
3897 u: uncompared elements - the set of elements in the partition
3898 we have not yet compared to the pivot value. There are two
3899 uncompared sets during the scan - one to the left of the pc
3900 and one to the right.
3902 u_right - the rightmost index of the left side's uncompared set
3903 u_left - the leftmost index of the right side's uncompared set
3905 The leftmost index of the left sides's uncompared set
3906 doesn't need its own variable because it is always defined
3907 by the leftmost edge of the whole partition (part_left). The
3908 same goes for the rightmost edge of the right partition
3911 We know there are no uncompared elements on the left once we
3912 get u_right < part_left and no uncompared elements on the
3913 right once u_left > part_right. When both these conditions
3914 are met, we have completed the scan of the partition.
3916 Any elements which are between the pivot chunk and the
3917 uncompared elements should be less than the pivot value on
3918 the left side and greater than the pivot value on the right
3919 side (in fact, the goal of the whole algorithm is to arrange
3920 for that to be true and make the groups of less-than and
3921 greater-then elements into new partitions to sort again).
3923 As you marvel at the complexity of the code and wonder why it
3924 has to be so confusing. Consider some of the things this level
3925 of confusion brings:
3927 Once I do a compare, I squeeze every ounce of juice out of it. I
3928 never do compare calls I don't have to do, and I certainly never
3931 I also never swap any elements unless I can prove there is a
3932 good reason. Many sort algorithms will swap a known value with
3933 an uncompared value just to get things in the right place (or
3934 avoid complexity :-), but that uncompared value, once it gets
3935 compared, may then have to be swapped again. A lot of the
3936 complexity of this code is due to the fact that it never swaps
3937 anything except compared values, and it only swaps them when the
3938 compare shows they are out of position.
3940 int pc_left, pc_right;
3941 int u_right, u_left;
3945 pc_left = ((part_left + part_right) / 2);
3947 u_right = pc_left - 1;
3948 u_left = pc_right + 1;
3950 /* Qsort works best when the pivot value is also the median value
3951 in the partition (unfortunately you can't find the median value
3952 without first sorting :-), so to give the algorithm a helping
3953 hand, we pick 3 elements and sort them and use the median value
3954 of that tiny set as the pivot value.
3956 Some versions of qsort like to use the left middle and right as
3957 the 3 elements to sort so they can insure the ends of the
3958 partition will contain values which will stop the scan in the
3959 compare loop, but when you have to call an arbitrarily complex
3960 routine to do a compare, its really better to just keep track of
3961 array index values to know when you hit the edge of the
3962 partition and avoid the extra compare. An even better reason to
3963 avoid using a compare call is the fact that you can drop off the
3964 edge of the array if someone foolishly provides you with an
3965 unstable compare function that doesn't always provide consistent
3968 So, since it is simpler for us to compare the three adjacent
3969 elements in the middle of the partition, those are the ones we
3970 pick here (conveniently pointed at by u_right, pc_left, and
3971 u_left). The values of the left, center, and right elements
3972 are refered to as l c and r in the following comments.
3975 #ifdef QSORT_ORDER_GUESS
3978 s = qsort_cmp(u_right, pc_left);
3981 s = qsort_cmp(pc_left, u_left);
3982 /* if l < c, c < r - already in order - nothing to do */
3984 /* l < c, c == r - already in order, pc grows */
3986 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3988 /* l < c, c > r - need to know more */
3989 s = qsort_cmp(u_right, u_left);
3991 /* l < c, c > r, l < r - swap c & r to get ordered */
3992 qsort_swap(pc_left, u_left);
3993 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
3994 } else if (s == 0) {
3995 /* l < c, c > r, l == r - swap c&r, grow pc */
3996 qsort_swap(pc_left, u_left);
3998 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4000 /* l < c, c > r, l > r - make lcr into rlc to get ordered */
4001 qsort_rotate(pc_left, u_right, u_left);
4002 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4005 } else if (s == 0) {
4007 s = qsort_cmp(pc_left, u_left);
4009 /* l == c, c < r - already in order, grow pc */
4011 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4012 } else if (s == 0) {
4013 /* l == c, c == r - already in order, grow pc both ways */
4016 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4018 /* l == c, c > r - swap l & r, grow pc */
4019 qsort_swap(u_right, u_left);
4021 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4025 s = qsort_cmp(pc_left, u_left);
4027 /* l > c, c < r - need to know more */
4028 s = qsort_cmp(u_right, u_left);
4030 /* l > c, c < r, l < r - swap l & c to get ordered */
4031 qsort_swap(u_right, pc_left);
4032 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4033 } else if (s == 0) {
4034 /* l > c, c < r, l == r - swap l & c, grow pc */
4035 qsort_swap(u_right, pc_left);
4037 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4039 /* l > c, c < r, l > r - rotate lcr into crl to order */
4040 qsort_rotate(u_right, pc_left, u_left);
4041 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4043 } else if (s == 0) {
4044 /* l > c, c == r - swap ends, grow pc */
4045 qsort_swap(u_right, u_left);
4047 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4049 /* l > c, c > r - swap ends to get in order */
4050 qsort_swap(u_right, u_left);
4051 qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
4054 /* We now know the 3 middle elements have been compared and
4055 arranged in the desired order, so we can shrink the uncompared
4060 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
4062 /* The above massive nested if was the simple part :-). We now have
4063 the middle 3 elements ordered and we need to scan through the
4064 uncompared sets on either side, swapping elements that are on
4065 the wrong side or simply shuffling equal elements around to get
4066 all equal elements into the pivot chunk.
4070 int still_work_on_left;
4071 int still_work_on_right;
4073 /* Scan the uncompared values on the left. If I find a value
4074 equal to the pivot value, move it over so it is adjacent to
4075 the pivot chunk and expand the pivot chunk. If I find a value
4076 less than the pivot value, then just leave it - its already
4077 on the correct side of the partition. If I find a greater
4078 value, then stop the scan.
4080 while ((still_work_on_left = (u_right >= part_left))) {
4081 s = qsort_cmp(u_right, pc_left);
4084 } else if (s == 0) {
4086 if (pc_left != u_right) {
4087 qsort_swap(u_right, pc_left);
4093 qsort_assert(u_right < pc_left);
4094 qsort_assert(pc_left <= pc_right);
4095 qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
4096 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
4099 /* Do a mirror image scan of uncompared values on the right
4101 while ((still_work_on_right = (u_left <= part_right))) {
4102 s = qsort_cmp(pc_right, u_left);
4105 } else if (s == 0) {
4107 if (pc_right != u_left) {
4108 qsort_swap(pc_right, u_left);
4114 qsort_assert(u_left > pc_right);
4115 qsort_assert(pc_left <= pc_right);
4116 qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
4117 qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
4120 if (still_work_on_left) {
4121 /* I know I have a value on the left side which needs to be
4122 on the right side, but I need to know more to decide
4123 exactly the best thing to do with it.
4125 if (still_work_on_right) {
4126 /* I know I have values on both side which are out of
4127 position. This is a big win because I kill two birds
4128 with one swap (so to speak). I can advance the
4129 uncompared pointers on both sides after swapping both
4130 of them into the right place.
4132 qsort_swap(u_right, u_left);
4135 qsort_all_asserts(pc_left, pc_right, u_left, u_right);
4137 /* I have an out of position value on the left, but the
4138 right is fully scanned, so I "slide" the pivot chunk
4139 and any less-than values left one to make room for the
4140 greater value over on the right. If the out of position
4141 value is immediately adjacent to the pivot chunk (there
4142 are no less-than values), I can do that with a swap,
4143 otherwise, I have to rotate one of the less than values
4144 into the former position of the out of position value
4145 and the right end of the pivot chunk into the left end
4149 if (pc_left == u_right) {
4150 qsort_swap(u_right, pc_right);
4151 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
4153 qsort_rotate(u_right, pc_left, pc_right);
4154 qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
4159 } else if (still_work_on_right) {
4160 /* Mirror image of complex case above: I have an out of
4161 position value on the right, but the left is fully
4162 scanned, so I need to shuffle things around to make room
4163 for the right value on the left.
4166 if (pc_right == u_left) {
4167 qsort_swap(u_left, pc_left);
4168 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
4170 qsort_rotate(pc_right, pc_left, u_left);
4171 qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
4176 /* No more scanning required on either side of partition,
4177 break out of loop and figure out next set of partitions
4183 /* The elements in the pivot chunk are now in the right place. They
4184 will never move or be compared again. All I have to do is decide
4185 what to do with the stuff to the left and right of the pivot
4188 Notes on the QSORT_ORDER_GUESS ifdef code:
4190 1. If I just built these partitions without swapping any (or
4191 very many) elements, there is a chance that the elements are
4192 already ordered properly (being properly ordered will
4193 certainly result in no swapping, but the converse can't be
4196 2. A (properly written) insertion sort will run faster on
4197 already ordered data than qsort will.
4199 3. Perhaps there is some way to make a good guess about
4200 switching to an insertion sort earlier than partition size 6
4201 (for instance - we could save the partition size on the stack
4202 and increase the size each time we find we didn't swap, thus
4203 switching to insertion sort earlier for partitions with a
4204 history of not swapping).
4206 4. Naturally, if I just switch right away, it will make
4207 artificial benchmarks with pure ascending (or descending)
4208 data look really good, but is that a good reason in general?
4212 #ifdef QSORT_ORDER_GUESS
4214 #if QSORT_ORDER_GUESS == 1
4215 qsort_break_even = (part_right - part_left) + 1;
4217 #if QSORT_ORDER_GUESS == 2
4218 qsort_break_even *= 2;
4220 #if QSORT_ORDER_GUESS == 3
4221 int prev_break = qsort_break_even;
4222 qsort_break_even *= qsort_break_even;
4223 if (qsort_break_even < prev_break) {
4224 qsort_break_even = (part_right - part_left) + 1;
4228 qsort_break_even = QSORT_BREAK_EVEN;
4232 if (part_left < pc_left) {
4233 /* There are elements on the left which need more processing.
4234 Check the right as well before deciding what to do.
4236 if (pc_right < part_right) {
4237 /* We have two partitions to be sorted. Stack the biggest one
4238 and process the smallest one on the next iteration. This
4239 minimizes the stack height by insuring that any additional
4240 stack entries must come from the smallest partition which
4241 (because it is smallest) will have the fewest
4242 opportunities to generate additional stack entries.
4244 if ((part_right - pc_right) > (pc_left - part_left)) {
4245 /* stack the right partition, process the left */
4246 partition_stack[next_stack_entry].left = pc_right + 1;
4247 partition_stack[next_stack_entry].right = part_right;
4248 #ifdef QSORT_ORDER_GUESS
4249 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4251 part_right = pc_left - 1;
4253 /* stack the left partition, process the right */
4254 partition_stack[next_stack_entry].left = part_left;
4255 partition_stack[next_stack_entry].right = pc_left - 1;
4256 #ifdef QSORT_ORDER_GUESS
4257 partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
4259 part_left = pc_right + 1;
4261 qsort_assert(next_stack_entry < QSORT_MAX_STACK);
4264 /* The elements on the left are the only remaining elements
4265 that need sorting, arrange for them to be processed as the
4268 part_right = pc_left - 1;
4270 } else if (pc_right < part_right) {
4271 /* There is only one chunk on the right to be sorted, make it
4272 the new partition and loop back around.
4274 part_left = pc_right + 1;
4276 /* This whole partition wound up in the pivot chunk, so
4277 we need to get a new partition off the stack.
4279 if (next_stack_entry == 0) {
4280 /* the stack is empty - we are done */
4284 part_left = partition_stack[next_stack_entry].left;
4285 part_right = partition_stack[next_stack_entry].right;
4286 #ifdef QSORT_ORDER_GUESS
4287 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4291 /* This partition is too small to fool with qsort complexity, just
4292 do an ordinary insertion sort to minimize overhead.
4295 /* Assume 1st element is in right place already, and start checking
4296 at 2nd element to see where it should be inserted.
4298 for (i = part_left + 1; i <= part_right; ++i) {
4300 /* Scan (backwards - just in case 'i' is already in right place)
4301 through the elements already sorted to see if the ith element
4302 belongs ahead of one of them.
4304 for (j = i - 1; j >= part_left; --j) {
4305 if (qsort_cmp(i, j) >= 0) {
4306 /* i belongs right after j
4313 /* Looks like we really need to move some things
4317 for (k = i - 1; k >= j; --k)
4318 array[k + 1] = array[k];
4323 /* That partition is now sorted, grab the next one, or get out
4324 of the loop if there aren't any more.
4327 if (next_stack_entry == 0) {
4328 /* the stack is empty - we are done */
4332 part_left = partition_stack[next_stack_entry].left;
4333 part_right = partition_stack[next_stack_entry].right;
4334 #ifdef QSORT_ORDER_GUESS
4335 qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
4340 /* Believe it or not, the array is sorted at this point! */
4352 sortcv(pTHXo_ SV *a, SV *b)
4355 I32 oldsaveix = PL_savestack_ix;
4356 I32 oldscopeix = PL_scopestack_ix;
4358 GvSV(PL_firstgv) = a;
4359 GvSV(PL_secondgv) = b;
4360 PL_stack_sp = PL_stack_base;
4363 if (PL_stack_sp != PL_stack_base + 1)
4364 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4365 if (!SvNIOKp(*PL_stack_sp))
4366 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4367 result = SvIV(*PL_stack_sp);
4368 while (PL_scopestack_ix > oldscopeix) {
4371 leave_scope(oldsaveix);
4376 sortcv_stacked(pTHXo_ SV *a, SV *b)
4379 I32 oldsaveix = PL_savestack_ix;
4380 I32 oldscopeix = PL_scopestack_ix;
4385 av = (AV*)PL_curpad[0];
4387 av = GvAV(PL_defgv);
4390 if (AvMAX(av) < 1) {
4391 SV** ary = AvALLOC(av);
4392 if (AvARRAY(av) != ary) {
4393 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
4394 SvPVX(av) = (char*)ary;
4396 if (AvMAX(av) < 1) {
4399 SvPVX(av) = (char*)ary;
4406 PL_stack_sp = PL_stack_base;
4409 if (PL_stack_sp != PL_stack_base + 1)
4410 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4411 if (!SvNIOKp(*PL_stack_sp))
4412 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4413 result = SvIV(*PL_stack_sp);
4414 while (PL_scopestack_ix > oldscopeix) {
4417 leave_scope(oldsaveix);
4422 sortcv_xsub(pTHXo_ SV *a, SV *b)
4425 I32 oldsaveix = PL_savestack_ix;
4426 I32 oldscopeix = PL_scopestack_ix;
4428 CV *cv=(CV*)PL_sortcop;
4436 (void)(*CvXSUB(cv))(aTHXo_ cv);
4437 if (PL_stack_sp != PL_stack_base + 1)
4438 Perl_croak(aTHX_ "Sort subroutine didn't return single value");
4439 if (!SvNIOKp(*PL_stack_sp))
4440 Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
4441 result = SvIV(*PL_stack_sp);
4442 while (PL_scopestack_ix > oldscopeix) {
4445 leave_scope(oldsaveix);
4451 sv_ncmp(pTHXo_ SV *a, SV *b)
4455 return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
4459 sv_i_ncmp(pTHXo_ SV *a, SV *b)
4463 return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
4465 #define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
4467 if (PL_amagic_generation) { \
4468 if (SvAMAGIC(left)||SvAMAGIC(right))\
4469 *svp = amagic_call(left, \
4477 amagic_ncmp(pTHXo_ register SV *a, register SV *b)
4480 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4485 I32 i = SvIVX(tmpsv);
4495 return sv_ncmp(aTHXo_ a, b);
4499 amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
4502 tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
4507 I32 i = SvIVX(tmpsv);
4517 return sv_i_ncmp(aTHXo_ a, b);
4521 amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
4524 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4529 I32 i = SvIVX(tmpsv);
4539 return sv_cmp(str1, str2);
4543 amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
4546 tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
4551 I32 i = SvIVX(tmpsv);
4561 return sv_cmp_locale(str1, str2);
4565 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
4567 SV *datasv = FILTER_DATA(idx);
4568 int filter_has_file = IoLINES(datasv);
4569 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
4570 SV *filter_state = (SV *)IoTOP_GV(datasv);
4571 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
4574 /* I was having segfault trouble under Linux 2.2.5 after a
4575 parse error occured. (Had to hack around it with a test
4576 for PL_error_count == 0.) Solaris doesn't segfault --
4577 not sure where the trouble is yet. XXX */
4579 if (filter_has_file) {
4580 len = FILTER_READ(idx+1, buf_sv, maxlen);
4583 if (filter_sub && len >= 0) {
4594 PUSHs(sv_2mortal(newSViv(maxlen)));
4596 PUSHs(filter_state);
4599 count = call_sv(filter_sub, G_SCALAR);
4615 IoLINES(datasv) = 0;
4616 if (filter_child_proc) {
4617 SvREFCNT_dec(filter_child_proc);
4618 IoFMT_GV(datasv) = Nullgv;
4621 SvREFCNT_dec(filter_state);
4622 IoTOP_GV(datasv) = Nullgv;
4625 SvREFCNT_dec(filter_sub);
4626 IoBOTTOM_GV(datasv) = Nullgv;
4628 filter_del(run_user_filter);
4637 sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
4639 return sv_cmp_locale(str1, str2);
4643 sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
4645 return sv_cmp(str1, str2);
4648 #endif /* PERL_OBJECT */