@@ -88,26 +88,31 @@ pub fn remove_importlib_frames(vm: &VirtualMachine, exc: &PyObjectRef) -> PyObje
88
88
89
89
if let Ok ( tb) = vm. get_attribute ( exc. clone ( ) , "__traceback__" ) {
90
90
if objtype:: isinstance ( & tb, & vm. ctx . list_type ( ) ) {
91
- let mut tb_entries = objsequence:: get_elements_list ( & tb) . to_vec ( ) ;
92
- tb_entries. reverse ( ) ;
93
- let mut new_tb = Vec :: with_capacity ( tb_entries. len ( ) ) ;
94
-
95
- for tb_entry in tb_entries. iter ( ) {
96
- let mut current_chunk = vec ! [ ] ;
97
- let location_attrs = objsequence:: get_elements_tuple ( & tb_entry) ;
98
- let file_name = objstr:: get_value ( & location_attrs[ 0 ] ) ;
99
- if file_name != "_frozen_importlib" && file_name != "_frozen_importlib_external" {
100
- current_chunk. clear ( ) ;
101
- new_tb. push ( tb_entry. clone ( ) )
102
- } else {
103
- current_chunk. push ( tb_entry. clone ( ) ) ;
104
- let run_obj_name = objstr:: get_value ( & location_attrs[ 0 ] ) ;
105
- if run_obj_name == "_call_with_frames_removed" || always_trim {
106
- new_tb. append ( & mut current_chunk) ;
91
+ let tb_entries = objsequence:: get_elements_list ( & tb) . to_vec ( ) ;
92
+ let mut in_importlib = false ;
93
+ let new_tb = tb_entries
94
+ . iter ( )
95
+ . filter ( |tb_entry| {
96
+ let location_attrs = objsequence:: get_elements_tuple ( & tb_entry) ;
97
+ let file_name = objstr:: get_value ( & location_attrs[ 0 ] ) ;
98
+ if file_name == "_frozen_importlib" || file_name == "_frozen_importlib_external"
99
+ {
100
+ let run_obj_name = objstr:: get_value ( & location_attrs[ 2 ] ) ;
101
+ if run_obj_name == "_call_with_frames_removed" {
102
+ in_importlib = true ;
103
+ }
104
+ if always_trim || in_importlib {
105
+ false
106
+ } else {
107
+ true
108
+ }
109
+ } else {
110
+ in_importlib = false ;
111
+ true
107
112
}
108
- } ;
109
- }
110
- new_tb . reverse ( ) ;
113
+ } )
114
+ . map ( |x| x . clone ( ) )
115
+ . collect ( ) ;
111
116
vm. set_attr ( exc, "__traceback__" , vm. ctx . new_list ( new_tb) )
112
117
. unwrap ( ) ;
113
118
}
0 commit comments