39
39
//| ...
40
40
41
41
STATIC void traceback_exception_common (bool is_print_exception , mp_print_t * print , size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
42
- enum { ARG_etype , ARG_value , ARG_tb , ARG_limit , ARG_file , ARG_chain };
42
+ enum { ARG_exc , ARG_value , ARG_tb , ARG_limit , ARG_file , ARG_chain };
43
43
static const mp_arg_t allowed_args [] = {
44
- { MP_QSTR_etype , MP_ARG_OBJ | MP_ARG_REQUIRED , {.u_obj = MP_OBJ_NULL } },
45
- { MP_QSTR_value , MP_ARG_OBJ | MP_ARG_REQUIRED , {.u_obj = MP_OBJ_NULL } },
46
- { MP_QSTR_tb , MP_ARG_OBJ | MP_ARG_REQUIRED , {.u_obj = MP_OBJ_NULL } },
44
+ { MP_QSTR_ , MP_ARG_OBJ | MP_ARG_REQUIRED , {.u_obj = MP_OBJ_NULL } },
45
+ { MP_QSTR_value , MP_ARG_OBJ , {.u_obj = MP_OBJ_NULL } },
46
+ { MP_QSTR_tb , MP_ARG_OBJ , {.u_obj = MP_OBJ_NULL } },
47
47
{ MP_QSTR_limit , MP_ARG_OBJ , {.u_obj = mp_const_none } },
48
48
{ MP_QSTR_file , MP_ARG_OBJ , {.u_obj = mp_const_none } },
49
49
{ MP_QSTR_chain , MP_ARG_BOOL , {.u_bool = true} },
@@ -53,6 +53,9 @@ STATIC void traceback_exception_common(bool is_print_exception, mp_print_t *prin
53
53
mp_arg_parse_all (n_args , pos_args , kw_args , MP_ARRAY_SIZE (allowed_args ), allowed_args , args );
54
54
55
55
mp_obj_t value = args [ARG_value ].u_obj ;
56
+ if (value == MP_OBJ_NULL ) {
57
+ value = args [ARG_exc ].u_obj ;
58
+ }
56
59
mp_obj_t tb_obj = args [ARG_tb ].u_obj ;
57
60
mp_obj_t limit_obj = args [ARG_limit ].u_obj ;
58
61
@@ -88,7 +91,9 @@ STATIC void traceback_exception_common(bool is_print_exception, mp_print_t *prin
88
91
mp_obj_exception_t * exc = mp_obj_exception_get_native (value );
89
92
mp_obj_traceback_t * trace_backup = exc -> traceback ;
90
93
91
- if (tb_obj != mp_const_none && print_tb ) {
94
+ if (tb_obj == MP_OBJ_NULL ) {
95
+ /* Print the traceback's exception as is */
96
+ } else if (tb_obj != mp_const_none && print_tb ) {
92
97
exc -> traceback = mp_arg_validate_type (tb_obj , & mp_type_traceback , MP_QSTR_tb );
93
98
} else {
94
99
exc -> traceback = (mp_obj_traceback_t * )& mp_const_empty_traceback_obj ;
0 commit comments