kopia lustrzana https://github.com/micropython/micropython
py/objfun: Support __name__ on native functions and generators.
This is now easy to support, since the first machine-word of a native function tells how to find the prelude, from which the function name can be extracted in the same way as for bytecode. Signed-off-by: Damien George <damien@micropython.org>pull/13686/head
rodzic
6d403eb697
commit
0c7ccb8807
|
@ -139,14 +139,14 @@ STATIC qstr mp_obj_code_get_name(const mp_obj_fun_bc_t *fun, const byte *code_in
|
||||||
|
|
||||||
qstr mp_obj_fun_get_name(mp_const_obj_t fun_in) {
|
qstr mp_obj_fun_get_name(mp_const_obj_t fun_in) {
|
||||||
const mp_obj_fun_bc_t *fun = MP_OBJ_TO_PTR(fun_in);
|
const mp_obj_fun_bc_t *fun = MP_OBJ_TO_PTR(fun_in);
|
||||||
|
const byte *bc = fun->bytecode;
|
||||||
|
|
||||||
#if MICROPY_EMIT_NATIVE
|
#if MICROPY_EMIT_NATIVE
|
||||||
if (fun->base.type == &mp_type_fun_native || fun->base.type == &mp_type_native_gen_wrap) {
|
if (fun->base.type == &mp_type_fun_native || fun->base.type == &mp_type_native_gen_wrap) {
|
||||||
// TODO native functions don't have name stored
|
bc = mp_obj_fun_native_get_prelude_ptr(fun);
|
||||||
return MP_QSTR_;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const byte *bc = fun->bytecode;
|
|
||||||
MP_BC_PRELUDE_SIG_DECODE(bc);
|
MP_BC_PRELUDE_SIG_DECODE(bc);
|
||||||
return mp_obj_code_get_name(fun, bc);
|
return mp_obj_code_get_name(fun, bc);
|
||||||
}
|
}
|
||||||
|
|
|
@ -643,9 +643,7 @@ def run_tests(pyb, tests, args, result_dir, num_threads=1):
|
||||||
# Some tests are known to fail with native emitter
|
# Some tests are known to fail with native emitter
|
||||||
# Remove them from the below when they work
|
# Remove them from the below when they work
|
||||||
if args.emit == "native":
|
if args.emit == "native":
|
||||||
skip_tests.update(
|
skip_tests.add("basics/gen_yield_from_close.py") # require raise_varargs
|
||||||
{"basics/%s.py" % t for t in "gen_yield_from_close generator_name".split()}
|
|
||||||
) # require raise_varargs, generator name
|
|
||||||
skip_tests.update(
|
skip_tests.update(
|
||||||
{"basics/async_%s.py" % t for t in "with with2 with_break with_return".split()}
|
{"basics/async_%s.py" % t for t in "with with2 with_break with_return".split()}
|
||||||
) # require async_with
|
) # require async_with
|
||||||
|
@ -656,7 +654,6 @@ def run_tests(pyb, tests, args, result_dir, num_threads=1):
|
||||||
skip_tests.add("basics/del_deref.py") # requires checking for unbound local
|
skip_tests.add("basics/del_deref.py") # requires checking for unbound local
|
||||||
skip_tests.add("basics/del_local.py") # requires checking for unbound local
|
skip_tests.add("basics/del_local.py") # requires checking for unbound local
|
||||||
skip_tests.add("basics/exception_chain.py") # raise from is not supported
|
skip_tests.add("basics/exception_chain.py") # raise from is not supported
|
||||||
skip_tests.add("basics/fun_name.py") # requires proper names for native functions
|
|
||||||
skip_tests.add("basics/scope_implicit.py") # requires checking for unbound local
|
skip_tests.add("basics/scope_implicit.py") # requires checking for unbound local
|
||||||
skip_tests.add("basics/sys_tracebacklimit.py") # requires traceback info
|
skip_tests.add("basics/sys_tracebacklimit.py") # requires traceback info
|
||||||
skip_tests.add("basics/try_finally_return2.py") # requires raise_varargs
|
skip_tests.add("basics/try_finally_return2.py") # requires raise_varargs
|
||||||
|
|
Ładowanie…
Reference in New Issue