Fix one_of error state handling

This commit is contained in:
Joshua Warner 2022-11-03 17:23:31 -04:00
parent b2bb38220b
commit 311193fe70
No known key found for this signature in database
GPG key ID: 89AD497003F93FDD
3 changed files with 27 additions and 9 deletions

View file

@ -1380,11 +1380,12 @@ macro_rules! and {
macro_rules! one_of {
($p1:expr, $p2:expr) => {
move |arena: &'a bumpalo::Bump, state: $crate::state::State<'a>, min_indent: u32| {
let original_state = state.clone();
match $p1.parse(arena, state, min_indent) {
valid @ Ok(_) => valid,
Err((MadeProgress, fail, state)) => Err((MadeProgress, fail, state)),
Err((NoProgress, _, state)) => $p2.parse(arena, state, min_indent),
Err((NoProgress, _, _)) => $p2.parse(arena, original_state, min_indent),
}
}
};