@@ -130,9 +130,7 @@ fn generic_extension<'cx>(cx: &'cx mut ExtCtxt<'_>,
130
130
}
131
131
132
132
// Which arm's failure should we report? (the one furthest along)
133
- let mut best_fail_spot = DUMMY_SP ;
134
- let mut best_fail_tok = None ;
135
- let mut best_fail_text = None ;
133
+ let mut best_failure: Option < ( Token , & str ) > = None ;
136
134
137
135
for ( i, lhs) in lhses. iter ( ) . enumerate ( ) { // try each arm's matchers
138
136
let lhs_tt = match * lhs {
@@ -190,21 +188,20 @@ fn generic_extension<'cx>(cx: &'cx mut ExtCtxt<'_>,
190
188
arm_span,
191
189
} )
192
190
}
193
- Failure ( token, msg) => if token. span . lo ( ) >= best_fail_spot. lo ( ) {
194
- best_fail_spot = token. span ;
195
- best_fail_tok = Some ( token. kind ) ;
196
- best_fail_text = Some ( msg) ;
197
- } ,
191
+ Failure ( token, msg) => match best_failure {
192
+ Some ( ( ref best_token, _) ) if best_token. span . lo ( ) >= token. span . lo ( ) => { }
193
+ _ => best_failure = Some ( ( token, msg) )
194
+ }
198
195
Error ( err_sp, ref msg) => {
199
196
cx. span_fatal ( err_sp. substitute_dummy ( sp) , & msg[ ..] )
200
197
}
201
198
}
202
199
}
203
200
204
- let best_fail_msg = parse_failure_msg ( best_fail_tok . expect ( "ran no matchers" ) ) ;
205
- let span = best_fail_spot . substitute_dummy ( sp) ;
206
- let mut err = cx. struct_span_err ( span, & best_fail_msg ) ;
207
- err. span_label ( span, best_fail_text . unwrap_or ( & best_fail_msg ) ) ;
201
+ let ( token , label ) = best_failure . expect ( "ran no matchers" ) ;
202
+ let span = token . span . substitute_dummy ( sp) ;
203
+ let mut err = cx. struct_span_err ( span, & parse_failure_msg ( token . kind ) ) ;
204
+ err. span_label ( span, label ) ;
208
205
if let Some ( sp) = def_span {
209
206
if cx. source_map ( ) . span_to_filename ( sp) . is_real ( ) && !sp. is_dummy ( ) {
210
207
err. span_label ( cx. source_map ( ) . def_span ( sp) , "when calling this macro" ) ;
0 commit comments