@@ -522,6 +522,19 @@ typedef mp_int_t (*mp_buffer_fun_t)(mp_obj_t obj, mp_buffer_info_t *bufinfo, mp_
522
522
bool mp_get_buffer (mp_obj_t obj , mp_buffer_info_t * bufinfo , mp_uint_t flags );
523
523
void mp_get_buffer_raise (mp_obj_t obj , mp_buffer_info_t * bufinfo , mp_uint_t flags );
524
524
525
+ #if MICROPY_OBJ_TYPE_REPR == MICROPY_OBJ_TYPE_REPR_SPLIT
526
+ struct _mp_obj_type_ext_t {
527
+ mp_call_fun_t call ;
528
+ mp_unary_op_fun_t unary_op ;
529
+ mp_subscr_fun_t subscr ;
530
+ mp_getiter_fun_t getiter ;
531
+ mp_fun_1_t iternext ;
532
+ mp_buffer_fun_t buffer ;
533
+ const void * protocol ;
534
+ mp_binary_op_fun_t binary_op ;
535
+ };
536
+ #endif
537
+
525
538
struct _mp_obj_type_t {
526
539
// A type is an object so must start with this entry, which points to mp_type_type.
527
540
mp_obj_base_t base ;
@@ -608,6 +621,15 @@ struct _mp_obj_type_t {
608
621
609
622
const void * slots [];
610
623
624
+ #elif MICROPY_OBJ_TYPE_REPR == MICROPY_OBJ_TYPE_REPR_SPLIT
625
+
626
+ mp_print_fun_t print ;
627
+ mp_attr_fun_t attr ;
628
+ const void * parent ;
629
+ struct _mp_obj_dict_t * locals_dict ;
630
+
631
+ struct _mp_obj_type_ext_t ext [];
632
+
611
633
#endif
612
634
};
613
635
@@ -677,6 +699,58 @@ struct _mp_obj_type_t {
677
699
#define MP_OBJ_TYPE_SET_SLOT (t , f , v , n ) ((t)->slot_index_##f = n, (t)->slots[(t)->slot_index_##f - 1] = (void *)v)
<
8000
/code>
678
700
#define MP_OBJ_TYPE_OFFSETOF_SLOT (t , f ) (offsetof(mp_obj_type_t, slots) + (t)->slot_index_##f * sizeof(void *))
679
701
702
+ #elif MICROPY_OBJ_TYPE_REPR == MICROPY_OBJ_TYPE_REPR_SPLIT
703
+
704
+ #define MICROPY_OBJ_TYPE_EXTRA_ALLOC (sizeof(struct _mp_obj_type_ext_t))
705
+
706
+ #define MP_OBJ_TYPE_FLAG_EXTENDED (0x0080)
707
+
708
+ #define SLOT_IS_EXT_print (0)
709
+ #define SLOT_IS_EXT_call (1)
710
+ #define SLOT_IS_EXT_unary_op (1)
711
+ #define SLOT_IS_EXT_binary_op (1)
712
+ #define SLOT_IS_EXT_attr (0)
713
+ #define SLOT_IS_EXT_subscr (1)
714
+ #define SLOT_IS_EXT_getiter (1)
715
+ #define SLOT_IS_EXT_iternext (1)
716
+ #define SLOT_IS_EXT_buffer (1)
717
+ #define SLOT_IS_EXT_protocol (1)
718
+ #define SLOT_IS_EXT_parent (0)
719
+ #define SLOT_IS_EXT_locals_dict (0)
720
+
721
+ #define SLOT_PATH_print print
722
+ #define SLOT_PATH_call ext[0].call
723
+ #define SLOT_PATH_unary_op ext[0].unary_op
724
+ #define SLOT_PATH_binary_op ext[0].binary_op
725
+ #define SLOT_PATH_attr attr
726
+ #define SLOT_PATH_subscr ext[0].subscr
727
+ #define SLOT_PATH_getiter ext[0].getiter
728
+ #define SLOT_PATH_iternext ext[0].iternext
729
+ #define SLOT_PATH_buffer ext[0].buffer
730
+ #define SLOT_PATH_protocol ext[0].protocol
731
+ #define SLOT_PATH_parent parent
732
+ #define SLOT_PATH_locals_dict locals_dict
733
+
734
+ #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 }
735
+ #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 | (SLOT_IS_EXT_##f1)*MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, .SLOT_PATH_##f1 = v1 }
736
+ #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 | (SLOT_IS_EXT_##f1 | SLOT_IS_EXT_##f2) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, .SLOT_PATH_##f1 = v1, .SLOT_PATH_##f2 = v2 }
737
+ #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 | (SLOT_IS_EXT_##f1 | SLOT_IS_EXT_##f2 | SLOT_IS_EXT_##f3) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, .SLOT_PATH_##f1 = v1, .SLOT_PATH_##f2 = v2, .SLOT_PATH_##f3 = v3 }
738
+ #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 | (SLOT_IS_EXT_##f1 | SLOT_IS_EXT_##f2 | SLOT_IS_EXT_##f3 | SLOT_IS_EXT_##f4) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, .SLOT_PATH_##f1 = v1, .SLOT_PATH_##f2 = v2, .SLOT_PATH_##f3 = v3, .SLOT_PATH_##f4 = v4 }
739
+ #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 | (SLOT_IS_EXT_##f1 | SLOT_IS_EXT_##f2 | SLOT_IS_EXT_##f3 | SLOT_IS_EXT_##f4 | SLOT_IS_EXT_##f5) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, .SLOT_PATH_##f1 = v1, .SLOT_PATH_##f2 = v2, .SLOT_PATH_##f3 = v3, .SLOT_PATH_##f4 = v4, .SLOT_PATH_##f5 = v5 }
740
+ #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 | (SLOT_IS_EXT_##f1 | SLOT_IS_EXT_##f2 | SLOT_IS_EXT_##f3 | SLOT_IS_EXT_##f4 | SLOT_IS_EXT_##f5 | SLOT_IS_EXT_##f6) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, .SLOT_PATH_##f1 = v1, .SLOT_PATH_##f2 = v2, .SLOT_PATH_##f3 = v3, .SLOT_PATH_##f4 = v4, .SLOT_PATH_##f5 = v5, .SLOT_PATH_##f6 = v6 }
741
+ #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 | (SLOT_IS_EXT_##f1 | SLOT_IS_EXT_##f2 | SLOT_IS_EXT_##f3 | SLOT_IS_EXT_##f4 | SLOT_IS_EXT_##f5 | SLOT_IS_EXT_##f6 | SLOT_IS_EXT_##f7) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, .SLOT_PATH_##f1 = v1, .SLOT_PATH_##f2 = v2, .SLOT_PATH_##f3 = v3, .SLOT_PATH_##f4 = v4, .SLOT_PATH_##f5 = v5, .SLOT_PATH_##f6 = v6, .SLOT_PATH_##f7 = v7 }
742
+ #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 | (SLOT_IS_EXT_##f1 | SLOT_IS_EXT_##f2 | SLOT_IS_EXT_##f3 | SLOT_IS_EXT_##f4 | SLOT_IS_EXT_##f5 | SLOT_IS_EXT_##f6 | SLOT_IS_EXT_##f7 | SLOT_IS_EXT_##f8) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, .SLOT_PATH_##f1 = v1, .SLOT_PATH_##f2 = v2, .SLOT_PATH_##f3 = v3, .SLOT_PATH_##f4 = v4, .SLOT_PATH_##f5 = v5, .SLOT_PATH_##f6 = v6, .SLOT_PATH_##f7 = v7, .SLOT_PATH_##f8 = v8 }
743
+ #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 | (SLOT_IS_EXT_##f1 | SLOT_IS_EXT_##f2 | SLOT_IS_EXT_##f3 | SLOT_IS_EXT_##f4 | SLOT_IS_EXT_##f5 | SLOT_IS_EXT_##f6 | SLOT_IS_EXT_##f7 | SLOT_IS_EXT_##f8 | SLOT_IS_EXT_##f9) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, .SLOT_PATH_##f1 = v1, .SLOT_PATH_##f2 = v2, .SLOT_PATH_##f3 = v3, .SLOT_PATH_##f4 = v4, .SLOT_PATH_##f5 = v5, .SLOT_PATH_##f6 = v6, .SLOT_PATH_##f7 = v7, .SLOT_PATH_##f8 = v8, .SLOT_PATH_##f9 = v9 }
744
+ #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 | (SLOT_IS_EXT_##f1 | SLOT_IS_EXT_##f2 | SLOT_IS_EXT_##f3 | SLOT_IS_EXT_##f4 | SLOT_IS_EXT_##f5 | SLOT_IS_EXT_##f6 | SLOT_IS_EXT_##f7 | SLOT_IS_EXT_##f8 | SLOT_IS_EXT_##f9 | SLOT_IS_EXT_##f10) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, .SLOT_PATH_##f1 = v1, .SLOT_PATH_##f2 = v2, .SLOT_PATH_##f3 = v3, .SLOT_PATH_##f4 = v4, .SLOT_PATH_##f5 = v5, .SLOT_PATH_##f6 = v6, .SLOT_PATH_##f7 = v7, .SLOT_PATH_##f8 = v8, .SLOT_PATH_##f9 = v9, .SLOT_PATH_##f10 = v10 }
745
+ #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 | (SLOT_IS_EXT_##f1 | SLOT_IS_EXT_##f2 | SLOT_IS_EXT_##f3 | SLOT_IS_EXT_##f4 | SLOT_IS_EXT_##f5 | SLOT_IS_EXT_##f6 | SLOT_IS_EXT_##f7 | SLOT_IS_EXT_##f8 | SLOT_IS_EXT_##f9 | SLOT_IS_EXT_##f10 | SLOT_IS_EXT_##f11) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, .SLOT_PATH_##f1 = v1, .SLOT_PATH_##f2 = v2, .SLOT_PATH_##f3 = v3, .SLOT_PATH_##f4 = v4, .SLOT_PATH_##f5 = v5, .SLOT_PATH_##f6 = v6, .SLOT_PATH_##f7 = v7, .SLOT_PATH_##f8 = v8, .SLOT_PATH_##f9 = v9, .SLOT_PATH_##f10 = v10, .SLOT_PATH_##f11 = v11 }
746
+ #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 | (SLOT_IS_EXT_##f1 | SLOT_IS_EXT_##f2 | SLOT_IS_EXT_##f3 | SLOT_IS_EXT_##f4 | SLOT_IS_EXT_##f5 | SLOT_IS_EXT_##f6 | SLOT_IS_EXT_##f7 | SLOT_IS_EXT_##f8 | SLOT_IS_EXT_##f9 | SLOT_IS_EXT_##f10 | SLOT_IS_EXT_##f11 | SLOT_IS_EXT_##f12) * MP_OBJ_TYPE_FLAG_EXTENDED, .make_new = _make_new, .SLOT_PATH_##f1 = v1, .SLOT_PATH_##f2 = v2, .SLOT_PATH_##f3 = v3, .SLOT_PATH_##f4 = v4, .SLOT_PATH_##f5 = v5, .SLOT_PATH_##f6 = v6, .SLOT_PATH_##f7 = v7, .SLOT_PATH_##f8 = v8, .SLOT_PATH_##f9 = v9, .SLOT_PATH_##f10 = v10, .SLOT_PATH_##f11 = v11, .SLOT_PATH_##f12 = v12 }
747
+
748
+ #define MP_OBJ_TYPE_HAS_SLOT (t , f ) (SLOT_IS_EXT_##f ? (((t)->flags & MP_OBJ_TYPE_FLAG_EXTENDED) ? (t)->SLOT_PATH_##f : 0) : (t)->SLOT_PATH_##f)
749
+ #define MP_OBJ_TYPE_GET_SLOT (t , f ) ((t)->SLOT_PATH_##f)
750
+ #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))
751
+ #define MP_OBJ_TYPE_SET_SLOT (t , f , v , n ) ((t)->SLOT_PATH_##f = v)
752
+ #define MP_OBJ_TYPE_OFFSETOF_SLOT (t , f ) (offsetof(mp_obj_type_t, SLOT_PATH_##f))
753
+
680
754
#endif
681
755
682
756
#define MP_DEFINE_CONST_OBJ_TYPE_IMPL (_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , N , ...) MP_DEFINE_CONST_OBJ_TYPE_##N
0 commit comments