From 989b0be60f01d16e8eb634cdd9da0a3aa7413681 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Fri, 20 Jun 2025 19:44:07 +0200 Subject: [PATCH 01/11] coverage: Enable sys.settrace. Signed-off-by: Jeff Epler --- ports/unix/variants/coverage/mpconfigvariant.h | 1 + 1 file changed, 1 insertion(+) diff --git a/ports/unix/variants/coverage/mpconfigvariant.h b/ports/unix/variants/coverage/mpconfigvariant.h index cfefeb46720f8..2f5d9683b3f4b 100644 --- a/ports/unix/variants/coverage/mpconfigvariant.h +++ b/ports/unix/variants/coverage/mpconfigvariant.h @@ -39,6 +39,7 @@ // Enable additional features. #define MICROPY_DEBUG_PARSE_RULE_NAME (1) +#define MICROPY_PY_SYS_SETTRACE (1) #define MICROPY_TRACKED_ALLOC (1) #define MICROPY_WARNINGS_CATEGORY (1) #undef MICROPY_VFS_ROM_IOCTL From cf944864efba60a426fa84fe042a5558d56509fa Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Fri, 20 Jun 2025 19:59:14 +0200 Subject: [PATCH 02/11] tests: Improve test coverage of py/profile.c. Signed-off-by: Jeff Epler --- tests/misc/sys_settrace_cov.py | 23 +++++++++++++++++++++++ tests/misc/sys_settrace_cov.py.exp | 2 ++ tests/ports/unix/extra_coverage.py.exp | 4 ++-- tests/run-tests.py | 1 + 4 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 tests/misc/sys_settrace_cov.py create mode 100644 tests/misc/sys_settrace_cov.py.exp diff --git a/tests/misc/sys_settrace_cov.py b/tests/misc/sys_settrace_cov.py new file mode 100644 index 0000000000000..579c8a4a25e50 --- /dev/null +++ b/tests/misc/sys_settrace_cov.py @@ -0,0 +1,23 @@ +import sys + +try: + sys.settrace +except AttributeError: + print("SKIP") + raise SystemExit + + +def trace_tick_handler(frame, event, arg): + print("FRAME", frame) + print("LASTI", frame.f_lasti) + return None + + +def f(): + x = 3 + return x + + +sys.settrace(trace_tick_handler) +f() +sys.settrace(None) diff --git a/tests/misc/sys_settrace_cov.py.exp b/tests/misc/sys_settrace_cov.py.exp new file mode 100644 index 0000000000000..423d78ec42b89 --- /dev/null +++ b/tests/misc/sys_settrace_cov.py.exp @@ -0,0 +1,2 @@ +FRAME +LASTI \\d\+ diff --git a/tests/ports/unix/extra_coverage.py.exp b/tests/ports/unix/extra_coverage.py.exp index ac64edde6925b..ed21ced24258b 100644 --- a/tests/ports/unix/extra_coverage.py.exp +++ b/tests/ports/unix/extra_coverage.py.exp @@ -69,8 +69,8 @@ argv atexit byteorder exc_info executable exit getsizeof implementation intern maxsize modules path platform print_exception ps1 -ps2 stderr stdin stdout -tracebacklimit version version_info +ps2 settrace stderr stdin +stdout tracebacklimit version version_info ementation # attrtuple (start=1, stop=2, step=3) diff --git a/tests/run-tests.py b/tests/run-tests.py index e45122b10edda..d1d22a3c53809 100755 --- a/tests/run-tests.py +++ b/tests/run-tests.py @@ -354,6 +354,7 @@ def run_script_on_remote_target(pyb, args, test_file, is_special): "micropython/meminfo.py", "basics/bytes_compare3.py", "basics/builtin_help.py", + "misc/sys_settrace_cov.py", "thread/thread_exc2.py", "ports/esp32/partition_ota.py", ) From f25c1cdc9ded6e9dfe79e0986326d5c6c3d260e2 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Fri, 20 Jun 2025 20:53:42 +0200 Subject: [PATCH 03/11] sys_settrace_features: Add expected output. This side-steps the problem where the output does not match when the host python version is 3.12.x (as it is on unix ci today). Signed-off-by: Jeff Epler --- tests/misc/sys_settrace_features.py.exp | 738 ++++++++++++++++++++++++ 1 file changed, 738 insertions(+) create mode 100644 tests/misc/sys_settrace_features.py.exp diff --git a/tests/misc/sys_settrace_features.py.exp b/tests/misc/sys_settrace_features.py.exp new file mode 100644 index 0000000000000..67340805b3b5d --- /dev/null +++ b/tests/misc/sys_settrace_features.py.exp @@ -0,0 +1,738 @@ +### trace_handler::main event: call + 0: @__main__:do_tests => sys_settrace_features.py:105 + 1: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @__main__:do_tests => sys_settrace_features.py:107 + 1: @__main__: => sys_settrace_features.py:117 +Who loves the sun? +### trace_handler::main event: line + 0: @__main__:do_tests => sys_settrace_features.py:108 + 1: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @__main__:factorial => sys_settrace_features.py:98 + 1: @__main__:do_tests => sys_settrace_features.py:108 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::Alice event: line + 0: @__main__:factorial => sys_settrace_features.py:99 + 1: @__main__:do_tests => sys_settrace_features.py:108 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::Alice event: line + 0: @__main__:factorial => sys_settrace_features.py:102 + 1: @__main__:do_tests => sys_settrace_features.py:108 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @__main__:factorial => sys_settrace_features.py:98 + 1: @__main__:factorial => sys_settrace_features.py:102 + 2: @__main__:do_tests => sys_settrace_features.py:108 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::Bob event: line + 0: @__main__:factorial => sys_settrace_features.py:99 + 1: @__main__:factorial => sys_settrace_features.py:102 + 2: @__main__:do_tests => sys_settrace_features.py:108 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::Bob event: line + 0: @__main__:factorial => sys_settrace_features.py:102 + 1: @__main__:factorial => sys_settrace_features.py:102 + 2: @__main__:do_tests => sys_settrace_features.py:108 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @__main__:factorial => sys_settrace_features.py:98 + 1: @__main__:factorial => sys_settrace_features.py:102 + 2: @__main__:factorial => sys_settrace_features.py:102 + 3: @__main__:do_tests => sys_settrace_features.py:108 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @__main__:factorial => sys_settrace_features.py:99 + 1: @__main__:factorial => sys_settrace_features.py:102 + 2: @__main__:factorial => sys_settrace_features.py:102 + 3: @__main__:do_tests => sys_settrace_features.py:108 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @__main__:factorial => sys_settrace_features.py:102 + 1: @__main__:factorial => sys_settrace_features.py:102 + 2: @__main__:factorial => sys_settrace_features.py:102 + 3: @__main__:do_tests => sys_settrace_features.py:108 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @__main__:factorial => sys_settrace_features.py:98 + 1: @__main__:factorial => sys_settrace_features.py:102 + 2: @__main__:factorial => sys_settrace_features.py:102 + 3: @__main__:factorial => sys_settrace_features.py:102 + 4: @__main__:do_tests => sys_settrace_features.py:108 + 5: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @__main__:factorial => sys_settrace_features.py:99 + 1: @__main__:factorial => sys_settrace_features.py:102 + 2: @__main__:factorial => sys_settrace_features.py:102 + 3: @__main__:factorial => sys_settrace_features.py:102 + 4: @__main__:do_tests => sys_settrace_features.py:108 + 5: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @__main__:factorial => sys_settrace_features.py:100 + 1: @__main__:factorial => sys_settrace_features.py:102 + 2: @__main__:factorial => sys_settrace_features.py:102 + 3: @__main__:factorial => sys_settrace_features.py:102 + 4: @__main__:do_tests => sys_settrace_features.py:108 + 5: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: return + 0: @__main__:factorial => sys_settrace_features.py:100 + 1: @__main__:factorial => sys_settrace_features.py:102 + 2: @__main__:factorial => sys_settrace_features.py:102 + 3: @__main__:factorial => sys_settrace_features.py:102 + 4: @__main__:do_tests => sys_settrace_features.py:108 + 5: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: return + 0: @__main__:factorial => sys_settrace_features.py:102 + 1: @__main__:factorial => sys_settrace_features.py:102 + 2: @__main__:factorial => sys_settrace_features.py:102 + 3: @__main__:do_tests => sys_settrace_features.py:108 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::Bob event: return + 0: @__main__:factorial => sys_settrace_features.py:102 + 1: @__main__:factorial => sys_settrace_features.py:102 + 2: @__main__:do_tests => sys_settrace_features.py:108 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::Alice event: return + 0: @__main__:factorial => sys_settrace_features.py:102 + 1: @__main__:do_tests => sys_settrace_features.py:108 + 2: @__main__: => sys_settrace_features.py:117 +Not every- 6 +### trace_handler::main event: line + 0: @__main__:do_tests => sys_settrace_features.py:110 + 1: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:1 + 1: @__main__:do_tests => sys_settrace_features.py:110 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:1 + 1: @__main__:do_tests => sys_settrace_features.py:110 + 2: @__main__: => sys_settrace_features.py:117 +Now comes the language constructions tests. +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:5 + 1: @__main__:do_tests => sys_settrace_features.py:110 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:13 + 1: @__main__:do_tests => sys_settrace_features.py:110 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:21 + 1: @__main__:do_tests => sys_settrace_features.py:110 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:33 + 1: @__main__:do_tests => sys_settrace_features.py:110 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:38 + 1: @__main__:do_tests => sys_settrace_features.py:110 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:44 + 1: @__main__:do_tests => sys_settrace_features.py:110 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:52 + 1: @__main__:do_tests => sys_settrace_features.py:110 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic:TLClass => sys_settrace_generic.py:52 + 1: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:52 + 2: @__main__:do_tests => sys_settrace_features.py:110 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:TLClass => sys_settrace_generic.py:52 + 1: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:52 + 2: @__main__:do_tests => sys_settrace_features.py:110 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:TLClass => sys_settrace_generic.py:53 + 1: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:52 + 2: @__main__:do_tests => sys_settrace_features.py:110 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:TLClass => sys_settrace_generic.py:56 + 1: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:52 + 2: @__main__:do_tests => sys_settrace_features.py:110 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic:TLClass => sys_settrace_generic.py:56 + 1: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:52 + 2: @__main__:do_tests => sys_settrace_features.py:110 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:59 + 1: @__main__:do_tests => sys_settrace_features.py:110 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:82 + 1: @__main__:do_tests => sys_settrace_features.py:110 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:93 + 1: @__main__:do_tests => sys_settrace_features.py:110 + 2: @__main__: => sys_settrace_features.py:117 +And it's done! +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:93 + 1: @__main__:do_tests => sys_settrace_features.py:110 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @__main__:do_tests => sys_settrace_features.py:112 + 1: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:82 + 1: @__main__:do_tests => sys_settrace_features.py:112 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:83 + 1: @__main__:do_tests => sys_settrace_features.py:112 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic:test_func => sys_settrace_generic.py:5 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:83 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_func => sys_settrace_generic.py:6 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:83 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_func => sys_settrace_generic.py:9 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:83 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic:test_sub_func => sys_settrace_generic.py:6 + 1: @sys_settrace_subdir.sys_settrace_generic:test_func => sys_settrace_generic.py:9 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:83 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_sub_func => sys_settrace_generic.py:7 + 1: @sys_settrace_subdir.sys_settrace_generic:test_func => sys_settrace_generic.py:9 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:83 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +test_function +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic:test_sub_func => sys_settrace_generic.py:7 + 1: @sys_settrace_subdir.sys_settrace_generic:test_func => sys_settrace_generic.py:9 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:83 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic:test_func => sys_settrace_generic.py:9 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:83 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:84 + 1: @__main__:do_tests => sys_settrace_features.py:112 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic:test_closure => sys_settrace_generic.py:13 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:84 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_closure => sys_settrace_generic.py:14 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:84 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_closure => sys_settrace_generic.py:17 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:84 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic:test_closure => sys_settrace_generic.py:17 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:84 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:85 + 1: @__main__:do_tests => sys_settrace_features.py:112 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic:make_closure => sys_settrace_generic.py:14 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:85 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:make_closure => sys_settrace_generic.py:15 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:85 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +test_closure +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic:make_closure => sys_settrace_generic.py:15 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:85 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 + 1: @__main__:do_tests => sys_settrace_features.py:112 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic:test_exception => sys_settrace_generic.py:21 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_exception => sys_settrace_generic.py:22 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_exception => sys_settrace_generic.py:23 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: exception + 0: @sys_settrace_subdir.sys_settrace_generic:test_exception => sys_settrace_generic.py:23 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_exception => sys_settrace_generic.py:25 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_exception => sys_settrace_generic.py:26 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_exception => sys_settrace_generic.py:29 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic:test_exception => sys_settrace_generic.py:29 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 + 1: @__main__:do_tests => sys_settrace_features.py:112 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:33 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:34 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:34 + 1: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:34 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:34 + 1: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:34 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:34 + 1: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:34 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:34 + 1: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:34 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:34 + 1: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:34 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:34 + 1: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:34 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +test_listcomp [0, 1, 2] +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:34 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:88 + 1: @__main__:do_tests => sys_settrace_features.py:112 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic:test_lambda => sys_settrace_generic.py:38 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:88 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_lambda => sys_settrace_generic.py:39 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:88 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_lambda => sys_settrace_generic.py:40 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:88 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:39 + 1: @sys_settrace_subdir.sys_settrace_generic:test_lambda => sys_settrace_generic.py:40 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:88 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:39 + 1: @sys_settrace_subdir.sys_settrace_generic:test_lambda => sys_settrace_generic.py:40 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:88 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:39 + 1: @sys_settrace_subdir.sys_settrace_generic:test_lambda => sys_settrace_generic.py:40 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:88 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +30 +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic:test_lambda => sys_settrace_generic.py:40 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:88 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 1: @__main__:do_tests => sys_settrace_features.py:112 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:59 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic:TestClass => sys_settrace_generic.py:60 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:TestClass => sys_settrace_generic.py:60 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:TestClass => sys_settrace_generic.py:61 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:TestClass => sys_settrace_generic.py:63 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:TestClass => sys_settrace_generic.py:67 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:TestClass => sys_settrace_generic.py:70 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:TestClass => sys_settrace_generic.py:73 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic:TestClass => sys_settrace_generic.py:73 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:75 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:76 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic:method => sys_settrace_generic.py:63 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:76 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:method => sys_settrace_generic.py:64 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:76 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +test_class_method +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:method => sys_settrace_generic.py:65 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:76 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic:method => sys_settrace_generic.py:65 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:76 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:77 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic:prprty_getter => sys_settrace_generic.py:67 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:77 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:prprty_getter => sys_settrace_generic.py:68 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:77 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic:prprty_getter => sys_settrace_generic.py:68 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:77 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +test_class_property -8 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:78 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic:prprty_setter => sys_settrace_generic.py:70 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:78 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:prprty_setter => sys_settrace_generic.py:71 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:78 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic:prprty_setter => sys_settrace_generic.py:71 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:78 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:79 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic:prprty_getter => sys_settrace_generic.py:67 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:79 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:prprty_getter => sys_settrace_generic.py:68 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:79 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic:prprty_getter => sys_settrace_generic.py:68 + 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:79 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +test_class_property 12 +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:79 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 1: @__main__:do_tests => sys_settrace_features.py:112 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:44 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:1 + 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:1 + 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +Yep, I got imported. +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:3 + 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:11 + 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:18 + 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:19 + 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:22 + 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:26 + 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:30 + 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:34 + 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +Yep, got here +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:34 + 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:47 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_importme:dummy => sys_settrace_importme.py:22 + 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:47 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_importme:dummy => sys_settrace_importme.py:23 + 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:47 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_importme:dummy => sys_settrace_importme.py:23 + 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:47 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:48 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: call + 0: @sys_settrace_subdir.sys_settrace_importme:saysomething => sys_settrace_importme.py:26 + 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:48 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @sys_settrace_subdir.sys_settrace_importme:saysomething => sys_settrace_importme.py:27 + 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:48 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +There, I said it. +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_importme:saysomething => sys_settrace_importme.py:27 + 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:48 + 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 3: @__main__:do_tests => sys_settrace_features.py:112 + 4: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:48 + 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 2: @__main__:do_tests => sys_settrace_features.py:112 + 3: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: return + 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 + 1: @__main__:do_tests => sys_settrace_features.py:112 + 2: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: line + 0: @__main__:do_tests => sys_settrace_features.py:113 + 1: @__main__: => sys_settrace_features.py:117 +### trace_handler::main event: return + 0: @__main__:do_tests => sys_settrace_features.py:113 + 1: @__main__: => sys_settrace_features.py:117 + +------------------ script exited ------------------ +Total traces executed: 140 From 01287870ad21a6f526a2e9c2ef711511bb129c92 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Sat, 21 Jun 2025 08:24:21 +0200 Subject: [PATCH 04/11] runtime: Initialize fields in mp_thread_init_state. If the fields added for MICROPY_PY_SYS_SETTRACE are not initialized properly, their value in a thread is indeterminate. In particular, if the callback is not NULL, it will be invoked as a function. Signed-off-by: Jeff Epler --- py/runtime.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/py/runtime.h b/py/runtime.h index a93488e2cdc04..2613ca5c0dd02 100644 --- a/py/runtime.h +++ b/py/runtime.h @@ -169,6 +169,12 @@ static inline void mp_thread_init_state(mp_state_thread_t *ts, size_t stack_size ts->nlr_jump_callback_top = NULL; ts->mp_pending_exception = MP_OBJ_NULL; + #if MICROPY_PY_SYS_SETTRACE + ts->prof_trace_callback = MP_OBJ_NULL; + ts->prof_callback_is_executing = 0; + ts->current_code_state = NULL; + #endif + // If locals/globals are not given, inherit from main thread if (locals == NULL) { locals = mp_state_ctx.thread.dict_locals; From 73f03f2e4a3f4bc09dd53d601069c3cc6791d6f9 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Sat, 21 Jun 2025 08:26:20 +0200 Subject: [PATCH 05/11] coverage: Initialize more code_state fields. When MICROPY_PY_SYS_SETTRACE was enabled, a crash was seen in the qemu_mips build. It seems likely that this was due to these added fields not being initialized. Signed-off-by: Jeff Epler --- ports/unix/coverage.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ports/unix/coverage.c b/ports/unix/coverage.c index b041141f0f1ae..33e4208d9248c 100644 --- a/ports/unix/coverage.c +++ b/ports/unix/coverage.c @@ -582,12 +582,24 @@ static mp_obj_t extra_coverage(void) { fun_bc.context = &context; fun_bc.child_table = NULL; fun_bc.bytecode = (const byte *)"\x01"; // just needed for n_state + #if MICROPY_PY_SYS_SETTRACE + struct _mp_raw_code_t rc = {}; + fun_bc.rc = &rc; + #endif mp_code_state_t *code_state = m_new_obj_var(mp_code_state_t, state, mp_obj_t, 1); code_state->fun_bc = &fun_bc; code_state->ip = (const byte *)"\x00"; // just needed for an invalid opcode code_state->sp = &code_state->state[0]; code_state->exc_sp_idx = 0; code_state->old_globals = NULL; + #if MICROPY_STACKLESS + code_state->prev = NULL; + #endif + #if MICROPY_PY_SYS_SETTRACE + code_state->prev_state = NULL; + code_state->frame = NULL; + #endif + mp_vm_return_kind_t ret = mp_execute_bytecode(code_state, MP_OBJ_NULL); mp_printf(&mp_plat_print, "%d %d\n", ret, mp_obj_get_type(code_state->state[0]) == &mp_type_NotImplementedError); } From 9994b4335f3127bfb9048092ff1d1afe6fcf4c6b Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Sat, 21 Jun 2025 09:35:39 +0200 Subject: [PATCH 06/11] profile: Fix printing frame objects. The argument corresponding to a `%q` specifier must be of type `qstr`, not a narrower type like `int16_t`. Not ensuring this caused an assertion error on one Windows x64 build. The argument corresponding to a `%d` specifier must be of type `int`, not a potentially-wider type like `mp_uint_t`. Not ensuring this prevented the function name from being printed on the unix nanbox build. Signed-off-by: Jeff Epler --- py/objcode.h | 2 +- py/profile.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/py/objcode.h b/py/objcode.h index 8db9a34b6e1c9..aacbe170170cf 100644 --- a/py/objcode.h +++ b/py/objcode.h @@ -72,7 +72,7 @@ static inline const void *mp_code_get_proto_fun(mp_obj_code_t *self) { #include "py/emitglue.h" -#define MP_CODE_QSTR_MAP(context, idx) (context->constants.qstr_table[idx]) +#define MP_CODE_QSTR_MAP(context, idx) (qstr)(context->constants.qstr_table[idx]) typedef struct _mp_obj_code_t { // TODO this was 4 words diff --git a/py/profile.c b/py/profile.c index 397d0291f9fad..b5a0c54728c97 100644 --- a/py/profile.c +++ b/py/profile.c @@ -80,7 +80,7 @@ static void frame_print(const mp_print_t *print, mp_obj_t o_in, mp_print_kind_t "", frame, MP_CODE_QSTR_MAP(code->context, 0), - frame->lineno, + (int)frame->lineno, MP_CODE_QSTR_MAP(code->context, prelude->qstr_block_name_idx) ); } From 1ab8fb08e0048296f3facb09e9215a6ec9e04a35 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 2 Jul 2025 21:33:34 +0100 Subject: [PATCH 07/11] ci: Remove the "settrace" build. This becomes redundant when the main coverage build includes settrace. Signed-off-by: Jeff Epler --- .github/workflows/ports_unix.yml | 17 ----------------- tools/ci.sh | 17 ----------------- 2 files changed, 34 deletions(-) diff --git a/.github/workflows/ports_unix.yml b/.github/workflows/ports_unix.yml index c5223a71e6cb8..e3ebcfda3d88c 100644 --- a/.github/workflows/ports_unix.yml +++ b/.github/workflows/ports_unix.yml @@ -169,23 +169,6 @@ jobs: if: failure() run: tests/run-tests.py --print-failures - settrace: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - # Python 3.12 is the default for ubuntu-24.04, but that has compatibility issues with settrace tests. - # Can remove this step when ubuntu-latest uses a more recent Python 3.x as the default. - with: - python-version: '3.11' - - name: Build - run: source tools/ci.sh && ci_unix_settrace_build - - name: Run main test suite - run: source tools/ci.sh && ci_unix_settrace_run_tests - - name: Print failures - if: failure() - run: tests/run-tests.py --print-failures - settrace_stackless: runs-on: ubuntu-latest steps: diff --git a/tools/ci.sh b/tools/ci.sh index 8254336258494..2f62f3efe9586 100755 --- a/tools/ci.sh +++ b/tools/ci.sh @@ -480,13 +480,6 @@ function ci_stm32_misc_build { ######################################################################################## # ports/unix -CI_UNIX_OPTS_SYS_SETTRACE=( - MICROPY_PY_BTREE=0 - MICROPY_PY_FFI=0 - MICROPY_PY_SSL=0 - CFLAGS_EXTRA="-DMICROPY_PY_SYS_SETTRACE=1" -) - CI_UNIX_OPTS_SYS_SETTRACE_STACKLESS=( MICROPY_PY_BTREE=0 MICROPY_PY_FFI=0 @@ -734,16 +727,6 @@ function ci_unix_float_clang_run_tests { ci_unix_run_tests_helper CC=clang } -function ci_unix_settrace_build { - make ${MAKEOPTS} -C mpy-cross - make ${MAKEOPTS} -C ports/unix submodules - make ${MAKEOPTS} -C ports/unix "${CI_UNIX_OPTS_SYS_SETTRACE[@]}" -} - -function ci_unix_settrace_run_tests { - ci_unix_run_tests_full_helper standard "${CI_UNIX_OPTS_SYS_SETTRACE[@]}" -} - function ci_unix_settrace_stackless_build { make ${MAKEOPTS} -C mpy-cross make ${MAKEOPTS} -C ports/unix submodules From 5b00f0f1ff15cb4d04c453b338611484f02e07ca Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 3 Jul 2025 20:11:03 +0100 Subject: [PATCH 08/11] tests: Increase test timeout in coverage build. The additional overhead of the settrace profiler means that the `aes_stress.py` test was running too slowly on GitHub CI. Double the timeout to 60 seconds. Signed-off-by: Jeff Epler --- tests/run-tests.py | 2 +- tools/ci.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/run-tests.py b/tests/run-tests.py index d1d22a3c53809..faf1d2e3b485e 100755 --- a/tests/run-tests.py +++ b/tests/run-tests.py @@ -16,7 +16,7 @@ import tempfile # Maximum time to run a PC-based test, in seconds. -TEST_TIMEOUT = 30 +TEST_TIMEOUT = float(os.environ.get('MICROPY_TEST_TIMEOUT', 30)) # See stackoverflow.com/questions/2632199: __file__ nor sys.argv[0] # are guaranteed to always work, this one should though. diff --git a/tools/ci.sh b/tools/ci.sh index 2f62f3efe9586..2f0b742428b46 100755 --- a/tools/ci.sh +++ b/tools/ci.sh @@ -625,7 +625,7 @@ function ci_unix_coverage_build { } function ci_unix_coverage_run_tests { - ci_unix_run_tests_full_helper coverage + MICROPY_TEST_TIMEOUT=60 ci_unix_run_tests_full_helper coverage } function ci_unix_coverage_run_mpy_merge_tests { @@ -745,7 +745,7 @@ function ci_unix_sanitize_undefined_build { } function ci_unix_sanitize_undefined_run_tests { - ci_unix_run_tests_full_helper coverage "${CI_UNIX_OPTS_SANITIZE_UNDEFINED[@]}" + MICROPY_TEST_TIMEOUT=60 ci_unix_run_tests_full_helper coverage "${CI_UNIX_OPTS_SANITIZE_UNDEFINED[@]}" } function ci_unix_sanitize_address_build { @@ -756,7 +756,7 @@ function ci_unix_sanitize_address_build { } function ci_unix_sanitize_address_run_tests { - ci_unix_run_tests_full_helper coverage "${CI_UNIX_OPTS_SANITIZE_ADDRESS[@]}" + MICROPY_TEST_TIMEOUT=60 ci_unix_run_tests_full_helper coverage "${CI_UNIX_OPTS_SANITIZE_ADDRESS[@]}" } function ci_unix_macos_build { From bfe333772a33f08f1bb25c140db19434e865dc60 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Fri, 4 Jul 2025 09:56:29 +0100 Subject: [PATCH 09/11] ci: Use Python 3.11 for coverage testing. This removes the need for the `sys_settrace_features.py.exp` file. This means that people testing locally will also need to install Python 3.11 in some way, such as with pyenv or uv, and use it during `make VARIANT=coverage test`, or they will get failures. When using python from GitHub actions/setup-python, pip3 can't be wrapped by sudo, because this invokes the operating system python instead. Signed-off-by: Jeff Epler --- .github/workflows/ports_unix.yml | 15 + tests/misc/sys_settrace_features.py.exp | 738 ------------------------ tools/ci.sh | 6 +- 3 files changed, 18 insertions(+), 741 deletions(-) delete mode 100644 tests/misc/sys_settrace_features.py.exp diff --git a/.github/workflows/ports_unix.yml b/.github/workflows/ports_unix.yml index e3ebcfda3d88c..4b22926eaf8e5 100644 --- a/.github/workflows/ports_unix.yml +++ b/.github/workflows/ports_unix.yml @@ -71,6 +71,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + # Python 3.12 is the default for ubuntu-24.04, but that has compatibility issues with settrace tests. + # Can remove this step when ubuntu-latest uses a more recent Python 3.x as the default. + with: + python-version: '3.11' - name: Install packages run: source tools/ci.sh && ci_unix_coverage_setup - name: Build @@ -250,6 +255,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + # Python 3.12 is the default for ubuntu-24.04, but that has compatibility issues with settrace tests. + # Can remove this step when ubuntu-latest uses a more recent Python 3.x as the default. + with: + python-version: '3.11' - name: Install packages run: source tools/ci.sh && ci_unix_coverage_setup - name: Build @@ -270,6 +280,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + # Python 3.12 is the default for ubuntu-24.04, but that has compatibility issues with settrace tests. + # Can remove this step when ubuntu-latest uses a more recent Python 3.x as the default. + with: + python-version: '3.11' - name: Install packages run: source tools/ci.sh && ci_unix_coverage_setup - name: Build diff --git a/tests/misc/sys_settrace_features.py.exp b/tests/misc/sys_settrace_features.py.exp deleted file mode 100644 index 67340805b3b5d..0000000000000 --- a/tests/misc/sys_settrace_features.py.exp +++ /dev/null @@ -1,738 +0,0 @@ -### trace_handler::main event: call - 0: @__main__:do_tests => sys_settrace_features.py:105 - 1: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @__main__:do_tests => sys_settrace_features.py:107 - 1: @__main__: => sys_settrace_features.py:117 -Who loves the sun? -### trace_handler::main event: line - 0: @__main__:do_tests => sys_settrace_features.py:108 - 1: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @__main__:factorial => sys_settrace_features.py:98 - 1: @__main__:do_tests => sys_settrace_features.py:108 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::Alice event: line - 0: @__main__:factorial => sys_settrace_features.py:99 - 1: @__main__:do_tests => sys_settrace_features.py:108 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::Alice event: line - 0: @__main__:factorial => sys_settrace_features.py:102 - 1: @__main__:do_tests => sys_settrace_features.py:108 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @__main__:factorial => sys_settrace_features.py:98 - 1: @__main__:factorial => sys_settrace_features.py:102 - 2: @__main__:do_tests => sys_settrace_features.py:108 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::Bob event: line - 0: @__main__:factorial => sys_settrace_features.py:99 - 1: @__main__:factorial => sys_settrace_features.py:102 - 2: @__main__:do_tests => sys_settrace_features.py:108 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::Bob event: line - 0: @__main__:factorial => sys_settrace_features.py:102 - 1: @__main__:factorial => sys_settrace_features.py:102 - 2: @__main__:do_tests => sys_settrace_features.py:108 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @__main__:factorial => sys_settrace_features.py:98 - 1: @__main__:factorial => sys_settrace_features.py:102 - 2: @__main__:factorial => sys_settrace_features.py:102 - 3: @__main__:do_tests => sys_settrace_features.py:108 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @__main__:factorial => sys_settrace_features.py:99 - 1: @__main__:factorial => sys_settrace_features.py:102 - 2: @__main__:factorial => sys_settrace_features.py:102 - 3: @__main__:do_tests => sys_settrace_features.py:108 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @__main__:factorial => sys_settrace_features.py:102 - 1: @__main__:factorial => sys_settrace_features.py:102 - 2: @__main__:factorial => sys_settrace_features.py:102 - 3: @__main__:do_tests => sys_settrace_features.py:108 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @__main__:factorial => sys_settrace_features.py:98 - 1: @__main__:factorial => sys_settrace_features.py:102 - 2: @__main__:factorial => sys_settrace_features.py:102 - 3: @__main__:factorial => sys_settrace_features.py:102 - 4: @__main__:do_tests => sys_settrace_features.py:108 - 5: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @__main__:factorial => sys_settrace_features.py:99 - 1: @__main__:factorial => sys_settrace_features.py:102 - 2: @__main__:factorial => sys_settrace_features.py:102 - 3: @__main__:factorial => sys_settrace_features.py:102 - 4: @__main__:do_tests => sys_settrace_features.py:108 - 5: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @__main__:factorial => sys_settrace_features.py:100 - 1: @__main__:factorial => sys_settrace_features.py:102 - 2: @__main__:factorial => sys_settrace_features.py:102 - 3: @__main__:factorial => sys_settrace_features.py:102 - 4: @__main__:do_tests => sys_settrace_features.py:108 - 5: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: return - 0: @__main__:factorial => sys_settrace_features.py:100 - 1: @__main__:factorial => sys_settrace_features.py:102 - 2: @__main__:factorial => sys_settrace_features.py:102 - 3: @__main__:factorial => sys_settrace_features.py:102 - 4: @__main__:do_tests => sys_settrace_features.py:108 - 5: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: return - 0: @__main__:factorial => sys_settrace_features.py:102 - 1: @__main__:factorial => sys_settrace_features.py:102 - 2: @__main__:factorial => sys_settrace_features.py:102 - 3: @__main__:do_tests => sys_settrace_features.py:108 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::Bob event: return - 0: @__main__:factorial => sys_settrace_features.py:102 - 1: @__main__:factorial => sys_settrace_features.py:102 - 2: @__main__:do_tests => sys_settrace_features.py:108 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::Alice event: return - 0: @__main__:factorial => sys_settrace_features.py:102 - 1: @__main__:do_tests => sys_settrace_features.py:108 - 2: @__main__: => sys_settrace_features.py:117 -Not every- 6 -### trace_handler::main event: line - 0: @__main__:do_tests => sys_settrace_features.py:110 - 1: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:1 - 1: @__main__:do_tests => sys_settrace_features.py:110 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:1 - 1: @__main__:do_tests => sys_settrace_features.py:110 - 2: @__main__: => sys_settrace_features.py:117 -Now comes the language constructions tests. -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:5 - 1: @__main__:do_tests => sys_settrace_features.py:110 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:13 - 1: @__main__:do_tests => sys_settrace_features.py:110 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:21 - 1: @__main__:do_tests => sys_settrace_features.py:110 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:33 - 1: @__main__:do_tests => sys_settrace_features.py:110 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:38 - 1: @__main__:do_tests => sys_settrace_features.py:110 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:44 - 1: @__main__:do_tests => sys_settrace_features.py:110 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:52 - 1: @__main__:do_tests => sys_settrace_features.py:110 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic:TLClass => sys_settrace_generic.py:52 - 1: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:52 - 2: @__main__:do_tests => sys_settrace_features.py:110 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:TLClass => sys_settrace_generic.py:52 - 1: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:52 - 2: @__main__:do_tests => sys_settrace_features.py:110 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:TLClass => sys_settrace_generic.py:53 - 1: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:52 - 2: @__main__:do_tests => sys_settrace_features.py:110 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:TLClass => sys_settrace_generic.py:56 - 1: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:52 - 2: @__main__:do_tests => sys_settrace_features.py:110 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic:TLClass => sys_settrace_generic.py:56 - 1: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:52 - 2: @__main__:do_tests => sys_settrace_features.py:110 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:59 - 1: @__main__:do_tests => sys_settrace_features.py:110 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:82 - 1: @__main__:do_tests => sys_settrace_features.py:110 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:93 - 1: @__main__:do_tests => sys_settrace_features.py:110 - 2: @__main__: => sys_settrace_features.py:117 -And it's done! -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:93 - 1: @__main__:do_tests => sys_settrace_features.py:110 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @__main__:do_tests => sys_settrace_features.py:112 - 1: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:82 - 1: @__main__:do_tests => sys_settrace_features.py:112 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:83 - 1: @__main__:do_tests => sys_settrace_features.py:112 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic:test_func => sys_settrace_generic.py:5 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:83 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_func => sys_settrace_generic.py:6 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:83 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_func => sys_settrace_generic.py:9 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:83 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic:test_sub_func => sys_settrace_generic.py:6 - 1: @sys_settrace_subdir.sys_settrace_generic:test_func => sys_settrace_generic.py:9 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:83 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_sub_func => sys_settrace_generic.py:7 - 1: @sys_settrace_subdir.sys_settrace_generic:test_func => sys_settrace_generic.py:9 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:83 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -test_function -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic:test_sub_func => sys_settrace_generic.py:7 - 1: @sys_settrace_subdir.sys_settrace_generic:test_func => sys_settrace_generic.py:9 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:83 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic:test_func => sys_settrace_generic.py:9 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:83 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:84 - 1: @__main__:do_tests => sys_settrace_features.py:112 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic:test_closure => sys_settrace_generic.py:13 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:84 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_closure => sys_settrace_generic.py:14 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:84 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_closure => sys_settrace_generic.py:17 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:84 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic:test_closure => sys_settrace_generic.py:17 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:84 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:85 - 1: @__main__:do_tests => sys_settrace_features.py:112 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic:make_closure => sys_settrace_generic.py:14 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:85 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:make_closure => sys_settrace_generic.py:15 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:85 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -test_closure -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic:make_closure => sys_settrace_generic.py:15 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:85 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 - 1: @__main__:do_tests => sys_settrace_features.py:112 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic:test_exception => sys_settrace_generic.py:21 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_exception => sys_settrace_generic.py:22 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_exception => sys_settrace_generic.py:23 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: exception - 0: @sys_settrace_subdir.sys_settrace_generic:test_exception => sys_settrace_generic.py:23 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_exception => sys_settrace_generic.py:25 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_exception => sys_settrace_generic.py:26 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_exception => sys_settrace_generic.py:29 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic:test_exception => sys_settrace_generic.py:29 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:86 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 - 1: @__main__:do_tests => sys_settrace_features.py:112 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:33 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:34 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:34 - 1: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:34 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:34 - 1: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:34 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:34 - 1: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:34 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:34 - 1: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:34 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:34 - 1: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:34 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:34 - 1: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:34 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -test_listcomp [0, 1, 2] -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic:test_listcomp => sys_settrace_generic.py:34 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:87 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:88 - 1: @__main__:do_tests => sys_settrace_features.py:112 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic:test_lambda => sys_settrace_generic.py:38 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:88 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_lambda => sys_settrace_generic.py:39 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:88 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_lambda => sys_settrace_generic.py:40 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:88 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:39 - 1: @sys_settrace_subdir.sys_settrace_generic:test_lambda => sys_settrace_generic.py:40 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:88 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:39 - 1: @sys_settrace_subdir.sys_settrace_generic:test_lambda => sys_settrace_generic.py:40 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:88 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic: => sys_settrace_generic.py:39 - 1: @sys_settrace_subdir.sys_settrace_generic:test_lambda => sys_settrace_generic.py:40 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:88 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -30 -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic:test_lambda => sys_settrace_generic.py:40 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:88 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 1: @__main__:do_tests => sys_settrace_features.py:112 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:59 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic:TestClass => sys_settrace_generic.py:60 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:TestClass => sys_settrace_generic.py:60 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:TestClass => sys_settrace_generic.py:61 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:TestClass => sys_settrace_generic.py:63 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:TestClass => sys_settrace_generic.py:67 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:TestClass => sys_settrace_generic.py:70 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:TestClass => sys_settrace_generic.py:73 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic:TestClass => sys_settrace_generic.py:73 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:60 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:75 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:76 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic:method => sys_settrace_generic.py:63 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:76 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:method => sys_settrace_generic.py:64 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:76 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -test_class_method -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:method => sys_settrace_generic.py:65 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:76 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic:method => sys_settrace_generic.py:65 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:76 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:77 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic:prprty_getter => sys_settrace_generic.py:67 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:77 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:prprty_getter => sys_settrace_generic.py:68 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:77 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic:prprty_getter => sys_settrace_generic.py:68 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:77 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -test_class_property -8 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:78 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic:prprty_setter => sys_settrace_generic.py:70 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:78 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:prprty_setter => sys_settrace_generic.py:71 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:78 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic:prprty_setter => sys_settrace_generic.py:71 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:78 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:79 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic:prprty_getter => sys_settrace_generic.py:67 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:79 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:prprty_getter => sys_settrace_generic.py:68 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:79 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic:prprty_getter => sys_settrace_generic.py:68 - 1: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:79 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -test_class_property 12 -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic:test_class => sys_settrace_generic.py:79 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:89 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 1: @__main__:do_tests => sys_settrace_features.py:112 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:44 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:1 - 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:1 - 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -Yep, I got imported. -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:3 - 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:11 - 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:18 - 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:19 - 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:22 - 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:26 - 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:30 - 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:34 - 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -Yep, got here -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_importme: => sys_settrace_importme.py:34 - 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:45 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:47 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_importme:dummy => sys_settrace_importme.py:22 - 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:47 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_importme:dummy => sys_settrace_importme.py:23 - 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:47 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_importme:dummy => sys_settrace_importme.py:23 - 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:47 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:48 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: call - 0: @sys_settrace_subdir.sys_settrace_importme:saysomething => sys_settrace_importme.py:26 - 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:48 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @sys_settrace_subdir.sys_settrace_importme:saysomething => sys_settrace_importme.py:27 - 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:48 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -There, I said it. -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_importme:saysomething => sys_settrace_importme.py:27 - 1: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:48 - 2: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 3: @__main__:do_tests => sys_settrace_features.py:112 - 4: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic:test_import => sys_settrace_generic.py:48 - 1: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 2: @__main__:do_tests => sys_settrace_features.py:112 - 3: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: return - 0: @sys_settrace_subdir.sys_settrace_generic:run_tests => sys_settrace_generic.py:90 - 1: @__main__:do_tests => sys_settrace_features.py:112 - 2: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: line - 0: @__main__:do_tests => sys_settrace_features.py:113 - 1: @__main__: => sys_settrace_features.py:117 -### trace_handler::main event: return - 0: @__main__:do_tests => sys_settrace_features.py:113 - 1: @__main__: => sys_settrace_features.py:117 - ------------------- script exited ------------------ -Total traces executed: 140 diff --git a/tools/ci.sh b/tools/ci.sh index 2f0b742428b46..4007dfebfc3a2 100755 --- a/tools/ci.sh +++ b/tools/ci.sh @@ -612,9 +612,9 @@ function ci_unix_standard_v2_run_tests { } function ci_unix_coverage_setup { - sudo pip3 install setuptools - sudo pip3 install pyelftools - sudo pip3 install ar + pip3 install setuptools + pip3 install pyelftools + pip3 install ar gcc --version python3 --version } From 8d1205c61c82f4ac132d1448641b7effafe31eea Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Fri, 4 Jul 2025 09:56:49 +0100 Subject: [PATCH 10/11] objcode: Fully parenthesize macro expansion. as requested in code review. Signed-off-by: Jeff Epler --- py/objcode.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/py/objcode.h b/py/objcode.h index aacbe170170cf..8f26bd9dbd947 100644 --- a/py/objcode.h +++ b/py/objcode.h @@ -72,7 +72,7 @@ static inline const void *mp_code_get_proto_fun(mp_obj_code_t *self) { #include "py/emitglue.h" -#define MP_CODE_QSTR_MAP(context, idx) (qstr)(context->constants.qstr_table[idx]) +#define MP_CODE_QSTR_MAP(context, idx) ((qstr)(context->constants.qstr_table[idx])) typedef struct _mp_obj_code_t { // TODO this was 4 words From dbd87a9d0211a4fe73fb8b4afe92620231dba5e5 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Fri, 4 Jul 2025 09:57:09 +0100 Subject: [PATCH 11/11] runtime: Initialize bool field idiomatically. Signed-off-by: Jeff Epler --- py/runtime.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/py/runtime.h b/py/runtime.h index 2613ca5c0dd02..f42039cab9055 100644 --- a/py/runtime.h +++ b/py/runtime.h @@ -171,7 +171,7 @@ static inline void mp_thread_init_state(mp_state_thread_t *ts, size_t stack_size #if MICROPY_PY_SYS_SETTRACE ts->prof_trace_callback = MP_OBJ_NULL; - ts->prof_callback_is_executing = 0; + ts->prof_callback_is_executing = false; ts->current_code_state = NULL; #endif pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy