objfun: Add function name accessor and .print slot method.
This commit is contained in:
parent
dddf5bd330
commit
68551a8428
16
py/objfun.c
16
py/objfun.c
@ -126,6 +126,19 @@ mp_obj_t mp_make_function_var_between(int n_args_min, int n_args_max, mp_fun_var
|
|||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
/* byte code functions */
|
/* byte code functions */
|
||||||
|
|
||||||
|
const char *mp_obj_fun_get_name(mp_obj_fun_bc_t *o) {
|
||||||
|
const byte *code_info = o->bytecode;
|
||||||
|
qstr block_name = code_info[8] | (code_info[9] << 8) | (code_info[10] << 16) | (code_info[11] << 24);
|
||||||
|
return qstr_str(block_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if MICROPY_CPYTHON_COMPAT
|
||||||
|
STATIC void fun_bc_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t o_in, mp_print_kind_t kind) {
|
||||||
|
mp_obj_fun_bc_t *o = o_in;
|
||||||
|
print(env, "<function %s at 0x%x>", mp_obj_fun_get_name(o), o);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if DEBUG_PRINT
|
#if DEBUG_PRINT
|
||||||
STATIC void dump_args(const mp_obj_t *a, int sz) {
|
STATIC void dump_args(const mp_obj_t *a, int sz) {
|
||||||
DEBUG_printf("%p: ", a);
|
DEBUG_printf("%p: ", a);
|
||||||
@ -335,6 +348,9 @@ continue2:;
|
|||||||
const mp_obj_type_t mp_type_fun_bc = {
|
const mp_obj_type_t mp_type_fun_bc = {
|
||||||
{ &mp_type_type },
|
{ &mp_type_type },
|
||||||
.name = MP_QSTR_function,
|
.name = MP_QSTR_function,
|
||||||
|
#if MICROPY_CPYTHON_COMPAT
|
||||||
|
.print = fun_bc_print,
|
||||||
|
#endif
|
||||||
.call = fun_bc_call,
|
.call = fun_bc_call,
|
||||||
.binary_op = fun_binary_op,
|
.binary_op = fun_binary_op,
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user