Revert "Move Perl_hv_* mathoms functions to macros in hv.h"

This reverts commit a8530b8814e6298c258ed2b0c4fa287b54c30cb6.
This commit is contained in:
Karl Williamson 2025-04-19 17:03:38 -06:00 committed by Karl Williamson
parent 4c1301f434
commit a7fa6fe549
5 changed files with 239 additions and 93 deletions

View File

@ -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

14
embed.h
View File

@ -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)

48
hv.h
View File

@ -513,9 +513,9 @@ whether it is valid to call C<HvAUX()>.
/* 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<HvAUX()>.
->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<HvAUX()>.
#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"

139
mathoms.c
View File

@ -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)

103
proto.h generated
View File

@ -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__;