// These variables and functions glue the code emitters to the runtime. typedef enum { MP_CODE_UNUSED, MP_CODE_RESERVED, MP_CODE_BYTE, MP_CODE_NATIVE, MP_CODE_INLINE_ASM, } mp_raw_code_kind_t; typedef struct _mp_code_t { mp_raw_code_kind_t kind : 3; uint scope_flags : 7; uint n_pos_args : 11; uint n_kwonly_args : 11; qstr *arg_names; union { struct { byte *code; uint len; } u_byte; struct { mp_fun_t fun; } u_native; struct { void *fun; } u_inline_asm; }; } mp_raw_code_t; void mp_emit_glue_init(void); void mp_emit_glue_deinit(void); mp_raw_code_t *mp_emit_glue_new_raw_code(void); void mp_emit_glue_assign_byte_code(mp_raw_code_t *rc, byte *code, uint len, uint n_pos_args, uint n_kwonly_args, qstr *arg_names, uint scope_flags); void mp_emit_glue_assign_native_code(mp_raw_code_t *rc, void *f, uint len, int n_args); void mp_emit_glue_assign_inline_asm_code(mp_raw_code_t *rc, void *f, uint len, int n_args); mp_obj_t mp_make_function_from_raw_code(mp_raw_code_t *rc, mp_obj_t def_args, mp_obj_t def_kw_args); mp_obj_t mp_make_closure_from_raw_code(mp_raw_code_t *rc, uint n_closed_over, const mp_obj_t *args);