From 86f4014f834e4c33449cb35a7b7fb0bae8071790 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Mon, 8 Aug 2022 13:52:05 -0700 Subject: [PATCH] Add exception filename to title bar Add the exception filename after the line number and change the line number so it is in that file. It used to always be code.py. Fixes #6702 --- main.c | 3 ++- shared/runtime/pyexec.c | 4 +++- shared/runtime/pyexec.h | 3 +++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/main.c b/main.c index f17731950f..bbc73d560c 100644 --- a/main.c +++ b/main.c @@ -213,8 +213,9 @@ void supervisor_execution_status(void) { if (_current_executing_filename != NULL) { serial_write(_current_executing_filename); } else if ((_exec_result.return_code & PYEXEC_EXCEPTION) != 0 && + _exec_result.exception_line > 0 && exception != NULL) { - mp_printf(&mp_plat_print, "@%d %q", _exec_result.exception_line, exception->base.type->name); + mp_printf(&mp_plat_print, "@%d %s %q", _exec_result.exception_line, _exec_result.exception_filename, exception->base.type->name); } else { serial_write_compressed(translate("Done")); } diff --git a/shared/runtime/pyexec.c b/shared/runtime/pyexec.c index b1f94db5e5..72714b9a2b 100644 --- a/shared/runtime/pyexec.c +++ b/shared/runtime/pyexec.c @@ -199,7 +199,9 @@ STATIC int parse_compile_execute(const void *source, mp_parse_input_kind_t input size_t n, *values; mp_obj_exception_get_traceback(return_value, &n, &values); if (values != NULL) { - result->exception_line = values[n - 2]; + result->exception_line = values[1]; + result->exception_filename[sizeof(result->exception_filename) - 1] = '\0'; + strncpy(result->exception_filename, qstr_str(values[0]), sizeof(result->exception_filename) - 1); } } } diff --git a/shared/runtime/pyexec.h b/shared/runtime/pyexec.h index d31a7fe816..411426eaaa 100644 --- a/shared/runtime/pyexec.h +++ b/shared/runtime/pyexec.h @@ -37,6 +37,9 @@ typedef struct { int return_code; mp_obj_t exception; int exception_line; + // Only store the first 32 characters of the filename. It is very unlikely that they can all be + // seen. + char exception_filename[33]; } pyexec_result_t; extern pyexec_mode_kind_t pyexec_mode_kind;