summaryrefslogtreecommitdiff
path: root/py/objfun.h
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2024-02-16 17:09:41 +1100
committerDamien George <damien@micropython.org>2024-02-20 10:50:03 +1100
commit648a7578da21cc7ddb4046fc59891144e797b983 (patch)
tree86563f21548b989781ae63a7345717d5c551c66e /py/objfun.h
parent971617196644775905fd821c39c6a7771b63dbaf (diff)
py/objfun: Make mp_obj_new_fun_native/mp_obj_new_fun_asm static-inline.
To reduce code size, since they are only used once by py/emitglue.c. Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'py/objfun.h')
-rw-r--r--py/objfun.h27
1 files changed, 25 insertions, 2 deletions
diff --git a/py/objfun.h b/py/objfun.h
index 9de15b884..b6350d7b6 100644
--- a/py/objfun.h
+++ b/py/objfun.h
@@ -43,9 +43,32 @@ typedef struct _mp_obj_fun_bc_t {
mp_obj_t extra_args[];
} mp_obj_fun_bc_t;
+typedef struct _mp_obj_fun_asm_t {
+ mp_obj_base_t base;
+ size_t n_args;
+ const void *fun_data; // GC must be able to trace this pointer
+ mp_uint_t type_sig;
+} mp_obj_fun_asm_t;
+
mp_obj_t mp_obj_new_fun_bc(const mp_obj_t *def_args, const byte *code, const mp_module_context_t *cm, struct _mp_raw_code_t *const *raw_code_table);
-mp_obj_t mp_obj_new_fun_native(const mp_obj_t *def_args, const void *fun_data, const mp_module_context_t *cm, struct _mp_raw_code_t *const *raw_code_table);
-mp_obj_t mp_obj_new_fun_asm(size_t n_args, const void *fun_data, mp_uint_t type_sig);
void mp_obj_fun_bc_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest);
+#if MICROPY_EMIT_NATIVE
+static inline 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));
+ o->base.type = &mp_type_fun_native;
+ return MP_OBJ_FROM_PTR(o);
+}
+#endif
+
+#if MICROPY_EMIT_INLINE_ASM
+static inline 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);
+ o->n_args = n_args;
+ o->fun_data = fun_data;
+ o->type_sig = type_sig;
+ return MP_OBJ_FROM_PTR(o);
+}
+#endif
+
#endif // MICROPY_INCLUDED_PY_OBJFUN_H