diff --git a/embed.fnc b/embed.fnc index 64b67cbbd2..85e3cd2647 100644 --- a/embed.fnc +++ b/embed.fnc @@ -1507,11 +1507,11 @@ ARdp |HV * |hv_copy_hints_hv \ Cp |void |hv_delayfree_ent \ |NULLOK HV *notused \ |NULLOK HE *entry -Admp |SV * |hv_delete |NULLOK HV *hv \ +AMbdp |SV * |hv_delete |NULLOK HV *hv \ |NN const char *key \ |I32 klen \ |I32 flags -Admp |SV * |hv_delete_ent |NULLOK HV *hv \ +AMbdp |SV * |hv_delete_ent |NULLOK HV *hv \ |NN SV *keysv \ |I32 flags \ |U32 hash @@ -1527,17 +1527,17 @@ dp |void |hv_ename_delete|NN HV *hv \ |NN const char *name \ |U32 len \ |U32 flags -ARdmp |bool |hv_exists |NULLOK HV *hv \ +AMRbdp |bool |hv_exists |NULLOK HV *hv \ |NN const char *key \ |I32 klen -ARdmp |bool |hv_exists_ent |NULLOK HV *hv \ +AMRbdp |bool |hv_exists_ent |NULLOK HV *hv \ |NN SV *keysv \ |U32 hash -Admp |SV ** |hv_fetch |NULLOK HV *hv \ +AMbdp |SV ** |hv_fetch |NULLOK HV *hv \ |NN const char *key \ |I32 klen \ |I32 lval -Admp |HE * |hv_fetch_ent |NULLOK HV *hv \ +AMbdp |HE * |hv_fetch_ent |NULLOK HV *hv \ |NN SV *keysv \ |I32 lval \ |U32 hash @@ -1548,7 +1548,7 @@ Adp |I32 |hv_iterinit |NN HV *hv ARdp |char * |hv_iterkey |NN HE *entry \ |NN I32 *retlen ARdp |SV * |hv_iterkeysv |NN HE *entry -Admp |HE * |hv_iternext |NN HV *hv +AMRbdp |HE * |hv_iternext |NN HV *hv ARdpx |HE * |hv_iternext_flags \ |NN HV *hv \ |I32 flags @@ -1559,7 +1559,7 @@ ARdp |SV * |hv_iterval |NN HV *hv \ |NN HE *entry Adp |void |hv_ksplit |NN HV *hv \ |IV newmax -Admp |void |hv_magic |NN HV *hv \ +AMbdp |void |hv_magic |NN HV *hv \ |NULLOK GV *gv \ |int how Adp |void |hv_name_set |NN HV *hv \ @@ -1582,25 +1582,25 @@ Cdop |void |hv_riter_set |NN HV *hv \ |I32 riter ARdp |SV * |hv_scalar |NN HV *hv -Admp |SV ** |hv_store |NULLOK HV *hv \ +AMbdp |SV ** |hv_store |NULLOK HV *hv \ |NULLOK const char *key \ |I32 klen \ |NULLOK SV *val \ |U32 hash -Admp |HE * |hv_store_ent |NULLOK HV *hv \ +AMbdp |HE * |hv_store_ent |NULLOK HV *hv \ |NULLOK SV *key \ |NULLOK SV *val \ |U32 hash -Ampx |SV ** |hv_store_flags |NULLOK HV *hv \ +AMbpx |SV ** |hv_store_flags |NULLOK HV *hv \ |NULLOK const char *key \ |I32 klen \ |NULLOK SV *val \ |U32 hash \ |int flags -Admp |SV ** |hv_stores |NULLOK HV *hv \ +Adm |SV ** |hv_stores |NULLOK HV *hv \ |"key" \ |NULLOK SV *val -Admp |void |hv_undef |NULLOK HV *hv +Adm |void |hv_undef |NULLOK HV *hv Xop |void |hv_undef_flags |NULLOK HV *hv \ |U32 flags APdm |I32 |ibcmp |NN const char *a \ @@ -2226,7 +2226,7 @@ ARdp |OP * |newGVOP |I32 type \ |NN GV *gv ARdp |OP * |newGVREF |I32 type \ |NULLOK OP *o -ARdmp |HV * |newHV +AMRbdp |HV * |newHV ARdp |HV * |newHVhv |NULLOK HV *hv ARdp |OP * |newHVREF |NN OP *o AMRbdp |IO * |newIO diff --git a/embed.h b/embed.h index 90537ee873..ed7681926e 100644 --- a/embed.h +++ b/embed.h @@ -297,31 +297,18 @@ # define hv_common_key_len(a,b,c,d,e,f) Perl_hv_common_key_len(aTHX_ a,b,c,d,e,f) # define hv_copy_hints_hv(a) Perl_hv_copy_hints_hv(aTHX_ a) # define hv_delayfree_ent(a,b) Perl_hv_delayfree_ent(aTHX_ a,b) -# define hv_delete(a,b,c,d) Perl_hv_delete(aTHX,a,b,c,d) -# define hv_delete_ent(a,b,c,d) Perl_hv_delete_ent(aTHX,a,b,c,d) # define hv_dump(a) Perl_hv_dump(aTHX_ a) -# define hv_exists(a,b,c) Perl_hv_exists(aTHX,a,b,c) -# 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_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) # define hv_iterkeysv(a) Perl_hv_iterkeysv(aTHX_ a) -# define hv_iternext(a) Perl_hv_iternext(aTHX,a) # define hv_iternext_flags(a,b) Perl_hv_iternext_flags(aTHX_ a,b) # define hv_iternextsv(a,b,c) Perl_hv_iternextsv(aTHX_ a,b,c) # define hv_iterval(a,b) Perl_hv_iterval(aTHX_ a,b) # define hv_ksplit(a,b) Perl_hv_ksplit(aTHX_ a,b) -# define hv_magic(a,b,c) Perl_hv_magic(aTHX,a,b,c) # define hv_name_set(a,b,c,d) Perl_hv_name_set(aTHX_ a,b,c,d) # define hv_rand_set(a,b) Perl_hv_rand_set(aTHX_ a,b) # define hv_scalar(a) Perl_hv_scalar(aTHX_ a) -# define hv_store(a,b,c,d,e) Perl_hv_store(aTHX,a,b,c,d,e) -# define hv_store_ent(a,b,c,d) Perl_hv_store_ent(aTHX,a,b,c,d) -# define hv_store_flags(a,b,c,d,e,f) Perl_hv_store_flags(aTHX,a,b,c,d,e,f) -# define hv_stores(a,b,c) Perl_hv_stores(aTHX,a,b,c) -# define hv_undef(a) Perl_hv_undef(aTHX,a) # define init_i18nl10n(a) Perl_init_i18nl10n(aTHX_ a) # define init_stacks() Perl_init_stacks(aTHX) # define init_tm(a) Perl_init_tm(aTHX_ a) @@ -419,7 +406,6 @@ # define newGVOP(a,b,c) Perl_newGVOP(aTHX_ a,b,c) # define newGVREF(a,b) Perl_newGVREF(aTHX_ a,b) # define newGVgen_flags(a,b) Perl_newGVgen_flags(aTHX_ a,b) -# define newHV() Perl_newHV(aTHX) # define newHVREF(a) Perl_newHVREF(aTHX_ a) # define newHVhv(a) Perl_newHVhv(aTHX_ a) # define newLISTOP(a,b,c,d) Perl_newLISTOP(aTHX_ a,b,c,d) diff --git a/hv.h b/hv.h index a89896d51e..a6319cd60a 100644 --- a/hv.h +++ b/hv.h @@ -513,9 +513,9 @@ whether it is valid to call C. /* Flags for hv_iternext_flags. */ #define HV_ITERNEXT_WANTPLACEHOLDERS 0x01 /* Don't skip placeholders. */ -#define Perl_hv_iternext(mTHX, hv) Perl_hv_iternext_flags(aTHX_ hv, 0) -#define Perl_hv_magic(mTHX, hv, gv, how) Perl_sv_magic(aTHX_ MUTABLE_SV(hv), MUTABLE_SV(gv), how, NULL, 0) -#define Perl_hv_undef(mTHX, hv) Perl_hv_undef_flags(aTHX_ hv, 0) +#define hv_iternext(hv) hv_iternext_flags(hv, 0) +#define hv_magic(hv, gv, how) sv_magic(MUTABLE_SV(hv), MUTABLE_SV(gv), how, NULL, 0) +#define hv_undef(hv) Perl_hv_undef_flags(aTHX_ hv, 0) #define Perl_sharepvn(pv, len, hash) HEK_KEY(share_hek(pv, len, hash)) #define sharepvn(pv, len, hash) Perl_sharepvn(pv, len, hash) @@ -527,41 +527,41 @@ whether it is valid to call C. ->shared_he_he.he_valu.hent_refcount), \ hek) -#define Perl_hv_store_ent(mTHX, hv, keysv, val, hash) \ - ((HE *) Perl_hv_common(aTHX_ (hv), (keysv), NULL, 0, 0, HV_FETCH_ISSTORE, \ +#define hv_store_ent(hv, keysv, val, hash) \ + ((HE *) hv_common((hv), (keysv), NULL, 0, 0, HV_FETCH_ISSTORE, \ (val), (hash))) -#define Perl_hv_exists_ent(mTHX, hv, keysv, hash) \ - cBOOL(Perl_hv_common(aTHX_ (hv), (keysv), NULL, 0, 0, HV_FETCH_ISEXISTS, 0, (hash))) -#define Perl_hv_fetch_ent(mTHX, hv, keysv, lval, hash) \ - ((HE *) Perl_hv_common(aTHX_ (hv), (keysv), NULL, 0, 0, \ +#define hv_exists_ent(hv, keysv, hash) \ + cBOOL(hv_common((hv), (keysv), NULL, 0, 0, HV_FETCH_ISEXISTS, 0, (hash))) +#define hv_fetch_ent(hv, keysv, lval, hash) \ + ((HE *) hv_common((hv), (keysv), NULL, 0, 0, \ ((lval) ? HV_FETCH_LVALUE : 0), NULL, (hash))) -#define Perl_hv_delete_ent(mTHX, hv, key, flags, hash) \ - (MUTABLE_SV(Perl_hv_common(aTHX_ (hv), (key), NULL, 0, 0, (flags) | HV_DELETE, \ +#define hv_delete_ent(hv, key, flags, hash) \ + (MUTABLE_SV(hv_common((hv), (key), NULL, 0, 0, (flags) | HV_DELETE, \ NULL, (hash)))) -#define Perl_hv_store_flags(mTHX, hv, key, klen, val, hash, flags) \ - ((SV**) Perl_hv_common(aTHX_ (hv), NULL, (key), (klen), (flags), \ +#define hv_store_flags(hv, key, klen, val, hash, flags) \ + ((SV**) hv_common((hv), NULL, (key), (klen), (flags), \ (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), (val), \ (hash))) -#define Perl_hv_store(mTHX, hv, key, klen, val, hash) \ - ((SV**) Perl_hv_common_key_len(aTHX_ (hv), (key), (klen), \ +#define hv_store(hv, key, klen, val, hash) \ + ((SV**) hv_common_key_len((hv), (key), (klen), \ (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), \ (val), (hash))) -#define Perl_hv_exists(mTHX, hv, key, klen) \ - cBOOL(Perl_hv_common_key_len(aTHX_ (hv), (key), (klen), HV_FETCH_ISEXISTS, NULL, 0)) +#define hv_exists(hv, key, klen) \ + cBOOL(hv_common_key_len((hv), (key), (klen), HV_FETCH_ISEXISTS, NULL, 0)) -#define Perl_hv_fetch(mTHX, hv, key, klen, lval) \ - ((SV**) Perl_hv_common_key_len(aTHX_ (hv), (key), (klen), (lval) \ +#define hv_fetch(hv, key, klen, lval) \ + ((SV**) hv_common_key_len((hv), (key), (klen), (lval) \ ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) \ : HV_FETCH_JUST_SV, NULL, 0)) -#define Perl_hv_delete(mTHX, hv, key, klen, flags) \ - (MUTABLE_SV(Perl_hv_common_key_len(aTHX_ (hv), (key), (klen), \ +#define hv_delete(hv, key, klen, flags) \ + (MUTABLE_SV(hv_common_key_len((hv), (key), (klen), \ (flags) | HV_DELETE, NULL, 0))) /* Provide 's' suffix subs for constant strings (and avoid needing to count @@ -590,8 +590,8 @@ whether it is valid to call C. #define hv_name_sets(hv, name, flags) \ hv_name_set((hv),ASSERT_IS_LITERAL(name),(sizeof(name)-1), flags) -#define Perl_hv_stores(mTHX, hv, key, val) \ - Perl_hv_store(aTHX, (hv), ASSERT_IS_LITERAL(key), (sizeof(key)-1), (val), 0) +#define hv_stores(hv, key, val) \ + hv_store((hv), ASSERT_IS_LITERAL(key), (sizeof(key)-1), (val), 0) #ifdef PERL_CORE # define hv_storehek(hv, hek, val) \ @@ -731,7 +731,7 @@ Creates a new HV. The reference count is set to 1. =cut */ -#define Perl_newHV(mTHX) MUTABLE_HV(Perl_newSV_type(aTHX_ SVt_PVHV)) +#define newHV() MUTABLE_HV(newSV_type(SVt_PVHV)) #include "hv_func.h" diff --git a/mathoms.c b/mathoms.c index 27e6dbc1a6..5d4de18505 100644 --- a/mathoms.c +++ b/mathoms.c @@ -401,6 +401,22 @@ Perl_gv_fetchmethod(pTHX_ HV *stash, const char *name) return gv_fetchmethod_autoload(stash, name, TRUE); } +HE * +Perl_hv_iternext(pTHX_ HV *hv) +{ + PERL_ARGS_ASSERT_HV_ITERNEXT; + + return hv_iternext_flags(hv, 0); +} + +void +Perl_hv_magic(pTHX_ HV *hv, GV *gv, int how) +{ + PERL_ARGS_ASSERT_HV_MAGIC; + + sv_magic(MUTABLE_SV(hv), MUTABLE_SV(gv), how, NULL, 0); +} + bool Perl_do_open(pTHX_ GV *gv, const char *name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO *supplied_fp) @@ -483,6 +499,120 @@ Perl_sv_usepvn(pTHX_ SV *sv, char *ptr, STRLEN len) sv_usepvn_flags(sv,ptr,len, 0); } +HE * +Perl_hv_store_ent(pTHX_ HV *hv, SV *keysv, SV *val, U32 hash) +{ + return (HE *)hv_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISSTORE, val, hash); +} + +bool +Perl_hv_exists_ent(pTHX_ HV *hv, SV *keysv, U32 hash) +{ + PERL_ARGS_ASSERT_HV_EXISTS_ENT; + + return cBOOL(hv_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISEXISTS, 0, hash)); +} + +HE * +Perl_hv_fetch_ent(pTHX_ HV *hv, SV *keysv, I32 lval, U32 hash) +{ + PERL_ARGS_ASSERT_HV_FETCH_ENT; + + return (HE *)hv_common(hv, keysv, NULL, 0, 0, + (lval ? HV_FETCH_LVALUE : 0), NULL, hash); +} + +SV * +Perl_hv_delete_ent(pTHX_ HV *hv, SV *keysv, I32 flags, U32 hash) +{ + PERL_ARGS_ASSERT_HV_DELETE_ENT; + + return MUTABLE_SV(hv_common(hv, keysv, NULL, 0, 0, flags | HV_DELETE, NULL, + hash)); +} + +SV** +Perl_hv_store_flags(pTHX_ HV *hv, const char *key, I32 klen, SV *val, U32 hash, + int flags) +{ + return (SV**) hv_common(hv, NULL, key, klen, flags, + (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash); +} + +SV** +Perl_hv_store(pTHX_ HV *hv, const char *key, I32 klen_i32, SV *val, U32 hash) +{ + STRLEN klen; + int flags; + + if (klen_i32 < 0) { + klen = -klen_i32; + flags = HVhek_UTF8; + } else { + klen = klen_i32; + flags = 0; + } + return (SV **) hv_common(hv, NULL, key, klen, flags, + (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash); +} + +bool +Perl_hv_exists(pTHX_ HV *hv, const char *key, I32 klen_i32) +{ + STRLEN klen; + int flags; + + PERL_ARGS_ASSERT_HV_EXISTS; + + if (klen_i32 < 0) { + klen = -klen_i32; + flags = HVhek_UTF8; + } else { + klen = klen_i32; + flags = 0; + } + return cBOOL(hv_common(hv, NULL, key, klen, flags, HV_FETCH_ISEXISTS, 0, 0)); +} + +SV** +Perl_hv_fetch(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 lval) +{ + STRLEN klen; + int flags; + + PERL_ARGS_ASSERT_HV_FETCH; + + if (klen_i32 < 0) { + klen = -klen_i32; + flags = HVhek_UTF8; + } else { + klen = klen_i32; + flags = 0; + } + return (SV **) hv_common(hv, NULL, key, klen, flags, + lval ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) + : HV_FETCH_JUST_SV, NULL, 0); +} + +SV * +Perl_hv_delete(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 flags) +{ + STRLEN klen; + int k_flags; + + PERL_ARGS_ASSERT_HV_DELETE; + + if (klen_i32 < 0) { + klen = -klen_i32; + k_flags = HVhek_UTF8; + } else { + klen = klen_i32; + k_flags = 0; + } + return MUTABLE_SV(hv_common(hv, NULL, key, klen, k_flags, flags | HV_DELETE, + NULL, 0)); +} + AV * Perl_newAV(pTHX) { @@ -493,6 +623,15 @@ Perl_newAV(pTHX) AvMAX(av) = AvFILLp(av) = -1; */ } +HV * +Perl_newHV(pTHX) +{ + HV * const hv = MUTABLE_HV(newSV_type(SVt_PVHV)); + assert(!SvOK(hv)); + + return hv; +} + void Perl_sv_insert(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen) diff --git a/proto.h b/proto.h index 0c14ca2fd2..5b26f952e9 100644 --- a/proto.h +++ b/proto.h @@ -1594,12 +1594,6 @@ PERL_CALLCONV void Perl_hv_delayfree_ent(pTHX_ HV *notused, HE *entry); #define PERL_ARGS_ASSERT_HV_DELAYFREE_ENT -/* PERL_CALLCONV SV * -Perl_hv_delete(pTHX_ HV *hv, const char *key, I32 klen, I32 flags); */ - -/* PERL_CALLCONV SV * -Perl_hv_delete_ent(pTHX_ HV *hv, SV *keysv, I32 flags, U32 hash); */ - PERL_CALLCONV void Perl_hv_dump(pTHX_ HV *hv); #define PERL_ARGS_ASSERT_HV_DUMP @@ -1627,20 +1621,6 @@ Perl_hv_ename_delete(pTHX_ HV *hv, const char *name, U32 len, U32 flags) #define PERL_ARGS_ASSERT_HV_ENAME_DELETE \ assert(hv); assert(name); assert(SvTYPE(hv) == SVt_PVHV) -/* PERL_CALLCONV bool -Perl_hv_exists(pTHX_ HV *hv, const char *key, I32 klen) - __attribute__warn_unused_result__; */ - -/* PERL_CALLCONV bool -Perl_hv_exists_ent(pTHX_ HV *hv, SV *keysv, U32 hash) - __attribute__warn_unused_result__; */ - -/* PERL_CALLCONV SV ** -Perl_hv_fetch(pTHX_ HV *hv, const char *key, I32 klen, I32 lval); */ - -/* PERL_CALLCONV HE * -Perl_hv_fetch_ent(pTHX_ HV *hv, SV *keysv, I32 lval, U32 hash); */ - PERL_CALLCONV STRLEN Perl_hv_fill(pTHX_ HV * const hv); #define PERL_ARGS_ASSERT_HV_FILL \ @@ -1667,9 +1647,6 @@ Perl_hv_iterkeysv(pTHX_ HE *entry) #define PERL_ARGS_ASSERT_HV_ITERKEYSV \ assert(entry) -/* PERL_CALLCONV HE * -Perl_hv_iternext(pTHX_ HV *hv); */ - PERL_CALLCONV HE * Perl_hv_iternext_flags(pTHX_ HV *hv, I32 flags) __attribute__warn_unused_result__; @@ -1693,9 +1670,6 @@ Perl_hv_ksplit(pTHX_ HV *hv, IV newmax); #define PERL_ARGS_ASSERT_HV_KSPLIT \ assert(hv); assert(SvTYPE(hv) == SVt_PVHV) -/* PERL_CALLCONV void -Perl_hv_magic(pTHX_ HV *hv, GV *gv, int how); */ - PERL_CALLCONV void Perl_hv_name_set(pTHX_ HV *hv, const char *name, U32 len, U32 flags); #define PERL_ARGS_ASSERT_HV_NAME_SET \ @@ -1747,19 +1721,10 @@ Perl_hv_scalar(pTHX_ HV *hv) assert(hv); assert(SvTYPE(hv) == SVt_PVHV) /* PERL_CALLCONV SV ** -Perl_hv_store(pTHX_ HV *hv, const char *key, I32 klen, SV *val, U32 hash); */ - -/* PERL_CALLCONV HE * -Perl_hv_store_ent(pTHX_ HV *hv, SV *key, SV *val, U32 hash); */ - -/* PERL_CALLCONV SV ** -Perl_hv_store_flags(pTHX_ HV *hv, const char *key, I32 klen, SV *val, U32 hash, int flags); */ - -/* PERL_CALLCONV SV ** -Perl_hv_stores(pTHX_ HV *hv, const char * const key, SV *val); */ +hv_stores(pTHX_ HV *hv, const char * const key, SV *val); */ /* PERL_CALLCONV void -Perl_hv_undef(pTHX_ HV *hv); */ +hv_undef(pTHX_ HV *hv); */ PERL_CALLCONV void Perl_hv_undef_flags(pTHX_ HV *hv, U32 flags); @@ -2870,10 +2835,6 @@ Perl_newGVgen_flags(pTHX_ const char *pack, U32 flags) #define PERL_ARGS_ASSERT_NEWGVGEN_FLAGS \ assert(pack) -/* PERL_CALLCONV HV * -Perl_newHV(pTHX) - __attribute__warn_unused_result__; */ - PERL_CALLCONV OP * Perl_newHVREF(pTHX_ OP *o) __attribute__warn_unused_result__; @@ -5903,6 +5864,61 @@ Perl_gv_fullname3(pTHX_ SV *sv, const GV *gv, const char *prefix); # define PERL_ARGS_ASSERT_GV_FULLNAME3 \ assert(sv); assert(gv) +PERL_CALLCONV SV * +Perl_hv_delete(pTHX_ HV *hv, const char *key, I32 klen, I32 flags); +# define PERL_ARGS_ASSERT_HV_DELETE \ + assert(key); assert(!hv || SvTYPE(hv) == SVt_PVHV) + +PERL_CALLCONV SV * +Perl_hv_delete_ent(pTHX_ HV *hv, SV *keysv, I32 flags, U32 hash); +# define PERL_ARGS_ASSERT_HV_DELETE_ENT \ + assert(keysv); assert(!hv || SvTYPE(hv) == SVt_PVHV) + +PERL_CALLCONV bool +Perl_hv_exists(pTHX_ HV *hv, const char *key, I32 klen) + __attribute__warn_unused_result__; +# define PERL_ARGS_ASSERT_HV_EXISTS \ + assert(key); assert(!hv || SvTYPE(hv) == SVt_PVHV) + +PERL_CALLCONV bool +Perl_hv_exists_ent(pTHX_ HV *hv, SV *keysv, U32 hash) + __attribute__warn_unused_result__; +# define PERL_ARGS_ASSERT_HV_EXISTS_ENT \ + assert(keysv); assert(!hv || SvTYPE(hv) == SVt_PVHV) + +PERL_CALLCONV SV ** +Perl_hv_fetch(pTHX_ HV *hv, const char *key, I32 klen, I32 lval); +# define PERL_ARGS_ASSERT_HV_FETCH \ + assert(key); assert(!hv || SvTYPE(hv) == SVt_PVHV) + +PERL_CALLCONV HE * +Perl_hv_fetch_ent(pTHX_ HV *hv, SV *keysv, I32 lval, U32 hash); +# define PERL_ARGS_ASSERT_HV_FETCH_ENT \ + assert(keysv); assert(!hv || SvTYPE(hv) == SVt_PVHV) + +PERL_CALLCONV HE * +Perl_hv_iternext(pTHX_ HV *hv) + __attribute__warn_unused_result__; +# define PERL_ARGS_ASSERT_HV_ITERNEXT \ + assert(hv); assert(SvTYPE(hv) == SVt_PVHV) + +PERL_CALLCONV void +Perl_hv_magic(pTHX_ HV *hv, GV *gv, int how); +# define PERL_ARGS_ASSERT_HV_MAGIC \ + assert(hv); assert(SvTYPE(hv) == SVt_PVHV) + +PERL_CALLCONV SV ** +Perl_hv_store(pTHX_ HV *hv, const char *key, I32 klen, SV *val, U32 hash); +# define PERL_ARGS_ASSERT_HV_STORE + +PERL_CALLCONV HE * +Perl_hv_store_ent(pTHX_ HV *hv, SV *key, SV *val, U32 hash); +# define PERL_ARGS_ASSERT_HV_STORE_ENT + +PERL_CALLCONV SV ** +Perl_hv_store_flags(pTHX_ HV *hv, const char *key, I32 klen, SV *val, U32 hash, int flags); +# define PERL_ARGS_ASSERT_HV_STORE_FLAGS + PERL_CALLCONV STRLEN Perl_is_utf8_char_buf(const U8 *buf, const U8 *buf_end); # define PERL_ARGS_ASSERT_IS_UTF8_CHAR_BUF \ @@ -5913,6 +5929,11 @@ Perl_newAV(pTHX) __attribute__warn_unused_result__; # define PERL_ARGS_ASSERT_NEWAV +PERL_CALLCONV HV * +Perl_newHV(pTHX) + __attribute__warn_unused_result__; +# define PERL_ARGS_ASSERT_NEWHV + PERL_CALLCONV IO * Perl_newIO(pTHX) __attribute__warn_unused_result__;