diff options
author | Sverker Eriksson <[email protected]> | 2017-04-28 14:54:42 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2017-04-28 14:54:42 +0200 |
commit | 61e55780e2800e340e8ff16b5414f08373f89ef3 (patch) | |
tree | c584727c8695ac4c72c4fae9deff18931a8c54d4 /erts/emulator/beam/utils.c | |
parent | 2e2526b58f74c6c3209b3feca34866772be65335 (diff) | |
parent | e40ec046a2a1037b2f87b657503c5f21c5de4e2a (diff) | |
download | otp-61e55780e2800e340e8ff16b5414f08373f89ef3.tar.gz otp-61e55780e2800e340e8ff16b5414f08373f89ef3.tar.bz2 otp-61e55780e2800e340e8ff16b5414f08373f89ef3.zip |
Merge PR1413 from g-andrade/feature/phash2_nif
Support hashing terms from NIF code
Diffstat (limited to 'erts/emulator/beam/utils.c')
-rw-r--r-- | erts/emulator/beam/utils.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/erts/emulator/beam/utils.c b/erts/emulator/beam/utils.c index cdf766b206..96a7bfe8ac 100644 --- a/erts/emulator/beam/utils.c +++ b/erts/emulator/beam/utils.c @@ -1578,13 +1578,13 @@ do { /* Lightweight mixing of constant (type info) */ \ } while (0) Uint32 -make_internal_hash(Eterm term) +make_internal_hash(Eterm term, Uint32 salt) { Uint32 hash; /* Optimization. Simple cases before declaration of estack. */ if (primary_tag(term) == TAG_PRIMARY_IMMED1) { - hash = 0; + hash = salt; #if ERTS_SIZEOF_ETERM == 8 UINT32_HASH_2((Uint32)term, (Uint32)(term >> 32), HCONST); #elif ERTS_SIZEOF_ETERM == 4 @@ -1598,7 +1598,7 @@ make_internal_hash(Eterm term) Eterm tmp; DECLARE_ESTACK(s); - hash = 0; + hash = salt; for (;;) { switch (primary_tag(term)) { case TAG_PRIMARY_LIST: @@ -1874,7 +1874,7 @@ make_internal_hash(Eterm term) goto pop_next; } default: - erts_exit(ERTS_ERROR_EXIT, "Invalid tag in make_hash2(0x%X)\n", term); + erts_exit(ERTS_ERROR_EXIT, "Invalid tag in make_internal_hash(0x%X, %lu)\n", term, salt); } } break; @@ -1887,7 +1887,7 @@ make_internal_hash(Eterm term) goto pop_next; default: - erts_exit(ERTS_ERROR_EXIT, "Invalid tag in make_hash2(0x%X)\n", term); + erts_exit(ERTS_ERROR_EXIT, "Invalid tag in make_internal_hash(0x%X, %lu)\n", term, salt); pop_next: if (ESTACK_ISEMPTY(s)) { |