X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=doop.c;h=b93223fc49c4f6951363ccc36f446e2e7991c937;hb=ca63f0d242a6920af7209f1a190c17b7800ce145;hp=c6270e44f4fb21152a745c587d56dd85853ece1e;hpb=4757a2438b123364ad98fc0cb4698e56331f713b;p=p5sagit%2Fp5-mst-13.2.git diff --git a/doop.c b/doop.c index c6270e4..b93223f 100644 --- a/doop.c +++ b/doop.c @@ -1,6 +1,6 @@ /* doop.c * - * Copyright (c) 1991-1997, Larry Wall + * Copyright (c) 1991-1999, Larry Wall * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -18,7 +18,20 @@ #include #endif -static I32 +#ifndef PERL_OBJECT +static I32 do_trans_CC_simple _((SV *sv)); +static I32 do_trans_CC_count _((SV *sv)); +static I32 do_trans_CC_complex _((SV *sv)); +static I32 do_trans_UU_simple _((SV *sv)); +static I32 do_trans_UU_count _((SV *sv)); +static I32 do_trans_UU_complex _((SV *sv)); +static I32 do_trans_UC_simple _((SV *sv)); +static I32 do_trans_CU_simple _((SV *sv)); +static I32 do_trans_UC_trivial _((SV *sv)); +static I32 do_trans_CU_trivial _((SV *sv)); +#endif + +STATIC I32 do_trans_CC_simple(SV *sv) { dTHR; @@ -48,7 +61,7 @@ do_trans_CC_simple(SV *sv) return matches; } -static I32 +STATIC I32 do_trans_CC_count(SV *sv) { dTHR; @@ -74,7 +87,7 @@ do_trans_CC_count(SV *sv) return matches; } -static I32 +STATIC I32 do_trans_CC_complex(SV *sv) { dTHR; @@ -131,7 +144,7 @@ do_trans_CC_complex(SV *sv) return matches; } -static I32 +STATIC I32 do_trans_UU_simple(SV *sv) { dTHR; @@ -183,7 +196,7 @@ do_trans_UU_simple(SV *sv) return matches; } -static I32 +STATIC I32 do_trans_UU_count(SV *sv) { dTHR; @@ -202,16 +215,15 @@ do_trans_UU_count(SV *sv) send = s + len; while (s < send) { - if ((uv = swash_fetch(rv, s)) < none) { - s += UTF8SKIP(s); + if ((uv = swash_fetch(rv, s)) < none) matches++; - } + s += UTF8SKIP(s); } return matches; } -static I32 +STATIC I32 do_trans_UC_simple(SV *sv) { dTHR; @@ -264,7 +276,7 @@ do_trans_UC_simple(SV *sv) return matches; } -static I32 +STATIC I32 do_trans_CU_simple(SV *sv) { dTHR; @@ -327,7 +339,7 @@ do_trans_CU_simple(SV *sv) /* utf-8 to latin-1 */ -static I32 +STATIC I32 do_trans_UC_trivial(SV *sv) { dTHR; @@ -359,7 +371,7 @@ do_trans_UC_trivial(SV *sv) /* latin-1 to utf-8 */ -static I32 +STATIC I32 do_trans_CU_trivial(SV *sv) { dTHR; @@ -393,7 +405,7 @@ do_trans_CU_trivial(SV *sv) return matches; } -static I32 +STATIC I32 do_trans_UU_complex(SV *sv) { dTHR; @@ -581,10 +593,11 @@ do_trans_UU_complex(SV *sv) I32 do_trans(SV *sv) { + dTHR; STRLEN len; if (SvREADONLY(sv) && !(PL_op->op_private & OPpTRANS_IDENTICAL)) - croak(no_modify); + croak(PL_no_modify); (void)SvPV(sv, len); if (!len) @@ -640,8 +653,7 @@ do_join(register SV *sv, SV *del, register SV **mark, register SV **sp) mark++; len = (items > 0 ? (delimlen * (items - 1) ) : 0); - if (SvTYPE(sv) < SVt_PV) - sv_upgrade(sv, SVt_PV); + (void)SvUPGRADE(sv, SVt_PV); if (SvLEN(sv) < len + items) { /* current length is way too short */ while (items-- > 0) { if (*mark && !SvGMAGICAL(*mark) && SvOK(*mark)) { @@ -909,7 +921,8 @@ do_vop(I32 optype, SV *sv, SV *left, SV *right) len = leftlen < rightlen ? leftlen : rightlen; lensave = len; if (SvOK(sv) || SvTYPE(sv) > SVt_PVMG) { - dc = SvPV_force(sv, PL_na); + STRLEN n_a; + dc = SvPV_force(sv, n_a); if (SvCUR(sv) < len) { dc = SvGROW(sv, len + 1); (void)memzero(dc + SvCUR(sv), len - SvCUR(sv) + 1); @@ -1048,7 +1061,7 @@ do_kv(ARGSproto) RETURN; } - if (!SvRMAGICAL(keys) || !mg_find((SV*)keys,'P')) + if (! SvTIED_mg((SV*)keys, 'P')) i = HvKEYS(keys); else { i = 0; @@ -1067,10 +1080,9 @@ do_kv(ARGSproto) if (dokeys) XPUSHs(hv_iterkeysv(entry)); /* won't clobber stack_sp */ if (dovalues) { - tmpstr = sv_newmortal(); PUTBACK; - sv_setsv(tmpstr,realhv ? - hv_iterval(hv,entry) : avhv_iterval((AV*)hv,entry)); + tmpstr = realhv ? + hv_iterval(hv,entry) : avhv_iterval((AV*)hv,entry); DEBUG_H(sv_setpvf(tmpstr, "%lu%%%d=%lu", (unsigned long)HeHASH(entry), HvMAX(keys)+1,