summaryrefslogtreecommitdiffstatshomepage
path: root/py/objfun.c
diff options
context:
space:
mode:
Diffstat (limited to 'py/objfun.c')
-rw-r--r--py/objfun.c113
1 files changed, 53 insertions, 60 deletions
diff --git a/py/objfun.c b/py/objfun.c
index 5fa9d71dda..30de8670a1 100644
--- a/py/objfun.c
+++ b/py/objfun.c
@@ -56,13 +56,11 @@ STATIC mp_obj_t fun_builtin_0_call(mp_obj_t self_in, size_t n_args, size_t n_kw,
return self->fun._0();
}
-const mp_obj_type_t mp_type_fun_builtin_0 = {
- { &mp_type_type },
- .flags = MP_TYPE_FLAG_BINDS_SELF | MP_TYPE_FLAG_BUILTIN_FUN,
- .name = MP_QSTR_function,
- .call = fun_builtin_0_call,
- .unary_op = mp_generic_unary_op,
-};
+MP_DEFINE_CONST_OBJ_TYPE(
+ mp_type_fun_builtin_0, MP_QSTR_function, MP_TYPE_FLAG_BINDS_SELF | MP_TYPE_FLAG_BUILTIN_FUN, MP_TYPE_NULL_MAKE_NEW,
+ call, fun_builtin_0_call,
+ unary_op, mp_generic_unary_op
+ );
STATIC mp_obj_t fun_builtin_1_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args) {
assert(mp_obj_is_type(self_in, &mp_type_fun_builtin_1));
@@ -71,13 +69,11 @@ STATIC mp_obj_t fun_builtin_1_call(mp_obj_t self_in, size_t n_args, size_t n_kw,
return self->fun._1(args[0]);
}
-const mp_obj_type_t mp_type_fun_builtin_1 = {
- { &mp_type_type },
- .flags = MP_TYPE_FLAG_BINDS_SELF | MP_TYPE_FLAG_BUILTIN_FUN,
- .name = MP_QSTR_function,
- .call = fun_builtin_1_call,
- .unary_op = mp_generic_unary_op,
-};
+MP_DEFINE_CONST_OBJ_TYPE(
+ mp_type_fun_builtin_1, MP_QSTR_function, MP_TYPE_FLAG_BINDS_SELF | MP_TYPE_FLAG_BUILTIN_FUN, MP_TYPE_NULL_MAKE_NEW,
+ call, fun_builtin_1_call,
+ unary_op, mp_generic_unary_op
+ );
STATIC mp_obj_t fun_builtin_2_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args) {
assert(mp_obj_is_type(self_in, &mp_type_fun_builtin_2));
@@ -86,13 +82,11 @@ STATIC mp_obj_t fun_builtin_2_call(mp_obj_t self_in, size_t n_args, size_t n_kw,
return self->fun._2(args[0], args[1]);
}
-const mp_obj_type_t mp_type_fun_builtin_2 = {
- { &mp_type_type },
- .flags = MP_TYPE_FLAG_BINDS_SELF | MP_TYPE_FLAG_BUILTIN_FUN,
- .name = MP_QSTR_function,
- .call = fun_builtin_2_call,
- .unary_op = mp_generic_unary_op,
-};
+MP_DEFINE_CONST_OBJ_TYPE(
+ mp_type_fun_builtin_2, MP_QSTR_function, MP_TYPE_FLAG_BINDS_SELF | MP_TYPE_FLAG_BUILTIN_FUN, MP_TYPE_NULL_MAKE_NEW,
+ call, fun_builtin_2_call,
+ unary_op, mp_generic_unary_op
+ );
STATIC mp_obj_t fun_builtin_3_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args) {
assert(mp_obj_is_type(self_in, &mp_type_fun_builtin_3));
@@ -101,13 +95,11 @@ STATIC mp_obj_t fun_builtin_3_call(mp_obj_t self_in, size_t n_args, size_t n_kw,
return self->fun._3(args[0], args[1], args[2]);
}
-const mp_obj_type_t mp_type_fun_builtin_3 = {
- { &mp_type_type },
- .flags = MP_TYPE_FLAG_BINDS_SELF | MP_TYPE_FLAG_BUILTIN_FUN,
- .name = MP_QSTR_function,
- .call = fun_builtin_3_call,
- .unary_op = mp_generic_unary_op,
-};
+MP_DEFINE_CONST_OBJ_TYPE(
+ mp_type_fun_builtin_3, MP_QSTR_function, MP_TYPE_FLAG_BINDS_SELF | MP_TYPE_FLAG_BUILTIN_FUN, MP_TYPE_NULL_MAKE_NEW,
+ call, fun_builtin_3_call,
+ unary_op, mp_generic_unary_op
+ );
STATIC mp_obj_t fun_builtin_var_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args) {
assert(mp_obj_is_type(self_in, &mp_type_fun_builtin_var));
@@ -132,13 +124,11 @@ STATIC mp_obj_t fun_builtin_var_call(mp_obj_t self_in, size_t n_args, size_t n_k
}
}
-const mp_obj_type_t mp_type_fun_builtin_var = {
- { &mp_type_type },
- .flags = MP_TYPE_FLAG_BINDS_SELF | MP_TYPE_FLAG_BUILTIN_FUN,
- .name = MP_QSTR_function,
- .call = fun_builtin_var_call,
- .unary_op = mp_generic_unary_op,
-};
+MP_DEFINE_CONST_OBJ_TYPE(
+ mp_type_fun_builtin_var, MP_QSTR_function, MP_TYPE_FLAG_BINDS_SELF | MP_TYPE_FLAG_BUILTIN_FUN, MP_TYPE_NULL_MAKE_NEW,
+ call, fun_builtin_var_call,
+ unary_op, mp_generic_unary_op
+ );
/******************************************************************************/
/* byte code functions */
@@ -362,19 +352,20 @@ void mp_obj_fun_bc_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) {
}
#endif
-const mp_obj_type_t mp_type_fun_bc = {
- { &mp_type_type },
- .flags = MP_TYPE_FLAG_BINDS_SELF,
- .name = MP_QSTR_function,
+MP_DEFINE_CONST_OBJ_TYPE(
+ mp_type_fun_bc,
+ MP_QSTR_function,
+ MP_TYPE_FLAG_BINDS_SELF,
+ MP_TYPE_NULL_MAKE_NEW,
#if MICROPY_CPYTHON_COMPAT
- .print = fun_bc_print,
+ print, fun_bc_print,
#endif
- .call = fun_bc_call,
- .unary_op = mp_generic_unary_op,
+ call, fun_bc_call,
+ unary_op, mp_generic_unary_op
#if MICROPY_PY_FUNCTION_ATTRS
- .attr = mp_obj_fun_bc_attr,
+ , attr, mp_obj_fun_bc_attr
#endif
-};
+ );
mp_obj_t mp_obj_new_fun_bc(const mp_obj_t *def_args, const byte *code, const mp_module_context_t *context, struct _mp_raw_code_t *const *child_table) {
size_t n_def_args = 0;
@@ -417,19 +408,20 @@ STATIC mp_obj_t fun_native_call(mp_obj_t self_in, size_t n_args, size_t n_kw, co
return fun(self_in, n_args, n_kw, args);
}
-STATIC const mp_obj_type_t mp_type_fun_native = {
- { &mp_type_type },
- .flags = MP_TYPE_FLAG_BINDS_SELF,
- .name = MP_QSTR_function,
+STATIC MP_DEFINE_CONST_OBJ_TYPE(
+ mp_type_fun_native,
+ MP_QSTR_function,
+ MP_TYPE_FLAG_BINDS_SELF,
+ MP_TYPE_NULL_MAKE_NEW,
#if MICROPY_CPYTHON_COMPAT
- .print = fun_bc_print,
+ print, fun_bc_print,
#endif
- .call = fun_native_call,
- .unary_op = mp_generic_unary_op,
#if MICROPY_PY_FUNCTION_ATTRS
- .attr = mp_obj_fun_bc_attr,
+ attr, mp_obj_fun_bc_attr,
#endif
-};
+ call, fun_native_call,
+ unary_op, mp_generic_unary_op
+ );
mp_obj_t mp_obj_new_fun_native(const mp_obj_t *def_args, const void *fun_data, const mp_module_context_t *mc, struct _mp_raw_code_t *const *child_table) {
mp_obj_fun_bc_t *o = MP_OBJ_TO_PTR(mp_obj_new_fun_bc(def_args, (const byte *)fun_data, mc, child_table));
@@ -531,13 +523,14 @@ STATIC mp_obj_t fun_asm_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const
return mp_native_to_obj(ret, self->type_sig);
}
-STATIC const mp_obj_type_t mp_type_fun_asm = {
- { &mp_type_type },
- .flags = MP_TYPE_FLAG_BINDS_SELF,
- .name = MP_QSTR_function,
- .call = fun_asm_call,
- .unary_op = mp_generic_unary_op,
-};
+STATIC MP_DEFINE_CONST_OBJ_TYPE(
+ mp_type_fun_asm,
+ MP_QSTR_function,
+ MP_TYPE_FLAG_BINDS_SELF,
+ MP_TYPE_NULL_MAKE_NEW,
+ call, fun_asm_call,
+ unary_op, mp_generic_unary_op
+ );
mp_obj_t mp_obj_new_fun_asm(size_t n_args, const void *fun_data, mp_uint_t type_sig) {
mp_obj_fun_asm_t *o = mp_obj_malloc(mp_obj_fun_asm_t, &mp_type_fun_asm);