kopia lustrzana https://github.com/micropython/micropython
py/qstr: Add qstr_from_strn_static.
Signed-off-by: Damien George <damien@micropython.org>pull/8381/head
rodzic
fbcb45ba0b
commit
3e78b1fdd9
20
py/qstr.c
20
py/qstr.c
|
@ -309,7 +309,7 @@ qstr qstr_from_str(const char *str) {
|
|||
return qstr_from_strn(str, strlen(str));
|
||||
}
|
||||
|
||||
qstr qstr_from_strn(const char *str, size_t len) {
|
||||
static qstr qstr_from_strn_helper(const char *str, size_t len, bool is_static) {
|
||||
QSTR_ENTER();
|
||||
qstr q = qstr_find_strn(str, len);
|
||||
if (q == 0) {
|
||||
|
@ -321,6 +321,11 @@ qstr qstr_from_strn(const char *str, size_t len) {
|
|||
mp_raise_msg(&mp_type_RuntimeError, MP_ERROR_TEXT("name too long"));
|
||||
}
|
||||
|
||||
if (is_static) {
|
||||
assert(str[len] == '\0');
|
||||
goto add;
|
||||
}
|
||||
|
||||
// compute number of bytes needed to intern this string
|
||||
size_t n_bytes = len + 1;
|
||||
|
||||
|
@ -364,12 +369,23 @@ qstr qstr_from_strn(const char *str, size_t len) {
|
|||
// store the interned strings' data
|
||||
memcpy(q_ptr, str, len);
|
||||
q_ptr[len] = '\0';
|
||||
q = qstr_add(len, q_ptr);
|
||||
str = q_ptr;
|
||||
|
||||
add:
|
||||
q = qstr_add(len, str);
|
||||
}
|
||||
QSTR_EXIT();
|
||||
return q;
|
||||
}
|
||||
|
||||
qstr qstr_from_strn(const char *str, size_t len) {
|
||||
return qstr_from_strn_helper(str, len, false);
|
||||
}
|
||||
|
||||
qstr qstr_from_strn_static(const char *str, size_t len) {
|
||||
return qstr_from_strn_helper(str, len, true);
|
||||
}
|
||||
|
||||
mp_uint_t qstr_hash(qstr q) {
|
||||
const qstr_pool_t *pool = find_qstr(&q);
|
||||
#if MICROPY_QSTR_BYTES_IN_HASH
|
||||
|
|
|
@ -101,6 +101,7 @@ qstr qstr_find_strn(const char *str, size_t str_len); // returns MP_QSTRnull if
|
|||
|
||||
qstr qstr_from_str(const char *str);
|
||||
qstr qstr_from_strn(const char *str, size_t len);
|
||||
qstr qstr_from_strn_static(const char *str, size_t len);
|
||||
|
||||
mp_uint_t qstr_hash(qstr q);
|
||||
const char *qstr_str(qstr q);
|
||||
|
|
Ładowanie…
Reference in New Issue