diff options
author | Michał Muskała <[email protected]> | 2018-07-17 18:38:10 +0200 |
---|---|---|
committer | Michał Muskała <[email protected]> | 2018-07-17 19:30:49 +0200 |
commit | 0916c5c6e536affca1f6f0c7693d68fb64843c1c (patch) | |
tree | 1323d1656dc8770e8b9e24f997e323f77720022e /erts/emulator/beam/erl_map.c | |
parent | 0e9c319480d9cfb778b654bf2cd71e7bd31464f9 (diff) | |
download | otp-0916c5c6e536affca1f6f0c7693d68fb64843c1c.tar.gz otp-0916c5c6e536affca1f6f0c7693d68fb64843c1c.tar.bz2 otp-0916c5c6e536affca1f6f0c7693d68fb64843c1c.zip |
maps:new/0 is no longer a BIF
Implementing it in Erlang allows taking advantage of the literal pool
optimisation, this means the function implemented in Erlang does no
allocations, while the BIF had to allocate new map each time it was
called. Benchmarks show the function is also slightly faster now.
Diffstat (limited to 'erts/emulator/beam/erl_map.c')
-rw-r--r-- | erts/emulator/beam/erl_map.c | 19 |
1 files changed, 0 insertions, 19 deletions
diff --git a/erts/emulator/beam/erl_map.c b/erts/emulator/beam/erl_map.c index cba17d3e6a..4a1fe4470e 100644 --- a/erts/emulator/beam/erl_map.c +++ b/erts/emulator/beam/erl_map.c @@ -1505,25 +1505,6 @@ int hashmap_key_hash_cmp(Eterm* ap, Eterm* bp) return ap ? -1 : 1; } -/* maps:new/0 */ - -BIF_RETTYPE maps_new_0(BIF_ALIST_0) { - Eterm* hp; - Eterm tup; - flatmap_t *mp; - - hp = HAlloc(BIF_P, (MAP_HEADER_FLATMAP_SZ + 1)); - tup = make_tuple(hp); - *hp++ = make_arityval(0); - - mp = (flatmap_t*)hp; - mp->thing_word = MAP_HEADER_FLATMAP; - mp->size = 0; - mp->keys = tup; - - BIF_RET(make_flatmap(mp)); -} - /* maps:put/3 */ BIF_RETTYPE maps_put_3(BIF_ALIST_3) { |