X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=doop.c;h=3e6066529a6513375c29279291dd407e9e382af7;hb=1242dfaee525d4d0ab20ac8ae62b3f0de03fa88e;hp=75cbd3ec40142915bc24d389c1a35df584dc7942;hpb=fabdb6c0879db76333e970b6c67260c877fc17b3;p=p5sagit%2Fp5-mst-13.2.git diff --git a/doop.c b/doop.c index 75cbd3e..3e60665 100644 --- a/doop.c +++ b/doop.c @@ -1,7 +1,7 @@ /* doop.c * * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - * 2000, 2001, 2002, 2004, 2005, by Larry Wall and others + * 2000, 2001, 2002, 2004, 2005, 2006, by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -28,6 +28,7 @@ STATIC I32 S_do_trans_simple(pTHX_ SV *sv) { + dVAR; U8 *s; U8 *d; const U8 *send; @@ -68,7 +69,7 @@ S_do_trans_simple(pTHX_ SV *sv) I32 ch; /* Need to check this, otherwise 128..255 won't match */ - const UV c = utf8n_to_uvchr(s, send - s, &ulen, 0); + const UV c = utf8n_to_uvchr(s, send - s, &ulen, UTF8_ALLOW_DEFAULT); if (c < 0x100 && (ch = tbl[c]) >= 0) { matches++; d = uvchr_to_utf8(d, ch); @@ -96,6 +97,7 @@ S_do_trans_simple(pTHX_ SV *sv) STATIC I32 S_do_trans_count(pTHX_ SV *sv) { + dVAR; const U8 *s; const U8 *send; I32 matches = 0; @@ -117,7 +119,7 @@ S_do_trans_count(pTHX_ SV *sv) const I32 complement = PL_op->op_private & OPpTRANS_COMPLEMENT; while (s < send) { STRLEN ulen; - const UV c = utf8n_to_uvchr(s, send - s, &ulen, 0); + const UV c = utf8n_to_uvchr(s, send - s, &ulen, UTF8_ALLOW_DEFAULT); if (c < 0x100) { if (tbl[c] >= 0) matches++; @@ -133,6 +135,7 @@ S_do_trans_count(pTHX_ SV *sv) STATIC I32 S_do_trans_complex(pTHX_ SV *sv) { + dVAR; U8 *s; U8 *send; U8 *d; @@ -206,7 +209,8 @@ S_do_trans_complex(pTHX_ SV *sv) UV pch = 0xfeedface; while (s < send) { STRLEN len; - const UV comp = utf8_to_uvchr(s, &len); + const UV comp = utf8n_to_uvchr(s, send - s, &len, + UTF8_ALLOW_DEFAULT); I32 ch; if (comp > 0xff) { @@ -251,7 +255,8 @@ S_do_trans_complex(pTHX_ SV *sv) else { while (s < send) { STRLEN len; - const UV comp = utf8_to_uvchr(s, &len); + const UV comp = utf8n_to_uvchr(s, send - s, &len, + UTF8_ALLOW_DEFAULT); I32 ch; if (comp > 0xff) { if (!complement) { @@ -298,6 +303,7 @@ S_do_trans_complex(pTHX_ SV *sv) STATIC I32 S_do_trans_simple_utf8(pTHX_ SV *sv) { + dVAR; U8 *s; U8 *send; U8 *d; @@ -309,7 +315,7 @@ S_do_trans_simple_utf8(pTHX_ SV *sv) SV* const rv = (SV*)cSVOP->op_sv; HV* const hv = (HV*)SvRV(rv); - SV* const * svp = hv_fetch(hv, "NONE", 4, FALSE); + SV* const * svp = hv_fetchs(hv, "NONE", FALSE); const UV none = svp ? SvUV(*svp) : 0x7fffffff; const UV extra = none + 1; UV final = 0; @@ -333,7 +339,7 @@ S_do_trans_simple_utf8(pTHX_ SV *sv) send = s + len; start = s; - svp = hv_fetch(hv, "FINAL", 5, FALSE); + svp = hv_fetchs(hv, "FINAL", FALSE); if (svp) final = SvUV(*svp); @@ -398,14 +404,16 @@ S_do_trans_simple_utf8(pTHX_ SV *sv) STATIC I32 S_do_trans_count_utf8(pTHX_ SV *sv) { + dVAR; const U8 *s; - const U8 *start = 0, *send; + const U8 *start = NULL; + const U8 *send; I32 matches = 0; STRLEN len; SV* const rv = (SV*)cSVOP->op_sv; HV* const hv = (HV*)SvRV(rv); - SV* const * const svp = hv_fetch(hv, "NONE", 4, FALSE); + SV* const * const svp = hv_fetchs(hv, "NONE", FALSE); const UV none = svp ? SvUV(*svp) : 0x7fffffff; const UV extra = none + 1; U8 hibit = 0; @@ -440,6 +448,7 @@ S_do_trans_count_utf8(pTHX_ SV *sv) STATIC I32 S_do_trans_complex_utf8(pTHX_ SV *sv) { + dVAR; U8 *start, *send; U8 *d; I32 matches = 0; @@ -448,7 +457,7 @@ S_do_trans_complex_utf8(pTHX_ SV *sv) const I32 grows = PL_op->op_private & OPpTRANS_GROWS; SV * const rv = (SV*)cSVOP->op_sv; HV * const hv = (HV*)SvRV(rv); - SV * const *svp = hv_fetch(hv, "NONE", 4, FALSE); + SV * const *svp = hv_fetchs(hv, "NONE", FALSE); const UV none = svp ? SvUV(*svp) : 0x7fffffff; const UV extra = none + 1; UV final = 0; @@ -474,7 +483,7 @@ S_do_trans_complex_utf8(pTHX_ SV *sv) send = s + len; start = s; - svp = hv_fetch(hv, "FINAL", 5, FALSE); + svp = hv_fetchs(hv, "FINAL", FALSE); if (svp) { final = SvUV(*svp); havefinal = TRUE; @@ -533,7 +542,7 @@ S_do_trans_complex_utf8(pTHX_ SV *sv) } else { STRLEN len; - uv = utf8_to_uvuni(s, &len); + uv = utf8n_to_uvuni(s, send - s, &len, UTF8_ALLOW_DEFAULT); if (uv != puv) { Move(s, d, len, U8); d += len; @@ -601,6 +610,7 @@ S_do_trans_complex_utf8(pTHX_ SV *sv) I32 Perl_do_trans(pTHX_ SV *sv) { + dVAR; STRLEN len; const I32 hasutf = (PL_op->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)); @@ -649,6 +659,7 @@ Perl_do_trans(pTHX_ SV *sv) void Perl_do_join(pTHX_ register SV *sv, SV *del, register SV **mark, register SV **sp) { + dVAR; SV ** const oldmark = mark; register I32 items = sp - mark; register STRLEN len; @@ -705,6 +716,7 @@ Perl_do_join(pTHX_ register SV *sv, SV *del, register SV **mark, register SV **s void Perl_do_sprintf(pTHX_ SV *sv, I32 len, SV **sarg) { + dVAR; STRLEN patlen; const char * const pat = SvPV_const(*sarg, patlen); bool do_taint = FALSE; @@ -712,7 +724,7 @@ Perl_do_sprintf(pTHX_ SV *sv, I32 len, SV **sarg) SvUTF8_off(sv); if (DO_UTF8(*sarg)) SvUTF8_on(sv); - sv_vsetpvfn(sv, pat, patlen, Null(va_list*), sarg + 1, len - 1, &do_taint); + sv_vsetpvfn(sv, pat, patlen, NULL, sarg + 1, len - 1, &do_taint); SvSETMAGIC(sv); if (do_taint) SvTAINTED_on(sv); @@ -722,6 +734,7 @@ Perl_do_sprintf(pTHX_ SV *sv, I32 len, SV **sarg) UV Perl_do_vecget(pTHX_ SV *sv, I32 offset, I32 size) { + dVAR; STRLEN srclen, len; const unsigned char *s = (const unsigned char *) SvPV_const(sv, srclen); UV retnum = 0; @@ -860,6 +873,7 @@ Perl_do_vecget(pTHX_ SV *sv, I32 offset, I32 size) void Perl_do_vecset(pTHX_ SV *sv) { + dVAR; register I32 offset; register I32 size; register unsigned char *s; @@ -941,6 +955,7 @@ Perl_do_vecset(pTHX_ SV *sv) void Perl_do_chop(pTHX_ register SV *astr, register SV *sv) { + dVAR; STRLEN len; char *s; @@ -1016,11 +1031,12 @@ Perl_do_chop(pTHX_ register SV *astr, register SV *sv) I32 Perl_do_chomp(pTHX_ register SV *sv) { + dVAR; register I32 count; STRLEN len; char *s; char *temp_buffer = NULL; - SV* svrecode = Nullsv; + SV* svrecode = NULL; if (RsSNARF(PL_rs)) return 0; @@ -1151,6 +1167,7 @@ Perl_do_chomp(pTHX_ register SV *sv) void Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right) { + dVAR; #ifdef LIBERAL register long *dl; register long *ll; @@ -1342,6 +1359,7 @@ finish: OP * Perl_do_kv(pTHX) { + dVAR; dSP; HV * const hv = (HV*)POPs; HV *keys; @@ -1355,7 +1373,7 @@ Perl_do_kv(pTHX) if (PL_op->op_flags & OPf_MOD || LVRET) { /* lvalue */ dTARGET; /* make sure to clear its target here */ if (SvTYPE(TARG) == SVt_PVLV) - LvTARG(TARG) = Nullsv; + LvTARG(TARG) = NULL; PUSHs(TARG); } RETURN; @@ -1374,13 +1392,13 @@ Perl_do_kv(pTHX) if (PL_op->op_flags & OPf_MOD || LVRET) { /* lvalue */ if (SvTYPE(TARG) < SVt_PVLV) { sv_upgrade(TARG, SVt_PVLV); - sv_magic(TARG, Nullsv, PERL_MAGIC_nkeys, Nullch, 0); + sv_magic(TARG, NULL, PERL_MAGIC_nkeys, NULL, 0); } LvTYPE(TARG) = 'k'; if (LvTARG(TARG) != (SV*)keys) { if (LvTARG(TARG)) SvREFCNT_dec(LvTARG(TARG)); - LvTARG(TARG) = SvREFCNT_inc(keys); + LvTARG(TARG) = SvREFCNT_inc_simple(keys); } PUSHs(TARG); RETURN;