py/qstr: Use const
consistently to avoid a cast.
Originally at adafruit#4707 Signed-off-by: Artyom Skrobov <tyomitch@gmail.com>
This commit is contained in:
parent
18b1ba086c
commit
f46a7140f5
20
py/qstr.c
20
py/qstr.c
@ -122,10 +122,10 @@ void qstr_init(void) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC qstr_pool_t *find_qstr(qstr *q) {
|
STATIC const qstr_pool_t *find_qstr(qstr *q) {
|
||||||
// search pool for this qstr
|
// search pool for this qstr
|
||||||
// total_prev_len==0 in the final pool, so the loop will always terminate
|
// total_prev_len==0 in the final pool, so the loop will always terminate
|
||||||
qstr_pool_t *pool = MP_STATE_VM(last_pool);
|
const qstr_pool_t *pool = MP_STATE_VM(last_pool);
|
||||||
while (*q < pool->total_prev_len) {
|
while (*q < pool->total_prev_len) {
|
||||||
pool = pool->prev;
|
pool = pool->prev;
|
||||||
}
|
}
|
||||||
@ -184,7 +184,7 @@ qstr qstr_find_strn(const char *str, size_t str_len) {
|
|||||||
mp_uint_t str_hash = qstr_compute_hash((const byte *)str, str_len);
|
mp_uint_t str_hash = qstr_compute_hash((const byte *)str, str_len);
|
||||||
|
|
||||||
// search pools for the data
|
// search pools for the data
|
||||||
for (qstr_pool_t *pool = MP_STATE_VM(last_pool); pool != NULL; pool = pool->prev) {
|
for (const qstr_pool_t *pool = MP_STATE_VM(last_pool); pool != NULL; pool = pool->prev) {
|
||||||
for (mp_uint_t at = 0, top = pool->len; at < top; at++) {
|
for (mp_uint_t at = 0, top = pool->len; at < top; at++) {
|
||||||
if (pool->hashes[at] == str_hash && pool->lengths[at] == str_len
|
if (pool->hashes[at] == str_hash && pool->lengths[at] == str_len
|
||||||
&& memcmp(pool->qstrs[at], str, str_len) == 0) {
|
&& memcmp(pool->qstrs[at], str, str_len) == 0) {
|
||||||
@ -264,22 +264,22 @@ qstr qstr_from_strn(const char *str, size_t len) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mp_uint_t qstr_hash(qstr q) {
|
mp_uint_t qstr_hash(qstr q) {
|
||||||
qstr_pool_t *pool = find_qstr(&q);
|
const qstr_pool_t *pool = find_qstr(&q);
|
||||||
return pool->hashes[q];
|
return pool->hashes[q];
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t qstr_len(qstr q) {
|
size_t qstr_len(qstr q) {
|
||||||
qstr_pool_t *pool = find_qstr(&q);
|
const qstr_pool_t *pool = find_qstr(&q);
|
||||||
return pool->lengths[q];
|
return pool->lengths[q];
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *qstr_str(qstr q) {
|
const char *qstr_str(qstr q) {
|
||||||
qstr_pool_t *pool = find_qstr(&q);
|
const qstr_pool_t *pool = find_qstr(&q);
|
||||||
return pool->qstrs[q];
|
return pool->qstrs[q];
|
||||||
}
|
}
|
||||||
|
|
||||||
const byte *qstr_data(qstr q, size_t *len) {
|
const byte *qstr_data(qstr q, size_t *len) {
|
||||||
qstr_pool_t *pool = find_qstr(&q);
|
const qstr_pool_t *pool = find_qstr(&q);
|
||||||
*len = pool->lengths[q];
|
*len = pool->lengths[q];
|
||||||
return (byte *)pool->qstrs[q];
|
return (byte *)pool->qstrs[q];
|
||||||
}
|
}
|
||||||
@ -290,7 +290,7 @@ void qstr_pool_info(size_t *n_pool, size_t *n_qstr, size_t *n_str_data_bytes, si
|
|||||||
*n_qstr = 0;
|
*n_qstr = 0;
|
||||||
*n_str_data_bytes = 0;
|
*n_str_data_bytes = 0;
|
||||||
*n_total_bytes = 0;
|
*n_total_bytes = 0;
|
||||||
for (qstr_pool_t *pool = MP_STATE_VM(last_pool); pool != NULL && pool != &CONST_POOL; pool = pool->prev) {
|
for (const qstr_pool_t *pool = MP_STATE_VM(last_pool); pool != NULL && pool != &CONST_POOL; pool = pool->prev) {
|
||||||
*n_pool += 1;
|
*n_pool += 1;
|
||||||
*n_qstr += pool->len;
|
*n_qstr += pool->len;
|
||||||
for (qstr_len_t *l = pool->lengths, *l_top = pool->lengths + pool->len; l < l_top; l++) {
|
for (qstr_len_t *l = pool->lengths, *l_top = pool->lengths + pool->len; l < l_top; l++) {
|
||||||
@ -310,8 +310,8 @@ void qstr_pool_info(size_t *n_pool, size_t *n_qstr, size_t *n_str_data_bytes, si
|
|||||||
#if MICROPY_PY_MICROPYTHON_MEM_INFO
|
#if MICROPY_PY_MICROPYTHON_MEM_INFO
|
||||||
void qstr_dump_data(void) {
|
void qstr_dump_data(void) {
|
||||||
QSTR_ENTER();
|
QSTR_ENTER();
|
||||||
for (qstr_pool_t *pool = MP_STATE_VM(last_pool); pool != NULL && pool != &CONST_POOL; pool = pool->prev) {
|
for (const qstr_pool_t *pool = MP_STATE_VM(last_pool); pool != NULL && pool != &CONST_POOL; pool = pool->prev) {
|
||||||
for (const char **q = pool->qstrs, **q_top = pool->qstrs + pool->len; q < q_top; q++) {
|
for (const char *const *q = pool->qstrs, *const *q_top = pool->qstrs + pool->len; q < q_top; q++) {
|
||||||
mp_printf(&mp_plat_print, "Q(%s)\n", *q);
|
mp_printf(&mp_plat_print, "Q(%s)\n", *q);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ typedef uint16_t qstr_len_t;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct _qstr_pool_t {
|
typedef struct _qstr_pool_t {
|
||||||
struct _qstr_pool_t *prev;
|
const struct _qstr_pool_t *prev;
|
||||||
size_t total_prev_len;
|
size_t total_prev_len;
|
||||||
size_t alloc;
|
size_t alloc;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
@ -883,7 +883,7 @@ def freeze_mpy(base_qstrs, raw_codes):
|
|||||||
print()
|
print()
|
||||||
print("extern const qstr_pool_t mp_qstr_const_pool;")
|
print("extern const qstr_pool_t mp_qstr_const_pool;")
|
||||||
print("const qstr_pool_t mp_qstr_frozen_const_pool = {")
|
print("const qstr_pool_t mp_qstr_frozen_const_pool = {")
|
||||||
print(" (qstr_pool_t*)&mp_qstr_const_pool, // previous pool")
|
print(" &mp_qstr_const_pool, // previous pool")
|
||||||
print(" MP_QSTRnumber_of, // previous pool size")
|
print(" MP_QSTRnumber_of, // previous pool size")
|
||||||
print(" %u, // allocated entries" % qstr_pool_alloc)
|
print(" %u, // allocated entries" % qstr_pool_alloc)
|
||||||
print(" %u, // used entries" % len(new))
|
print(" %u, // used entries" % len(new))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user