mirror of
https://github.com/micropython/micropython.git
synced 2026-01-05 03:30:14 +01:00
py/obj: Add MICROPY_OBJ_IMMEDIATE_OBJS option to reduce code size.
This option (enabled by default for object representation A, B, C) makes
None/False/True objects immediate objects, ie they are no longer a concrete
object in ROM but are rather just values, eg None=0x6 for representation A.
Doing this saves a considerable amount of code size, due to these objects
being widely used:
bare-arm: -392 -0.591%
minimal x86: -252 -0.170% [incl +52(data)]
unix x64: -624 -0.125% [incl -128(data)]
unix nanbox: +0 +0.000%
stm32: -1940 -0.510% PYBV10
cc3200: -1216 -0.659%
esp8266: -404 -0.062% GENERIC
esp32: -732 -0.064% GENERIC[incl +48(data)]
nrf: -988 -0.675% pca10040
samd: -564 -0.556% ADAFRUIT_ITSYBITSY_M4_EXPRESS
Thanks go to @Jongy aka Yonatan Goldschmidt for the idea.
This commit is contained in:
5
py/obj.c
5
py/obj.c
@@ -46,6 +46,11 @@ const mp_obj_type_t *mp_obj_get_type(mp_const_obj_t o_in) {
|
||||
} else if (mp_obj_is_float(o_in)) {
|
||||
return &mp_type_float;
|
||||
#endif
|
||||
#if MICROPY_OBJ_IMMEDIATE_OBJS
|
||||
} else if (mp_obj_is_immediate_obj(o_in)) {
|
||||
static const mp_obj_type_t *const types[2] = {&mp_type_NoneType, &mp_type_bool};
|
||||
return types[MP_OBJ_IMMEDIATE_OBJ_VALUE(o_in) & 1];
|
||||
#endif
|
||||
} else {
|
||||
const mp_obj_base_t *o = MP_OBJ_TO_PTR(o_in);
|
||||
return o->type;
|
||||
|
||||
Reference in New Issue
Block a user