@@ -252,6 +252,7 @@ where
252252{
253253 #[ inline( always) ]
254254 fn go < M : Mode > ( & self , inp : & mut InputRef < ' src , ' _ , I , E > ) -> PResult < M , O > {
255+ let found = inp. peek_maybe ( ) ;
255256 let before = inp. cursor ( ) ;
256257 // Remove the pre-inner alt, to be reinserted later so we always preserve it
257258 let old_alt = inp. errors . alt . take ( ) ;
@@ -260,30 +261,29 @@ where
260261 let span = inp. span_since ( & before) ;
261262 let new_alt = inp. errors . alt . take ( ) ;
262263
264+ inp. errors . alt = old_alt;
263265 match res {
264266 Ok ( out) => {
265267 if ( self . filter ) ( & out) {
266268 // If successful, reinsert the original alt and then apply the new alt on top of it, since both are valid
267- inp. errors . alt = old_alt;
268269 if let Some ( new_alt) = new_alt {
269270 inp. add_alt_err ( & new_alt. pos , new_alt. err ) ;
270271 }
271272 Ok ( M :: bind ( || out) )
272273 } else {
273274 // If unsuccessful, reinsert the original alt but replace the new alt with the "something else" error (since it overrides it)
274275 let expected = [ DefaultExpected :: SomethingElse ] ;
275- let err = E :: Error :: expected_found ( expected , None , span ) ;
276- inp . errors . alt = old_alt ;
276+ // TODO: Use something more detailed than the next token as the found
277+ let err = E :: Error :: expected_found ( expected , found , span ) ;
277278 inp. add_alt_err ( & before. inner , err) ;
278279 Err ( ( ) )
279280 }
280281 }
281282
282283 Err ( _) => {
283- inp. errors . alt = old_alt;
284- if let Some ( new_alt) = new_alt {
285- inp. add_alt_err ( & new_alt. pos , new_alt. err ) ;
286- }
284+ // Can't fail!
285+ let new_alt = new_alt. unwrap ( ) ;
286+ inp. add_alt_err ( & new_alt. pos , new_alt. err ) ;
287287 Err ( ( ) )
288288 }
289289 }
0 commit comments