obj.h: Make mp_obj_is_type work between full & non-full types
By comparing the address of the initial 'name' field instead of the addresses of the objects themselves, a small amount of type safety is added back, vs just casting to void. In the event that some other kind of object is passed in as 't', which happens to have a 'name' field of the right type, the construct would be (undesirably) accepted but it would almost certainly evaluate to false at runtime.
This commit is contained in:
parent
f2878320af
commit
2997113e73
2
py/obj.h
2
py/obj.h
@ -823,7 +823,7 @@ extern const struct _mp_obj_exception_t mp_const_GeneratorExit_obj;
|
||||
// check for more specific object types.
|
||||
// Note: these are kept as macros because inline functions sometimes use much
|
||||
// more code space than the equivalent macros, depending on the compiler.
|
||||
#define mp_obj_is_type(o, t) (mp_obj_is_obj(o) && (((mp_obj_base_t *)MP_OBJ_TO_PTR(o))->type == (t))) // this does not work for checking int, str or fun; use below macros for that
|
||||
#define mp_obj_is_type(o, t) (mp_obj_is_obj(o) && (&(((mp_obj_base_t *)MP_OBJ_TO_PTR(o))->type->name) == &((t)->name))) // this does not work for checking int, str or fun; use below macros for that
|
||||
#if MICROPY_OBJ_IMMEDIATE_OBJS
|
||||
// bool's are immediates, not real objects, so test for the 2 possible values.
|
||||
#define mp_obj_is_bool(o) ((o) == mp_const_false || (o) == mp_const_true)
|
||||
|
Loading…
x
Reference in New Issue
Block a user