8000 py/obj.h: Add split mp_obj_type_t representation. · micropython/micropython@15470a0 · GitHub
[go: up one dir, main page]

Skip to content

Commit 15470a0

Browse files
committed
py/obj.h: Add split mp_obj_type_t representation.
1 parent 5ee9bd3 commit 15470a0

File tree

3 files changed

+79
-0
lines changed

3 files changed

+79
-0
lines changed

py/mpconfig.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@
147147

148148
#define MICROPY_OBJ_TYPE_REPR_FULL (0)
149149
#define MICROPY_OBJ_TYPE_REPR_SLOT_INDEX (1)
150+
#define MICROPY_OBJ_TYPE_REPR_SPLIT (2)
150151

151152
#ifndef MICROPY_OBJ_TYPE_REPR
152153
#define MICROPY_OBJ_TYPE_REPR (MICROPY_OBJ_TYPE_REPR_FULL)

py/obj.h

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,19 @@ typedef mp_int_t (*mp_buffer_fun_t)(mp_obj_t obj, mp_buffer_info_t *bufinfo, mp_
552552
bool mp_get_buffer(mp_obj_t obj, mp_buffer_info_t *bufinfo, mp_uint_t flags);
553553
void mp_get_buffer_raise(mp_obj_t obj, mp_buffer_info_t *bufinfo, mp_uint_t flags);
554554

555+
#if MICROPY_OBJ_TYPE_REPR == MICROPY_OBJ_TYPE_REPR_SPLIT
556+
struct _mp_obj_type_ext_t {
557+
mp_call_fun_t call;
558+
mp_unary_op_fun_t unary_op;
559+
mp_subscr_fun_t subscr;
560+
mp_getiter_fun_t getiter;
561+
mp_fun_1_t iternext;
562+
mp_buffer_fun_t buffer;
563+
const void *protocol;
564+
mp_binary_op_fun_t binary_op;
565+
};
566+
#endif
567+
555568
struct _mp_obj_type_t {
556569
// A type is an object so must start with this entry, which points to mp_type_type.
557570
mp_obj_base_t base;
@@ -639,6 +652,15 @@ struct _mp_obj_type_t {
639652

640653
const void *slots[];
641654

655+
#elif MICROPY_OBJ_TYPE_REPR == MICROPY_OBJ_TYPE_REPR_SPLIT
656+
657+
mp_print_fun_t print;
658+
mp_attr_fun_t attr;
659+
const void *parent;
660+
struct _mp_obj_dict_t *locals_dict;
661+
662+
struct _mp_obj_type_ext_t ext[];
663+
642664
#endif
643665
};
644666

@@ -708,6 +730,58 @@ struct _mp_obj_type_t {
708730
#define MP_OBJ_TYPE_SET_SLOT(t, f, v, n) ((t)->slot_index_##f = n, (t)->slots[(t)->slot_index_##f - 1] = (void *)v)
709731
#define MP_OBJ_TYPE_OFFSETOF_SLOT(t, f) (offsetof(mp_obj_type_t, slots) + (t)->slot_index_##f * sizeof(void *))
710732

733+
#elif MICROPY_OBJ_TYPE_REPR == MICROPY_OBJ_TYPE_REPR_SPLIT
734+
735+
#define MICROPY_OBJ_TYPE_EXTRA_ALLOC (sizeof(struct _mp_obj_type_ext_t))
736+
737+
#define MP_OBJ_TYPE_FLAG_EXTENDED (0x0080)
738+
739+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_print (0)
740+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_call (1)
741+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_unary_op (1)
742+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_binary_op (1)
743+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_attr (0)
744+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_subscr (1)
745+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_getiter (1)
746+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_iternext (1)
747+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_buffer (1)
748+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_protocol (1)
749+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_parent (0)
750+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_locals_dict (0)
751+
752+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_print print
753+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_call ext[0].call
754+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_unary_op ext[0].unary_op
755+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_binary_op ext[0].binary_op
756+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_attr attr
757+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_subscr ext[0].subscr
758+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_getiter ext[0].getiter
759+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_iternext ext[0].iternext
760+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_buffer ext[0].buffer
761+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_protocol ext[0].protocol
762+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_parent parent
763+
#define _MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_locals_dict locals_dict
764+
765+
#define _MP_DEFINE_CONST_OBJ_TYPE_0(_typename, _name, _flags, _make_new) const mp_obj_type_t _typename = { .base = { &mp_type_type }, .name = _name, .flags = _flags, .make_new = _make_new }
766+
#define _MP_DEFINE_CONST_OBJ_TYPE_1(_typename, _name, _flags, _make_new, f1, v1) const mp_obj_type_t _typename = { .base = { &mp_type_type }, .name = _name, .flags = _flags | (_MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f1)*MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f1 = v1 }
767+
#define _MP_DEFINE_CONST_OBJ_TYPE_2(_typename, _name, _flags, _make_new, f1, v1, f2, v2) const mp_obj_type_t _typename = { .base = { &mp_type_type }, .name = _name, .flags = _flags | (_MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f1 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f2) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f1 = v1, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f2 = v2 }
768+
#define _MP_DEFINE_CONST_OBJ_TYPE_3(_typename, _name, _flags, _make_new, f1, v1, f2, v2, f3, v3) const mp_obj_type_t _typename = { .base = { &mp_type_type }, .name = _name, .flags = _flags | (_MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f1 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f2 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f3) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f1 = v1, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f2 = v2, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f3 = v3 }
769+
#define _MP_DEFINE_CONST_OBJ_TYPE_4(_typename, _name, _flags, _make_new, f1, v1, f2, v2, f3, v3, f4, v4) const mp_obj_type_t _typename = { .base = { &mp_type_type }, .name = _name, .flags = _flags | (_MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f1 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f2 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f3 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f4) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f1 = v1, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f2 = v2, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f3 = v3, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f4 = v4 }
770+
#define _MP_DEFINE_CONST_OBJ_TYPE_5(_typename, _name, _flags, _make_new, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5) const mp_obj_type_t _typename = { .base = { &mp_type_type }, .name = _name, .flags = _flags | (_MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f1 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f2 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f3 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f4 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f5) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f1 = v1, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f2 = v2, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f3 = v3, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f4 = v4, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f5 = v5 }
771+
#define _MP_DEFINE_CONST_OBJ_TYPE_6(_typename, _name, _flags, _make_new, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6) const mp_obj_type_t _typename = { .base = { &mp_type_type }, .name = _name, .flags = _flags | (_MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f1 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f2 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f3 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f4 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f5 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f6) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f1 = v1, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f2 = v2, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f3 = v3, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f4 = v4, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f5 = v5, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f6 = v6 }
772+
#define _MP_DEFINE_CONST_OBJ_TYPE_7(_typename, _name, _flags, _make_new, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6, f7, v7) const mp_obj_type_t _typename = { .base = { &mp_type_type }, .name = _name, .flags = _flags | (_MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f1 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f2 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f3 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f4 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f5 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f6 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f7) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f1 = v1, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f2 = v2, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f3 = v3, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f4 = v4, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f5 = v5, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f6 = v6, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f7 = v7 }
773+
#define _MP_DEFINE_CONST_OBJ_TYPE_8(_typename, _name, _flags, _make_new, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6, f7, v7, f8, v8) const mp_obj_type_t _typename = { .base = { &mp_type_type }, .name = _name, .flags = _flags | (_MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f1 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f2 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f3 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f4 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f5 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f6 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f7 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f8) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f1 = v1, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f2 = v2, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f3 = v3, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f4 = v4, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f5 = v5, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f6 = v6, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f7 = v7, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f8 = v8 }
774+
#define _MP_DEFINE_CONST_OBJ_TYPE_9(_typename, _name, _flags, _make_new, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6, f7, v7, f8, v8, f9, v9) const mp_obj_type_t _typename = { .base = { &mp_type_type }, .name = _name, .flags = _flags | (_MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f1 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f2 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f3 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f4 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f5 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f6 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f7 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f8 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f9) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f1 = v1, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f2 = v2, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f3 = v3, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f4 = v4, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f5 = v5, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f6 = v6, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f7 = v7, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f8 = v8, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f9 = v9 }
775+
#define _MP_DEFINE_CONST_OBJ_TYPE_10(_typename, _name, _flags, _make_new, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6, f7, v7, f8, v8, f9, v9, f10, v10) const mp_obj_type_t _typename = { .base = { &mp_type_type }, .name = _name, .flags = _flags | (_MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f1 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f2 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f3 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f4 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f5 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f6 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f7 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f8 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f9 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f10) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f1 = v1, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f2 = v2, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f3 = v3, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f4 = v4, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f5 = v5, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f6 = v6, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f7 = v7, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f8 = v8, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f9 = v9, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f10 = v10 }
776+
#define _MP_DEFINE_CONST_OBJ_TYPE_11(_typename, _name, _flags, _make_new, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6, f7, v7, f8, v8, f9, v9, f10, v10, f11, v11) const mp_obj_type_t _typename = { .base = { &mp_type_type }, .name = _name, .flags = _flags | (_MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f1 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f2 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f3 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f4 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f5 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f6 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f7 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f8 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f9 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f10 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f11) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f1 = v1, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f2 = v2, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f3 = v3, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f4 = v4, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f5 = v5, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f6 = v6, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f7 = v7, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f8 = v8, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f9 = v9, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f10 = v10, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f11 = v11 }
777+
#define _MP_DEFINE_CONST_OBJ_TYPE_12(_typename, _name, _flags, _make_new, f1, v1, f2, v2, f3, v3, f4, v4, f5, v5, f6, v6, f7, v7, f8, v8, f9, v9, f10, v10, f11, v11, f12, v12) const mp_obj_type_t _typename = { .base = { &mp_type_type }, .name = _name, .flags = _flags | (_MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f1 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f2 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f3 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f4 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f5 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f6 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f7 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f8 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f9 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f10 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f11 | _MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f12) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f1 = v1, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f2 = v2, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f3 = v3, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f4 = v4, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f5 = v5, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f6 = v6, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f7 = v7, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f8 = v8, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f9 = v9, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f10 = v10, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f11 = v11, ._MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f12 = v12 }
778+
779+
#define MP_OBJ_TYPE_HAS_SLOT(t, f) (_MP_DEFINE_CONST_OBJ_TYPE_SLOT_IS_EXT_##f ? (((t)->flags & MP_OBJ_TYPE_FLAG_EXTENDED) ? (t)->_MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f : 0) : (t)->_MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f)
780+
#define MP_OBJ_TYPE_GET_SLOT(t, f) ((t)->_MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f)
781+
#define MP_OBJ_TYPE_GET_SLOT_OR_NULL(t, f) ((MP_OBJ_TYPE_HAS_SLOT(t, f) ? MP_OBJ_TYPE_GET_SLOT(t, f) : NULL))
782+
#define MP_OBJ_TYPE_SET_SLOT(t, f, v, n) ((t)->_MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f = v)
783+
#define MP_OBJ_TYPE_OFFSETOF_SLOT(t, f) (offsetof(mp_obj_type_t, _MP_DEFINE_CONST_OBJ_TYPE_SLOT_PATH_##f))
784+
711785
#endif
712786

713787
// Workaround for https://docs.microsoft.com/en-us/cpp/preprocessor/preprocessor-experimental-overview?view=msvc-160#macro-arguments-are-unpacked

py/objtype.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,6 +1143,10 @@ mp_obj_t mp_obj_new_type(qstr name, mp_obj_t bases_tuple, mp_obj_t locals_dict)
11431143
mp_obj_type_t *o = (mp_obj_type_t *)m_malloc0(sizeof(mp_obj_type_t) + MICROPY_OBJ_TYPE_EXTRA_ALLOC);
11441144
o->base.type = &mp_type_type;
11451145
o->flags = base_flags
1146+
#if MICROPY_OBJ_TYPE_REPR == MICROPY_OBJ_TYPE_REPR_SPLIT
1147+
| MP_OBJ_TYPE_FLAG_EXTENDED
1148+
#endif
1149+
;
11461150
o->name = name;
11471151
o->make_new = mp_obj_instance_make_new;
11481152
MP_OBJ_TYPE_SET_SLOT(o, print, instance_print, 1);

0 commit comments

Comments
 (0)
0