@@ -15,15 +15,14 @@ typedef machine_int_t mp_small_int_t;
1515typedef machine_float_t mp_float_t ;
1616#endif
1717
18- // Anything that wants to be a Micro Python object must
19- // have mp_obj_base_t as its first member (except NULL and small ints)
20-
21- typedef struct _mp_obj_base_t mp_obj_base_t ;
22- typedef struct _mp_obj_type_t mp_obj_type_t ;
18+ // Anything that wants to be a Micro Python object must have
19+ // mp_obj_base_t as its first member (except NULL and small ints)
2320
21+ struct _mp_obj_type_t ;
2422struct _mp_obj_base_t {
25- const mp_obj_type_t * type ;
23+ const struct _mp_obj_type_t * type ;
2624};
25+ typedef struct _mp_obj_base_t mp_obj_base_t ;
2726
2827// The NULL object is used to indicate the absence of an object
2928// It *cannot* be used when an mp_obj_t is expected, except where explicitly allowed
@@ -43,12 +42,13 @@ struct _mp_obj_base_t {
4342
4443#define MP_DECLARE_CONST_FUN_OBJ (obj_name ) extern const mp_obj_fun_native_t obj_name
4544
46- #define MP_DEFINE_CONST_FUN_OBJ_0 (obj_name , fun_name ) const mp_obj_fun_native_t obj_name = {{&fun_native_type}, 0, 0, fun_name}
47- #define MP_DEFINE_CONST_FUN_OBJ_1 (obj_name , fun_name ) const mp_obj_fun_native_t obj_name = {{&fun_native_type}, 1, 1, fun_name}
48- #define MP_DEFINE_CONST_FUN_OBJ_2 (obj_name , fun_name ) const mp_obj_fun_native_t obj_name = {{&fun_native_type}, 2, 2, fun_name}
49- #define MP_DEFINE_CONST_FUN_OBJ_3 (obj_name , fun_name ) const mp_obj_fun_native_t obj_name = {{&fun_native_type}, 3, 3, fun_name}
50- #define MP_DEFINE_CONST_FUN_OBJ_VAR (obj_name , n_args_min , fun_name ) const mp_obj_fun_native_t obj_name = {{&fun_native_type}, n_args_min, (~((machine_uint_t)0)), fun_name}
51- #define MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (obj_name , n_args_min , n_args_max , fun_name ) const mp_obj_fun_native_t obj_name = {{&fun_native_type}, n_args_min, n_args_max, fun_name}
45+ #define MP_DEFINE_CONST_FUN_OBJ_VOID_PTR (obj_name , n_args_min , n_args_max , fun_name ) const mp_obj_fun_native_t obj_name = {{&fun_native_type}, n_args_min, n_args_max, (void *)fun_name}
46+ #define MP_DEFINE_CONST_FUN_OBJ_0 (obj_name , fun_name ) MP_DEFINE_CONST_FUN_OBJ_VOID_PTR(obj_name, 0, 0, (mp_fun_0_t)fun_name)
47+ #define MP_DEFINE_CONST_FUN_OBJ_1 (obj_name , fun_name ) MP_DEFINE_CONST_FUN_OBJ_VOID_PTR(obj_name, 1, 1, (mp_fun_1_t)fun_name)
48+ #define MP_DEFINE_CONST_FUN_OBJ_2 (obj_name , fun_name ) MP_DEFINE_CONST_FUN_OBJ_VOID_PTR(obj_name, 2, 2, (mp_fun_2_t)fun_name)
49+ #define MP_DEFINE_CONST_FUN_OBJ_3 (obj_name , fun_name ) MP_DEFINE_CONST_FUN_OBJ_VOID_PTR(obj_name, 3, 3, (mp_fun_3_t)fun_name)
50+ #define MP_DEFINE_CONST_FUN_OBJ_VAR (obj_name , n_args_min , fun_name ) MP_DEFINE_CONST_FUN_OBJ_VOID_PTR(obj_name, n_args_min, (~((machine_uint_t)0)), (mp_fun_var_t)fun_name)
51+ #define MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (obj_name , n_args_min , n_args_max , fun_name ) MP_DEFINE_CONST_FUN_OBJ_VOID_PTR(obj_name, n_args_min, n_args_max, (mp_fun_var_t)fun_name)
5252
5353// Type definitions for methods
5454
@@ -83,7 +83,7 @@ struct _mp_obj_type_t {
8383 mp_fun_1_t getiter ;
8484 mp_fun_1_t iternext ;
8585
86- const mp_method_t methods [] ;
86+ const mp_method_t * methods ;
8787
8888 /*
8989 What we might need to add here:
@@ -108,6 +108,8 @@ struct _mp_obj_type_t {
108108 */
109109};
110110
111+ typedef struct _mp_obj_type_t mp_obj_type_t ;
112+
111113// Constant objects, globally accessible
112114
113115extern const mp_obj_type_t mp_const_type ;
@@ -241,6 +243,7 @@ typedef struct _mp_obj_fun_native_t { // need this so we can define const object
241243 // for const function objects, make an empty, const map
242244 // such functions won't be able to access the global scope, but that's probably okay
243245} mp_obj_fun_native_t ;
246+
244247extern const mp_obj_type_t fun_native_type ;
245248extern const mp_obj_type_t fun_bc_type ;
246249void mp_obj_fun_bc_get (mp_obj_t self_in , int * n_args , uint * n_state , const byte * * code );
0 commit comments