mirror of
https://github.com/micropython/micropython.git
synced 2026-01-06 04:00:28 +01:00
py/objstr: Optimise mp_obj_new_str_from_vstr for known-safe strings.
The new `mp_obj_new_str_from_utf8_vstr` can be used when you know you already have a unicode-safe string. Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
This commit is contained in:
committed by
Damien George
parent
88864587f5
commit
3a910b1565
@@ -467,7 +467,7 @@ STATIC mp_obj_t mp_builtin_repr(mp_obj_t o_in) {
|
||||
mp_print_t print;
|
||||
vstr_init_print(&vstr, 16, &print);
|
||||
mp_obj_print_helper(&print, o_in, PRINT_REPR);
|
||||
return mp_obj_new_str_from_vstr(&vstr);
|
||||
return mp_obj_new_str_from_utf8_vstr(&vstr);
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_repr_obj, mp_builtin_repr);
|
||||
|
||||
|
||||
5
py/obj.h
5
py/obj.h
@@ -792,6 +792,11 @@ mp_obj_t mp_obj_new_int_from_ull(unsigned long long val); // this must return a
|
||||
mp_obj_t mp_obj_new_str(const char *data, size_t len);
|
||||
mp_obj_t mp_obj_new_str_via_qstr(const char *data, size_t len);
|
||||
mp_obj_t mp_obj_new_str_from_vstr(vstr_t *vstr);
|
||||
#if MICROPY_PY_BUILTINS_STR_UNICODE && MICROPY_PY_BUILTINS_STR_UNICODE_CHECK
|
||||
mp_obj_t mp_obj_new_str_from_utf8_vstr(vstr_t *vstr); // only use when vstr is already known to be utf-8 encoded
|
||||
#else
|
||||
#define mp_obj_new_str_from_utf8_vstr mp_obj_new_str_from_vstr
|
||||
#endif
|
||||
mp_obj_t mp_obj_new_bytes_from_vstr(vstr_t *vstr);
|
||||
mp_obj_t mp_obj_new_bytes(const byte *data, size_t len);
|
||||
mp_obj_t mp_obj_new_bytearray(size_t n, const void *items);
|
||||
|
||||
@@ -2256,6 +2256,13 @@ mp_obj_t mp_obj_new_str_from_vstr(vstr_t *vstr) {
|
||||
return mp_obj_new_str_type_from_vstr(&mp_type_str, vstr);
|
||||
}
|
||||
|
||||
#if MICROPY_PY_BUILTINS_STR_UNICODE && MICROPY_PY_BUILTINS_STR_UNICODE_CHECK
|
||||
mp_obj_t mp_obj_new_str_from_utf8_vstr(vstr_t *vstr) {
|
||||
// bypasses utf8_check.
|
||||
return mp_obj_new_str_type_from_vstr(&mp_type_str, vstr);
|
||||
}
|
||||
#endif // MICROPY_PY_BUILTINS_STR_UNICODE && MICROPY_PY_BUILTINS_STR_UNICODE_CHECK
|
||||
|
||||
mp_obj_t mp_obj_new_bytes_from_vstr(vstr_t *vstr) {
|
||||
return mp_obj_new_str_type_from_vstr(&mp_type_bytes, vstr);
|
||||
}
|
||||
|
||||
@@ -160,7 +160,7 @@ value_error:
|
||||
mp_printf(&print, "invalid syntax for integer with base %d: ", base);
|
||||
mp_str_print_quoted(&print, str_val_start, top - str_val_start, true);
|
||||
mp_obj_t exc = mp_obj_new_exception_arg1(&mp_type_ValueError,
|
||||
mp_obj_new_str_from_vstr(&vstr));
|
||||
mp_obj_new_str_from_utf8_vstr(&vstr));
|
||||
raise_exc(exc, lex);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -203,7 +203,7 @@ STATIC mp_obj_t load_obj(mp_reader_t *reader) {
|
||||
if (obj_type == MP_PERSISTENT_OBJ_STR || obj_type == MP_PERSISTENT_OBJ_BYTES) {
|
||||
read_byte(reader); // skip null terminator
|
||||
if (obj_type == MP_PERSISTENT_OBJ_STR) {
|
||||
return mp_obj_new_str_from_vstr(&vstr);
|
||||
return mp_obj_new_str_from_utf8_vstr(&vstr);
|
||||
} else {
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user