← index #7638PR #5917
Related · high · value 2.121
QUERY · ISSUE

Conversion from const char* to mp_rom_error_text_t ?

openby iabdalkaderopened 2021-08-11updated 2021-08-11
py-core

The compiler can't evaluate the strcmp tree generated by MP_ERROR_TEXT(x) at compile time if x is determined at runtime (for example a call to an old style xxx_strerror function):

mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT(ffs_strerror(res)));

This results in a copy of the tree for every invocation of MP_ERROR_TEXT, so the return result can't be compressed and must be cast to mp_rom_error_text_t instead. This should be safe for now, but will it change in the future ? And if so, shouldn't there be a function or macro to hide this conversion since all exceptions formally accept mp_rom_error_text_t arg ? Something like:

#define MP_ERROR_TEXT_FROM_STR(x) (mp_rom_error_text_t) x
CANDIDATE · PULL REQUEST

py/misc.h: Always provide no-op defines without ROM_TEXT_COMPRESSION.

mergedby dpgeorgeopened 2020-04-13updated 2020-04-14
py-core

This provides a typedef for mp_rom_error_text_t, and a macro define for MP_COMPRESSED_ROM_TEXT, when MICROPY_ROM_TEXT_COMPRESSION is disabled. This simplifies the configuration (it no longer has a special case for MICROPY_ENABLE_DYNRUNTIME) and makes it work for other cases that don't use compression (eg examples/embedding).

Related to #5909

Keyboard

j / / n
next pair
k / / p
previous pair
1 / / h
show query pane
2 / / l
show candidate pane
c
copy suggested comment
r
toggle reasoning
g i
go to index
?
show this help
esc
close overlays

press ? or esc to close

copied