Skip to content

Commit be7f619

Browse files
committed
Change traits to bare FnMut where possible.
1 parent 9d426ac commit be7f619

File tree

1 file changed

+67
-111
lines changed
  • src/libstd/sys/windows/backtrace/printing

1 file changed

+67
-111
lines changed

Diff for: src/libstd/sys/windows/backtrace/printing/msvc.rs

+67-111
Original file line numberDiff line numberDiff line change
@@ -69,24 +69,48 @@ where
6969
F: FnOnce(Option<&str>) -> io::Result<()>,
7070
{
7171
match context.StackWalkVariant {
72-
StackWalkVariant::StackWalkEx(_, ref fns) => {
73-
resolve_symname_internal(fns.resolve_symname, frame, callback, context)
74-
}
75-
StackWalkVariant::StackWalk64(_, ref fns) => {
76-
resolve_symname_internal(fns.resolve_symname, frame, callback, context)
77-
}
72+
StackWalkVariant::StackWalkEx(_, ref fns) => resolve_symname_internal(
73+
|process: c::HANDLE,
74+
symbol_address: u64,
75+
inline_context: c::ULONG,
76+
info: *mut c::SYMBOL_INFO| unsafe {
77+
let mut displacement = 0u64;
78+
(fns.resolve_symname)(
79+
process,
80+
symbol_address,
81+
inline_context,
82+
&mut displacement,
83+
info,
84+
)
85+
},
86+
frame,
87+
callback,
88+
context,
89+
),
90+
StackWalkVariant::StackWalk64(_, ref fns) => resolve_symname_internal(
91+
|process: c::HANDLE,
92+
symbol_address: u64,
93+
_inline_context: c::ULONG,
94+
info: *mut c::SYMBOL_INFO| unsafe {
95+
let mut displacement = 0u64;
96+
(fns.resolve_symname)(process, symbol_address, &mut displacement, info)
97+
},
98+
frame,
99+
callback,
100+
context,
101+
),
78102
}
79103
}
80104

81105
fn resolve_symname_internal<F, R>(
82-
symbol_resolver: R,
106+
mut symbol_resolver: R,
83107
frame: Frame,
84108
callback: F,
85109
context: &BacktraceContext,
86110
) -> io::Result<()>
87111
where
88112
F: FnOnce(Option<&str>) -> io::Result<()>,
89-
R: SymbolResolver,
113+
R: FnMut(c::HANDLE, u64, c::ULONG, *mut c::SYMBOL_INFO) -> c::BOOL,
90114
{
91115
unsafe {
92116
let mut info: c::SYMBOL_INFO = mem::zeroed();
@@ -96,7 +120,7 @@ where
96120
// due to struct alignment.
97121
info.SizeOfStruct = 88;
98122

99-
let ret = symbol_resolver.resolve_symbol(
123+
let ret = symbol_resolver(
100124
context.handle,
101125
frame.symbol_addr as u64,
102126
frame.inline_context,
@@ -121,52 +145,6 @@ where
121145
}
122146
}
123147

124-
trait SymbolResolver {
125-
fn resolve_symbol(
126-
&self,
127-
process: c::HANDLE,
128-
symbol_address: u64,
129-
inline_context: c::ULONG,
130-
info: *mut c::SYMBOL_INFO,
131-
) -> c::BOOL;
132-
}
133-
134-
impl SymbolResolver for SymFromAddrFn {
135-
fn resolve_symbol(
136-
&self,
137-
process: c::HANDLE,
138-
symbol_address: u64,
139-
_inline_context: c::ULONG,
140-
info: *mut c::SYMBOL_INFO,
141-
) -> c::BOOL {
142-
unsafe {
143-
let mut displacement = 0u64;
144-
self(process, symbol_address, &mut displacement, info)
145-
}
146-
}
147-
}
148-
149-
impl SymbolResolver for SymFromInlineContextFn {
150-
fn resolve_symbol(
151-
&self,
152-
process: c::HANDLE,
153-
symbol_address: u64,
154-
inline_context: c::ULONG,
155-
info: *mut c::SYMBOL_INFO,
156-
) -> c::BOOL {
157-
unsafe {
158-
let mut displacement = 0u64;
159-
self(
160-
process,
161-
symbol_address,
162-
inline_context,
163-
&mut displacement,
164-
info,
165-
)
166-
}
167-
}
168-
}
169-
170148
pub fn foreach_symbol_fileline<F>(
171149
frame: Frame,
172150
callback: F,
@@ -176,30 +154,55 @@ where
176154
F: FnMut(&[u8], u32) -> io::Result<()>,
177155
{
178156
match context.StackWalkVariant {
179-
StackWalkVariant::StackWalkEx(_, ref fns) => {
180-
foreach_symbol_fileline_iternal(fns.sym_get_line, frame, callback, context)
181-
}
182-
StackWalkVariant::StackWalk64(_, ref fns) => {
183-
foreach_symbol_fileline_iternal(fns.sym_get_line, frame, callback, context)
184-
}
157+
StackWalkVariant::StackWalkEx(_, ref fns) => foreach_symbol_fileline_iternal(
158+
|process: c::HANDLE,
159+
frame_address: u64,
160+
inline_context: c::ULONG,
161+
line: *mut c::IMAGEHLP_LINE64| unsafe {
162+
let mut displacement = 0u32;
163+
(fns.sym_get_line)(
164+
process,
165+
frame_address,
166+
inline_context,
167+
0,
168+
&mut displacement,
169+
line,
170+
)
171+
},
172+
frame,
173+
callback,
174+
context,
175+
),
176+
StackWalkVariant::StackWalk64(_, ref fns) => foreach_symbol_fileline_iternal(
177+
|process: c::HANDLE,
178+
frame_address: u64,
179+
_inline_context: c::ULONG,
180+
line: *mut c::IMAGEHLP_LINE64| unsafe {
181+
let mut displacement = 0u32;
182+
(fns.sym_get_line)(process, frame_address, &mut displacement, line)
183+
},
184+
frame,
185+
callback,
186+
context,
187+
),
185188
}
186189
}
187190

188191
fn foreach_symbol_fileline_iternal<F, G>(
189-
line_getter: G,
192+
mut line_getter: G,
190193
frame: Frame,
191194
mut callback: F,
192195
context: &BacktraceContext,
193196
) -> io::Result<bool>
194197
where
195198
F: FnMut(&[u8], u32) -> io::Result<()>,
196-
G: LineGetter,
199+
G: FnMut(c::HANDLE, u64, c::ULONG, *mut c::IMAGEHLP_LINE64) -> c::BOOL,
197200
{
198201
unsafe {
199202
let mut line: c::IMAGEHLP_LINE64 = mem::zeroed();
200203
line.SizeOfStruct = ::mem::size_of::<c::IMAGEHLP_LINE64>() as u32;
201204

202-
let ret = line_getter.get_line(
205+
let ret = line_getter(
203206
context.handle,
204207
frame.exact_position as u64,
205208
frame.inline_context,
@@ -212,50 +215,3 @@ where
212215
Ok(false)
213216
}
214217
}
215-
216-
trait LineGetter {
217-
fn get_line(
218-
&self,
219-
process: c::HANDLE,
220-
frame_address: u64,
221-
inline_context: c::ULONG,
222-
line: *mut c::IMAGEHLP_LINE64,
223-
) -> c::BOOL;
224-
}
225-
226-
impl LineGetter for SymGetLineFromAddr64Fn {
227-
fn get_line(
228-
&self,
229-
process: c::HANDLE,
230-
frame_address: u64,
231-
_inline_context: c::ULONG,
232-
line: *mut c::IMAGEHLP_LINE64,
233-
) -> c::BOOL {
234-
unsafe {
235-
let mut displacement = 0u32;
236-
self(process, frame_address, &mut displacement, line)
237-
}
238-
}
239-
}
240-
241-
impl LineGetter for SymGetLineFromInlineContextFn {
242-
fn get_line(
243-
&self,
244-
process: c::HANDLE,
245-
frame_address: u64,
246-
inline_context: c::ULONG,
247-
line: *mut c::IMAGEHLP_LINE64,
248-
) -> c::BOOL {
249-
unsafe {
250-
let mut displacement = 0u32;
251-
self(
252-
process,
253-
frame_address,
254-
inline_context,
255-
0,
256-
&mut displacement,
257-
line,
258-
)
259-
}
260-
}
261-
}

0 commit comments

Comments
 (0)