objfun: Add function name accessor and .print slot method.

pull/534/head
Paul Sokolovsky 2014-05-01 01:32:58 +03:00
rodzic dddf5bd330
commit 68551a8428
1 zmienionych plików z 16 dodań i 0 usunięć

Wyświetl plik

@ -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 */
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
STATIC void dump_args(const mp_obj_t *a, int sz) {
DEBUG_printf("%p: ", a);
@ -335,6 +348,9 @@ continue2:;
const mp_obj_type_t mp_type_fun_bc = {
{ &mp_type_type },
.name = MP_QSTR_function,
#if MICROPY_CPYTHON_COMPAT
.print = fun_bc_print,
#endif
.call = fun_bc_call,
.binary_op = fun_binary_op,
};