diff options
author | Björn Gustavsson <[email protected]> | 2019-02-13 08:29:51 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2019-02-14 06:52:26 +0100 |
commit | 0ab6149067a82d89e584f862604c1c63578fd5fa (patch) | |
tree | 32c887276074c1aa758fe655fab8219427e1e81a /erts/emulator/beam | |
parent | 485713afa0d2481e93882bc386aebb06a49c04bc (diff) | |
download | otp-0ab6149067a82d89e584f862604c1c63578fd5fa.tar.gz otp-0ab6149067a82d89e584f862604c1c63578fd5fa.tar.bz2 otp-0ab6149067a82d89e584f862604c1c63578fd5fa.zip |
Add persistent_term:get(Key, DefaultValue)
https://bugs.erlang.org/browse/ERL-843
Diffstat (limited to 'erts/emulator/beam')
-rw-r--r-- | erts/emulator/beam/bif.tab | 1 | ||||
-rw-r--r-- | erts/emulator/beam/erl_bif_persistent.c | 17 |
2 files changed, 18 insertions, 0 deletions
diff --git a/erts/emulator/beam/bif.tab b/erts/emulator/beam/bif.tab index c96278b10c..8419244832 100644 --- a/erts/emulator/beam/bif.tab +++ b/erts/emulator/beam/bif.tab @@ -738,3 +738,4 @@ bif erts_internal:spawn_system_process/3 bif erlang:integer_to_list/2 bif erlang:integer_to_binary/2 +bif persistent_term:get/2 diff --git a/erts/emulator/beam/erl_bif_persistent.c b/erts/emulator/beam/erl_bif_persistent.c index 9dca768a18..5a78a043ce 100644 --- a/erts/emulator/beam/erl_bif_persistent.c +++ b/erts/emulator/beam/erl_bif_persistent.c @@ -332,6 +332,23 @@ BIF_RETTYPE persistent_term_get_1(BIF_ALIST_1) BIF_ERROR(BIF_P, BADARG); } +BIF_RETTYPE persistent_term_get_2(BIF_ALIST_2) +{ + Eterm key = BIF_ARG_1; + Eterm result = BIF_ARG_2; + HashTable* hash_table = (HashTable *) erts_atomic_read_nob(&the_hash_table); + Uint entry_index; + Eterm term; + + entry_index = lookup(hash_table, key); + term = hash_table->term[entry_index]; + if (is_boxed(term)) { + ASSERT(is_tuple_arity(term, 2)); + result = tuple_val(term)[2]; + } + BIF_RET(result); +} + BIF_RETTYPE persistent_term_erase_1(BIF_ALIST_1) { Eterm key = BIF_ARG_1; |