@@ -270,35 +270,35 @@ static inline bool mp_obj_is_integer(mp_const_obj_t o) { return MP_OBJ_IS_INT(o)
270270// These macros are used to declare and define constant function objects
271271// You can put "static" in front of the definitions to make them local
272272
273- #define MP_DECLARE_CONST_FUN_OBJ_0 (obj_name ) extern const mp_obj_fun_builtin_t obj_name
274- #define MP_DECLARE_CONST_FUN_OBJ_1 (obj_name ) extern const mp_obj_fun_builtin_t obj_name
275- #define MP_DECLARE_CONST_FUN_OBJ_2 (obj_name ) extern const mp_obj_fun_builtin_t obj_name
276- #define MP_DECLARE_CONST_FUN_OBJ_3 (obj_name ) extern const mp_obj_fun_builtin_t obj_name
277- #define MP_DECLARE_CONST_FUN_OBJ_VAR (obj_name ) extern const mp_obj_fun_builtin_t obj_name
278- #define MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN (obj_name ) extern const mp_obj_fun_builtin_t obj_name
279- #define MP_DECLARE_CONST_FUN_OBJ_KW (obj_name ) extern const mp_obj_fun_builtin_t obj_name
273+ #define MP_DECLARE_CONST_FUN_OBJ_0 (obj_name ) extern const mp_obj_fun_builtin_fixed_t obj_name
274+ #define MP_DECLARE_CONST_FUN_OBJ_1 (obj_name ) extern const mp_obj_fun_builtin_fixed_t obj_name
275+ #define MP_DECLARE_CONST_FUN_OBJ_2 (obj_name ) extern const mp_obj_fun_builtin_fixed_t obj_name
276+ #define MP_DECLARE_CONST_FUN_OBJ_3 (obj_name ) extern const mp_obj_fun_builtin_fixed_t obj_name
277+ #define MP_DECLARE_CONST_FUN_OBJ_VAR (obj_name ) extern const mp_obj_fun_builtin_var_t obj_name
278+ #define MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN (obj_name ) extern const mp_obj_fun_builtin_var_t obj_name
279+ #define MP_DECLARE_CONST_FUN_OBJ_KW (obj_name ) extern const mp_obj_fun_builtin_var_t obj_name
280280
281281#define MP_DEFINE_CONST_FUN_OBJ_0 (obj_name , fun_name ) \
282- const mp_obj_fun_builtin_t obj_name = \
283- {{&mp_type_fun_builtin}, false, 0, 0 , .fun._0 = fun_name}
282+ const mp_obj_fun_builtin_fixed_t obj_name = \
283+ {{&mp_type_fun_builtin_0} , .fun._0 = fun_name}
284284#define MP_DEFINE_CONST_FUN_OBJ_1 (obj_name , fun_name ) \
285- const mp_obj_fun_builtin_t obj_name = \
286- {{&mp_type_fun_builtin}, false, 1, 1 , .fun._1 = fun_name}
285+ const mp_obj_fun_builtin_fixed_t obj_name = \
286+ {{&mp_type_fun_builtin_1} , .fun._1 = fun_name}
287287#define MP_DEFINE_CONST_FUN_OBJ_2 (obj_name , fun_name ) \
288- const mp_obj_fun_builtin_t obj_name = \
289- {{&mp_type_fun_builtin}, false, 2, 2 , .fun._2 = fun_name}
288+ const mp_obj_fun_builtin_fixed_t obj_name = \
289+ {{&mp_type_fun_builtin_2} , .fun._2 = fun_name}
290290#define MP_DEFINE_CONST_FUN_OBJ_3 (obj_name , fun_name ) \
291- const mp_obj_fun_builtin_t obj_name = \
292- {{&mp_type_fun_builtin}, false, 3, 3 , .fun._3 = fun_name}
291+ const mp_obj_fun_builtin_fixed_t obj_name = \
292+ {{&mp_type_fun_builtin_3} , .fun._3 = fun_name}
293293#define MP_DEFINE_CONST_FUN_OBJ_VAR (obj_name , n_args_min , fun_name ) \
294- const mp_obj_fun_builtin_t obj_name = \
295- {{&mp_type_fun_builtin }, false, n_args_min, MP_OBJ_FUN_ARGS_MAX, .fun.var = fun_name}
294+ const mp_obj_fun_builtin_var_t obj_name = \
295+ {{&mp_type_fun_builtin_var }, false, n_args_min, MP_OBJ_FUN_ARGS_MAX, .fun.var = fun_name}
296296#define MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (obj_name , n_args_min , n_args_max , fun_name ) \
297- const mp_obj_fun_builtin_t obj_name = \
298- {{&mp_type_fun_builtin }, false, n_args_min, n_args_max, .fun.var = fun_name}
297+ const mp_obj_fun_builtin_var_t obj_name = \
298+ {{&mp_type_fun_builtin_var }, false, n_args_min, n_args_max, .fun.var = fun_name}
299299#define MP_DEFINE_CONST_FUN_OBJ_KW (obj_name , n_args_min , fun_name ) \
300- const mp_obj_fun_builtin_t obj_name = \
301- {{&mp_type_fun_builtin }, true, n_args_min, MP_OBJ_FUN_ARGS_MAX, .fun.kw = fun_name}
300+ const mp_obj_fun_builtin_var_t obj_name = \
301+ {{&mp_type_fun_builtin_var }, true, n_args_min, MP_OBJ_FUN_ARGS_MAX, .fun.kw = fun_name}
302302
303303// These macros are used to define constant map/dict objects
304304// You can put "static" in front of the definition to make it local
@@ -536,7 +536,11 @@ extern const mp_obj_type_t mp_type_zip;
536536extern const mp_obj_type_t mp_type_array ;
537537extern const mp_obj_type_t mp_type_super ;
538538extern const mp_obj_type_t mp_type_gen_instance ;
539- extern const mp_obj_type_t mp_type_fun_builtin ;
539+ extern const mp_obj_type_t mp_type_fun_builtin_0 ;
540+ extern const mp_obj_type_t mp_type_fun_builtin_1 ;
541+ extern const mp_obj_type_t mp_type_fun_builtin_2 ;
542+ extern const mp_obj_type_t mp_type_fun_builtin_3 ;
543+ extern const mp_obj_type_t mp_type_fun_builtin_var ;
540544extern const mp_obj_type_t mp_type_fun_bc ;
541545extern const mp_obj_type_t mp_type_module ;
542546extern const mp_obj_type_t mp_type_staticmethod ;
@@ -746,21 +750,28 @@ void mp_obj_set_store(mp_obj_t self_in, mp_obj_t item);
746750void mp_obj_slice_get (mp_obj_t self_in , mp_obj_t * start , mp_obj_t * stop , mp_obj_t * step );
747751
748752// functions
749- #define MP_OBJ_FUN_ARGS_MAX (0xffff) // to set maximum value in n_args_max below
750- typedef struct _mp_obj_fun_builtin_t { // use this to make const objects that go in ROM
753+
754+ typedef struct _mp_obj_fun_builtin_fixed_t {
751755 mp_obj_base_t base ;
752- bool is_kw : 1 ;
753- mp_uint_t n_args_min : 15 ; // inclusive
754- mp_uint_t n_args_max : 16 ; // inclusive
755756 union {
756757 mp_fun_0_t _0 ;
757758 mp_fun_1_t _1 ;
758759 mp_fun_2_t _2 ;
759760 mp_fun_3_t _3 ;
761+ } fun ;
762+ } mp_obj_fun_builtin_fixed_t ;
763+
764+ #define MP_OBJ_FUN_ARGS_MAX (0xffff) // to set maximum value in n_args_max below
765+ typedef struct _mp_obj_fun_builtin_var_t {
766+ mp_obj_base_t base ;
767+ bool is_kw : 1 ;
768+ mp_uint_t n_args_min : 15 ; // inclusive
769+ mp_uint_t n_args_max : 16 ; // inclusive
770+ union {
760771 mp_fun_var_t var ;
761772 mp_fun_kw_t kw ;
762773 } fun ;
763- } mp_obj_fun_builtin_t ;
774+ } mp_obj_fun_builtin_var_t ;
764775
765776qstr mp_obj_fun_get_name (mp_const_obj_t fun );
766777qstr mp_obj_code_get_name (const byte * code_info );
0 commit comments