From 675b511c836163efee201fc0bb9ca67d1db28823 Mon Sep 17 00:00:00 2001 From: John Turner Date: Fri, 24 Oct 2025 00:09:02 -0400 Subject: short circuit Or combinator instead of running both parsers --- src/lib.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index 1de814c..6f16148 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -296,14 +296,15 @@ where ) -> ParserResult { Tracer::trace("or", it.clone()); - match ( - self.left.run::(it.clone()), - self.right.run::(it.clone()), - ) { - (Ok((rest, output)), _) => Ok((rest, output)), - (_, Ok((rest, output))) => Ok((rest, output)), - (_, Err(rest)) => Err(rest), - } + if let Ok((rest, output)) = self.left.run::(it.clone()) { + return Ok((rest, output)); + }; + + if let Ok((rest, output)) = self.right.run::(it.clone()) { + return Ok((rest, output)); + }; + + Err(EM::bind(|| it)) } } -- cgit v1.2.3