From: Nicholas Clark Date: Thu, 20 Sep 2007 08:39:28 +0000 (+0000) Subject: Make hv_fetch_common() non-static, and change its name to hv_common(), X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=d3ba3f5c3251cdefafd2e9fe0bb52ce4419c7624;p=p5sagit%2Fp5-mst-13.2.git Make hv_fetch_common() non-static, and change its name to hv_common(), as it now also performs hv_delete()/hv_delete_ent() p4raw-id: //depot/perl@31919 --- diff --git a/embed.fnc b/embed.fnc index 8fd27a2..38a52d3 100644 --- a/embed.fnc +++ b/embed.fnc @@ -304,6 +304,9 @@ ApdR |bool |hv_exists |NULLOK HV* tb|NN const char* key|I32 klen ApdR |bool |hv_exists_ent |NULLOK HV* tb|NN SV* key|U32 hash Apd |SV** |hv_fetch |NULLOK HV* tb|NN const char* key|I32 klen|I32 lval Apd |HE* |hv_fetch_ent |NULLOK HV* tb|NN SV* key|I32 lval|U32 hash +Ap |HE* |hv_common |NULLOK HV* tb|NULLOK SV* keysv \ + |NULLOK const char* key|STRLEN klen|int flags \ + |int action|NULLOK SV* val|U32 hash Ap |void |hv_free_ent |NN HV* hv|NULLOK HE* entryK Apd |I32 |hv_iterinit |NN HV* tb ApdR |char* |hv_iterkey |NN HE* entry|NN I32* retlen @@ -1145,8 +1148,6 @@ rs |void |hv_notallowed |int flags|NN const char *key|I32 klen|NN const char *ms sn |struct xpvhv_aux*|hv_auxinit|NN HV *hv sM |SV* |hv_delete_common|NULLOK HV* tb|NULLOK SV* keysv|NULLOK const char* key \ |STRLEN klen|int k_flags|I32 d_flags|U32 hash -sM |HE* |hv_fetch_common|NULLOK HV* tb|NULLOK SV* keysv|NULLOK const char* key \ - |STRLEN klen|int flags|int action|NULLOK SV* val|U32 hash sM |void |clear_placeholders |NN HV* hb|U32 items sM |SV * |refcounted_he_value |NN const struct refcounted_he *he #endif diff --git a/embed.h b/embed.h index edb4a3c..34c81ef 100644 --- a/embed.h +++ b/embed.h @@ -285,6 +285,7 @@ #define hv_exists_ent Perl_hv_exists_ent #define hv_fetch Perl_hv_fetch #define hv_fetch_ent Perl_hv_fetch_ent +#define hv_common Perl_hv_common #define hv_free_ent Perl_hv_free_ent #define hv_iterinit Perl_hv_iterinit #define hv_iterkey Perl_hv_iterkey @@ -1145,7 +1146,6 @@ #define hv_notallowed S_hv_notallowed #define hv_auxinit S_hv_auxinit #define hv_delete_common S_hv_delete_common -#define hv_fetch_common S_hv_fetch_common #define clear_placeholders S_clear_placeholders #define refcounted_he_value S_refcounted_he_value #endif @@ -2570,6 +2570,7 @@ #define hv_exists_ent(a,b,c) Perl_hv_exists_ent(aTHX_ a,b,c) #define hv_fetch(a,b,c,d) Perl_hv_fetch(aTHX_ a,b,c,d) #define hv_fetch_ent(a,b,c,d) Perl_hv_fetch_ent(aTHX_ a,b,c,d) +#define hv_common(a,b,c,d,e,f,g,h) Perl_hv_common(aTHX_ a,b,c,d,e,f,g,h) #define hv_free_ent(a,b) Perl_hv_free_ent(aTHX_ a,b) #define hv_iterinit(a) Perl_hv_iterinit(aTHX_ a) #define hv_iterkey(a,b) Perl_hv_iterkey(aTHX_ a,b) @@ -3425,7 +3426,6 @@ #define hv_notallowed(a,b,c,d) S_hv_notallowed(aTHX_ a,b,c,d) #define hv_auxinit S_hv_auxinit #define hv_delete_common(a,b,c,d,e,f,g) S_hv_delete_common(aTHX_ a,b,c,d,e,f,g) -#define hv_fetch_common(a,b,c,d,e,f,g,h) S_hv_fetch_common(aTHX_ a,b,c,d,e,f,g,h) #define clear_placeholders(a,b) S_clear_placeholders(aTHX_ a,b) #define refcounted_he_value(a) S_refcounted_he_value(aTHX_ a) #endif diff --git a/hv.c b/hv.c index a9f4aa4..f1b3c90 100644 --- a/hv.c +++ b/hv.c @@ -253,8 +253,8 @@ Perl_hv_store(pTHX_ HV *hv, const char *key, I32 klen_i32, SV *val, U32 hash) klen = klen_i32; flags = 0; } - hek = hv_fetch_common (hv, NULL, key, klen, flags, - (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash); + hek = hv_common(hv, NULL, key, klen, flags, + (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash); return hek ? &HeVAL(hek) : NULL; } @@ -263,7 +263,7 @@ SV** Perl_hv_store_flags(pTHX_ HV *hv, const char *key, I32 klen, SV *val, register U32 hash, int flags) { - HE * const hek = hv_fetch_common (hv, NULL, key, klen, flags, + HE * const hek = hv_common(hv, NULL, key, klen, flags, (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash); return hek ? &HeVAL(hek) : NULL; } @@ -301,7 +301,7 @@ information on how to use this function on tied hashes. HE * Perl_hv_store_ent(pTHX_ HV *hv, SV *keysv, SV *val, U32 hash) { - return hv_fetch_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISSTORE, val, hash); + return hv_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISSTORE, val, hash); } /* @@ -326,7 +326,7 @@ Perl_hv_exists(pTHX_ HV *hv, const char *key, I32 klen_i32) klen = klen_i32; flags = 0; } - return hv_fetch_common(hv, NULL, key, klen, flags, HV_FETCH_ISEXISTS, 0, 0) + return hv_common(hv, NULL, key, klen, flags, HV_FETCH_ISEXISTS, 0, 0) ? TRUE : FALSE; } @@ -358,9 +358,9 @@ Perl_hv_fetch(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 lval) klen = klen_i32; flags = 0; } - hek = hv_fetch_common (hv, NULL, key, klen, flags, - lval ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) : HV_FETCH_JUST_SV, - NULL, 0); + hek = hv_common(hv, NULL, key, klen, flags, lval + ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) : HV_FETCH_JUST_SV, + NULL, 0); return hek ? &HeVAL(hek) : NULL; } @@ -378,7 +378,7 @@ computed. bool Perl_hv_exists_ent(pTHX_ HV *hv, SV *keysv, U32 hash) { - return hv_fetch_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISEXISTS, 0, hash) + return hv_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISEXISTS, 0, hash) ? TRUE : FALSE; } @@ -404,13 +404,13 @@ information on how to use this function on tied hashes. HE * Perl_hv_fetch_ent(pTHX_ HV *hv, SV *keysv, I32 lval, register U32 hash) { - return hv_fetch_common(hv, keysv, NULL, 0, 0, - (lval ? HV_FETCH_LVALUE : 0), NULL, hash); + return hv_common(hv, keysv, NULL, 0, 0, + (lval ? HV_FETCH_LVALUE : 0), NULL, hash); } -STATIC HE * -S_hv_fetch_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, - int flags, int action, SV *val, register U32 hash) +HE * +Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, + int flags, int action, SV *val, register U32 hash) { dVAR; XPVHV* xhv; @@ -516,21 +516,21 @@ S_hv_fetch_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, const char * const nkey = strupr(savepvn(key,klen)); /* Note that this fetch is for nkey (the uppercased key) whereas the store is for key (the original) */ - entry = hv_fetch_common(hv, NULL, nkey, klen, - HVhek_FREEKEY, /* free nkey */ - 0 /* non-LVAL fetch */ - | HV_DISABLE_UVAR_XKEY, - NULL /* no value */, - 0 /* compute hash */); + entry = hv_common(hv, NULL, nkey, klen, + HVhek_FREEKEY, /* free nkey */ + 0 /* non-LVAL fetch */ + | HV_DISABLE_UVAR_XKEY, + NULL /* no value */, + 0 /* compute hash */); if (!entry && (action & HV_FETCH_LVALUE)) { /* This call will free key if necessary. Do it this way to encourage compiler to tail call optimise. */ - entry = hv_fetch_common(hv, keysv, key, klen, - flags, - HV_FETCH_ISSTORE - | HV_DISABLE_UVAR_XKEY, - newSV(0), hash); + entry = hv_common(hv, keysv, key, klen, + flags, + HV_FETCH_ISSTORE + | HV_DISABLE_UVAR_XKEY, + newSV(0), hash); } else { if (flags & HVhek_FREEKEY) Safefree(key); @@ -779,9 +779,8 @@ S_hv_fetch_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, if (env) { sv = newSVpvn(env,len); SvTAINTED_on(sv); - return hv_fetch_common(hv, keysv, key, klen, flags, - HV_FETCH_ISSTORE|HV_DISABLE_UVAR_XKEY, sv, - hash); + return hv_common(hv, keysv, key, klen, flags, + HV_FETCH_ISSTORE|HV_DISABLE_UVAR_XKEY, sv, hash); } } #endif @@ -810,9 +809,8 @@ S_hv_fetch_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, However, as we replace the original key with the converted key, this would result in a double conversion, which would show up as a bug if the conversion routine is not idempotent. */ - return hv_fetch_common(hv, keysv, key, klen, flags, - HV_FETCH_ISSTORE|HV_DISABLE_UVAR_XKEY, val, - hash); + return hv_common(hv, keysv, key, klen, flags, + HV_FETCH_ISSTORE|HV_DISABLE_UVAR_XKEY, val, hash); /* XXX Surely that could leak if the fetch-was-store fails? Just like the hv_fetch. */ } @@ -957,8 +955,8 @@ Perl_hv_delete(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 flags) klen = klen_i32; k_flags = 0; } - return (SV *) hv_fetch_common(hv, NULL, key, klen, k_flags, - flags | HV_DELETE, NULL, 0); + return (SV *) hv_common(hv, NULL, key, klen, k_flags, flags | HV_DELETE, + NULL, 0); } /* @@ -976,8 +974,8 @@ precomputed hash value, or 0 to ask for it to be computed. SV * Perl_hv_delete_ent(pTHX_ HV *hv, SV *keysv, I32 flags, U32 hash) { - return (SV *) hv_fetch_common(hv, keysv, NULL, 0, 0, flags | HV_DELETE, - NULL, hash); + return (SV *) hv_common(hv, keysv, NULL, 0, 0, flags | HV_DELETE, NULL, + hash); } STATIC SV * @@ -999,10 +997,9 @@ S_hv_delete_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, if (needs_copy) { SV *sv; - entry = hv_fetch_common(hv, keysv, key, klen, - k_flags & ~HVhek_FREEKEY, - HV_FETCH_LVALUE|HV_DISABLE_UVAR_XKEY, - NULL, hash); + entry = hv_common(hv, keysv, key, klen, k_flags & ~HVhek_FREEKEY, + HV_FETCH_LVALUE|HV_DISABLE_UVAR_XKEY, NULL, + hash); sv = entry ? HeVAL(entry) : NULL; if (sv) { if (SvMAGICAL(sv)) { diff --git a/proto.h b/proto.h index 4aa570d..49f02b8 100644 --- a/proto.h +++ b/proto.h @@ -704,6 +704,7 @@ PERL_CALLCONV SV** Perl_hv_fetch(pTHX_ HV* tb, const char* key, I32 klen, I32 lv PERL_CALLCONV HE* Perl_hv_fetch_ent(pTHX_ HV* tb, SV* key, I32 lval, U32 hash) __attribute__nonnull__(pTHX_2); +PERL_CALLCONV HE* Perl_hv_common(pTHX_ HV* tb, SV* keysv, const char* key, STRLEN klen, int flags, int action, SV* val, U32 hash); PERL_CALLCONV void Perl_hv_free_ent(pTHX_ HV* hv, HE* entryK) __attribute__nonnull__(pTHX_1); @@ -3053,7 +3054,6 @@ STATIC struct xpvhv_aux* S_hv_auxinit(HV *hv) __attribute__nonnull__(1); STATIC SV* S_hv_delete_common(pTHX_ HV* tb, SV* keysv, const char* key, STRLEN klen, int k_flags, I32 d_flags, U32 hash); -STATIC HE* S_hv_fetch_common(pTHX_ HV* tb, SV* keysv, const char* key, STRLEN klen, int flags, int action, SV* val, U32 hash); STATIC void S_clear_placeholders(pTHX_ HV* hb, U32 items) __attribute__nonnull__(pTHX_1);