@@ -630,25 +630,38 @@ where
630630 // Remove the pre-inner alt, to be reinserted later so we always preserve it
631631 let old_alt = inp. errors . alt . take ( ) ;
632632
633- let out = self . parser . go :: < Emit > ( inp) ? ;
633+ let res = self . parser . go :: < Emit > ( inp) ;
634634 let span = inp. span_since ( & before) ;
635635 let new_alt = inp. errors . alt . take ( ) ;
636636
637- match ( self . mapper ) ( out , span ) {
637+ match res {
638638 Ok ( out) => {
639- // If successful, reinsert the original alt and then apply the new alt on top of it, since both are valid
640- inp. errors . alt = old_alt;
641- if let Some ( new_alt) = new_alt {
642- inp. add_alt_err ( & before. inner , new_alt. err ) ;
639+ match ( self . mapper ) ( out, span) {
640+ Ok ( out) => {
641+ // If successful, reinsert the original alt and then apply the new alt on top of it, since both are valid
642+ inp. errors . alt = old_alt;
643+ if let Some ( new_alt) = new_alt {
644+ inp. add_alt_err ( & new_alt. pos , new_alt. err ) ;
645+ }
646+ Ok ( M :: bind ( || out) )
647+ }
648+
649+ Err ( err) => {
650+ // If unsuccessful, reinsert the original alt but replace the new alt with the mapper error (since it overrides it)
651+ inp. errors . alt = old_alt;
652+ inp. add_alt_err ( & before. inner , err) ;
653+ Err ( ( ) )
654+ }
643655 }
644- Ok ( M :: bind ( || out) )
645656 }
646- Err ( err ) => {
647- // If unsuccessful, reinsert the original alt but replace the new alt with the mapper error (since it overrides it)
657+
658+ Err ( _ ) => {
648659 inp. errors . alt = old_alt;
649- inp. add_alt_err ( & before. inner , err) ;
660+ if let Some ( new_alt) = new_alt {
661+ inp. add_alt_err ( & new_alt. pos , new_alt. err ) ;
662+ }
650663 Err ( ( ) )
651- }
664+ } ,
652665 }
653666 }
654667
0 commit comments