Skip to content

Commit

Permalink
Move Perl_hv_* mathoms functions to macros in hv.h
Browse files Browse the repository at this point in the history
  • Loading branch information
khwilliamson committed Nov 17, 2024
1 parent c4c27bf commit a8530b8
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 239 deletions.
28 changes: 14 additions & 14 deletions embed.fnc
Original file line number Diff line number Diff line change
Expand Up @@ -1490,11 +1490,11 @@ ARdp |HV * |hv_copy_hints_hv \
Cp |void |hv_delayfree_ent \
|NULLOK HV *notused \
|NULLOK HE *entry
AMbdp |SV * |hv_delete |NULLOK HV *hv \
Admp |SV * |hv_delete |NULLOK HV *hv \
|NN const char *key \
|I32 klen \
|I32 flags
AMbdp |SV * |hv_delete_ent |NULLOK HV *hv \
Admp |SV * |hv_delete_ent |NULLOK HV *hv \
|NN SV *keysv \
|I32 flags \
|U32 hash
Expand All @@ -1510,17 +1510,17 @@ dp |void |hv_ename_delete|NN HV *hv \
|NN const char *name \
|U32 len \
|U32 flags
AMRbdp |bool |hv_exists |NULLOK HV *hv \
ARdmp |bool |hv_exists |NULLOK HV *hv \
|NN const char *key \
|I32 klen
AMRbdp |bool |hv_exists_ent |NULLOK HV *hv \
ARdmp |bool |hv_exists_ent |NULLOK HV *hv \
|NN SV *keysv \
|U32 hash
AMbdp |SV ** |hv_fetch |NULLOK HV *hv \
Admp |SV ** |hv_fetch |NULLOK HV *hv \
|NN const char *key \
|I32 klen \
|I32 lval
AMbdp |HE * |hv_fetch_ent |NULLOK HV *hv \
Admp |HE * |hv_fetch_ent |NULLOK HV *hv \
|NN SV *keysv \
|I32 lval \
|U32 hash
Expand All @@ -1531,7 +1531,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
AMRbdp |HE * |hv_iternext |NN HV *hv
Admp |HE * |hv_iternext |NN HV *hv
ARdpx |HE * |hv_iternext_flags \
|NN HV *hv \
|I32 flags
Expand All @@ -1542,7 +1542,7 @@ ARdp |SV * |hv_iterval |NN HV *hv \
|NN HE *entry
Adp |void |hv_ksplit |NN HV *hv \
|IV newmax
AMbdp |void |hv_magic |NN HV *hv \
Admp |void |hv_magic |NN HV *hv \
|NULLOK GV *gv \
|int how
Adp |void |hv_name_set |NN HV *hv \
Expand All @@ -1565,25 +1565,25 @@ Cdop |void |hv_riter_set |NN HV *hv \
|I32 riter

ARdp |SV * |hv_scalar |NN HV *hv
AMbdp |SV ** |hv_store |NULLOK HV *hv \
Admp |SV ** |hv_store |NULLOK HV *hv \
|NULLOK const char *key \
|I32 klen \
|NULLOK SV *val \
|U32 hash
AMbdp |HE * |hv_store_ent |NULLOK HV *hv \
Admp |HE * |hv_store_ent |NULLOK HV *hv \
|NULLOK SV *key \
|NULLOK SV *val \
|U32 hash
AMbpx |SV ** |hv_store_flags |NULLOK HV *hv \
Ampx |SV ** |hv_store_flags |NULLOK HV *hv \
|NULLOK const char *key \
|I32 klen \
|NULLOK SV *val \
|U32 hash \
|int flags
Adm |SV ** |hv_stores |NULLOK HV *hv \
Admp |SV ** |hv_stores |NULLOK HV *hv \
|"key" \
|NULLOK SV *val
Adm |void |hv_undef |NULLOK HV *hv
Admp |void |hv_undef |NULLOK HV *hv
Xop |void |hv_undef_flags |NULLOK HV *hv \
|U32 flags
APdm |I32 |ibcmp |NN const char *a \
Expand Down Expand Up @@ -2206,7 +2206,7 @@ ARdp |OP * |newGVOP |I32 type \
|NN GV *gv
ARdp |OP * |newGVREF |I32 type \
|NULLOK OP *o
AMRbdp |HV * |newHV
ARdmp |HV * |newHV
ARdp |HV * |newHVhv |NULLOK HV *hv
ARdp |OP * |newHVREF |NN OP *o
AMRbdp |IO * |newIO
Expand Down
14 changes: 14 additions & 0 deletions embed.h
Original file line number Diff line number Diff line change
Expand Up @@ -292,18 +292,31 @@
# 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)
Expand Down Expand Up @@ -400,6 +413,7 @@
# 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)
Expand Down
48 changes: 24 additions & 24 deletions hv.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 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_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 Perl_sharepvn(pv, len, hash) HEK_KEY(share_hek(pv, len, hash))
#define sharepvn(pv, len, hash) Perl_sharepvn(pv, len, hash)
Expand All @@ -527,41 +527,41 @@ whether it is valid to call C<HvAUX()>.
->shared_he_he.he_valu.hent_refcount), \
hek)

#define hv_store_ent(hv, keysv, val, hash) \
((HE *) hv_common((hv), (keysv), NULL, 0, 0, HV_FETCH_ISSTORE, \
#define Perl_hv_store_ent(mTHX, hv, keysv, val, hash) \
((HE *) Perl_hv_common(aTHX_ (hv), (keysv), NULL, 0, 0, HV_FETCH_ISSTORE, \
(val), (hash)))

#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, \
#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, \
((lval) ? HV_FETCH_LVALUE : 0), NULL, (hash)))
#define hv_delete_ent(hv, key, flags, hash) \
(MUTABLE_SV(hv_common((hv), (key), NULL, 0, 0, (flags) | HV_DELETE, \
#define Perl_hv_delete_ent(mTHX, hv, key, flags, hash) \
(MUTABLE_SV(Perl_hv_common(aTHX_ (hv), (key), NULL, 0, 0, (flags) | HV_DELETE, \
NULL, (hash))))

#define hv_store_flags(hv, key, klen, val, hash, flags) \
((SV**) hv_common((hv), NULL, (key), (klen), (flags), \
#define Perl_hv_store_flags(mTHX, hv, key, klen, val, hash, flags) \
((SV**) Perl_hv_common(aTHX_ (hv), NULL, (key), (klen), (flags), \
(HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), (val), \
(hash)))

#define hv_store(hv, key, klen, val, hash) \
((SV**) hv_common_key_len((hv), (key), (klen), \
#define Perl_hv_store(mTHX, hv, key, klen, val, hash) \
((SV**) Perl_hv_common_key_len(aTHX_ (hv), (key), (klen), \
(HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), \
(val), (hash)))



#define hv_exists(hv, key, klen) \
cBOOL(hv_common_key_len((hv), (key), (klen), HV_FETCH_ISEXISTS, NULL, 0))
#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_fetch(hv, key, klen, lval) \
((SV**) hv_common_key_len((hv), (key), (klen), (lval) \
#define Perl_hv_fetch(mTHX, hv, key, klen, lval) \
((SV**) Perl_hv_common_key_len(aTHX_ (hv), (key), (klen), (lval) \
? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) \
: HV_FETCH_JUST_SV, NULL, 0))

#define hv_delete(hv, key, klen, flags) \
(MUTABLE_SV(hv_common_key_len((hv), (key), (klen), \
#define Perl_hv_delete(mTHX, hv, key, klen, flags) \
(MUTABLE_SV(Perl_hv_common_key_len(aTHX_ (hv), (key), (klen), \
(flags) | HV_DELETE, NULL, 0)))

/* Provide 's' suffix subs for constant strings (and avoid needing to count
Expand Down Expand Up @@ -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 hv_stores(hv, key, val) \
hv_store((hv), ASSERT_IS_LITERAL(key), (sizeof(key)-1), (val), 0)
#define Perl_hv_stores(mTHX, hv, key, val) \
Perl_hv_store(aTHX, (hv), ASSERT_IS_LITERAL(key), (sizeof(key)-1), (val), 0)

#ifdef PERL_CORE
# define hv_storehek(hv, hek, val) \
Expand Down Expand Up @@ -731,7 +731,7 @@ Creates a new HV. The reference count is set to 1.
=cut
*/

#define newHV() MUTABLE_HV(newSV_type(SVt_PVHV))
#define Perl_newHV(mTHX) MUTABLE_HV(Perl_newSV_type(aTHX_ SVt_PVHV))

#include "hv_func.h"

Expand Down
139 changes: 0 additions & 139 deletions mathoms.c
Original file line number Diff line number Diff line change
Expand Up @@ -401,22 +401,6 @@ 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)
Expand Down Expand Up @@ -499,120 +483,6 @@ 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)
{
Expand All @@ -623,15 +493,6 @@ 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)
Expand Down
Loading

0 comments on commit a8530b8

Please sign in to comment.