summaryrefslogtreecommitdiff
path: root/py/qstr.c
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2022-08-11 16:34:02 +1000
committerDamien George <damien@micropython.org>2022-08-11 23:18:02 +1000
commit82b3500724206f2baa342a3559bbe716e9819426 (patch)
tree45e04bb190754e77871ff645acce5c2b28a47420 /py/qstr.c
parent94a19f10628f9c3a9978daae9f6f4c7ac352e9a2 (diff)
py/qstr: Change qstr hash type from mp_uint_t to size_t.
The hash is either 8 or 16 bits (depending on MICROPY_QSTR_BYTES_IN_HASH) so will fit in a size_t. This saves 268 bytes on the unix nanbox build. Non-nanbox configurations are unchanged because mp_uint_t is the same size as size_t. Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'py/qstr.c')
-rw-r--r--py/qstr.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/py/qstr.c b/py/qstr.c
index f9ca10683..ea700566f 100644
--- a/py/qstr.c
+++ b/py/qstr.c
@@ -60,9 +60,9 @@
#define MICROPY_ALLOC_QSTR_ENTRIES_INIT (10)
// this must match the equivalent function in makeqstrdata.py
-mp_uint_t qstr_compute_hash(const byte *data, size_t len) {
+size_t qstr_compute_hash(const byte *data, size_t len) {
// djb2 algorithm; see http://www.cse.yorku.ca/~oz/hash.html
- mp_uint_t hash = 5381;
+ size_t hash = 5381;
for (const byte *top = data + len; data < top; data++) {
hash = ((hash << 5) + hash) ^ (*data); // hash * 33 ^ data
}
@@ -181,7 +181,7 @@ STATIC qstr qstr_add(mp_uint_t hash, mp_uint_t len, const char *q_ptr) {
qstr qstr_find_strn(const char *str, size_t str_len) {
// work out hash of str
- mp_uint_t str_hash = qstr_compute_hash((const byte *)str, str_len);
+ size_t str_hash = qstr_compute_hash((const byte *)str, str_len);
// search pools for the data
for (const qstr_pool_t *pool = MP_STATE_VM(last_pool); pool != NULL; pool = pool->prev) {
@@ -254,7 +254,7 @@ qstr qstr_from_strn(const char *str, size_t len) {
MP_STATE_VM(qstr_last_used) += n_bytes;
// store the interned strings' data
- mp_uint_t hash = qstr_compute_hash((const byte *)str, len);
+ size_t hash = qstr_compute_hash((const byte *)str, len);
memcpy(q_ptr, str, len);
q_ptr[len] = '\0';
q = qstr_add(hash, len, q_ptr);