@@ -552,6 +552,19 @@ typedef mp_int_t (*mp_buffer_fun_t)(mp_obj_t obj, mp_buffer_info_t *bufinfo, mp_
552
552
bool mp_get_buffer (mp_obj_t obj , mp_buffer_info_t * bufinfo , mp_uint_t flags );
553
553
void mp_get_buffer_raise (mp_obj_t obj , mp_buffer_info_t * bufinfo , mp_uint_t flags );
554
554
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
+
555
568
struct _mp_obj_type_t {
556
569
// A type is an object so must start with this entry, which points to mp_type_type.
557
570
mp_obj_base_t base ;
@@ -639,6 +652,15 @@ struct _mp_obj_type_t {
639
652
640
653
const void * slots [];
641
654
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
+
642
664
#endif
643
665
};
644
666
@@ -708,6 +730,58 @@ struct _mp_obj_type_t {
708
730
#define MP_OBJ_TYPE_SET_SLOT (t , f , v , n ) ((t)->slot_index_##f = n, (t)->slots[(t)->slot_index_##f - 1] = (void *)v)
709
731
#define MP_OBJ_TYPE_OFFSETOF_SLOT (t , f ) (offsetof(mp_obj_type_t, slots) + (t)->slot_index_##f * sizeof(void *))
710
732
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
+
711
785
#endif
712
786
713
787
// Workaround for https://docs.microsoft.com/en-us/cpp/preprocessor/preprocessor-experimental-overview?view=msvc-160#macro-arguments-are-unpacked
0 commit comments