From c0185b7aef71ce6e1922a73d473d4ce13b79574f Mon Sep 17 00:00:00 2001 From: Bas Zalmstra Date: Fri, 5 Feb 2021 07:55:26 +0100 Subject: [PATCH] fix: parser regression (#307) --- crates/mun_syntax/src/parsing/event.rs | 64 +++++++++++++------------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/crates/mun_syntax/src/parsing/event.rs b/crates/mun_syntax/src/parsing/event.rs index 333285fcd..d8ea5891e 100644 --- a/crates/mun_syntax/src/parsing/event.rs +++ b/crates/mun_syntax/src/parsing/event.rs @@ -54,45 +54,43 @@ impl Event { pub(super) fn process(sink: &mut dyn TreeSink, mut events: Vec) { let mut forward_parents = Vec::new(); - for _i in 0..events.len() { - for i in 0..events.len() { - match mem::replace(&mut events[i], Event::tombstone()) { - Event::Start { - kind: TOMBSTONE, .. - } => (), - Event::Start { - kind, - forward_parent, - } => { - forward_parents.push(kind); - let mut idx = i; - let mut fp = forward_parent; - while let Some(fwd) = fp { - idx += fwd as usize; - fp = match mem::replace(&mut events[idx], Event::tombstone()) { - Event::Start { - kind, - forward_parent, - } => { - if kind != TOMBSTONE { - forward_parents.push(kind); - } - forward_parent + for i in 0..events.len() { + match mem::replace(&mut events[i], Event::tombstone()) { + Event::Start { + kind: TOMBSTONE, .. + } => (), + Event::Start { + kind, + forward_parent, + } => { + forward_parents.push(kind); + let mut idx = i; + let mut fp = forward_parent; + while let Some(fwd) = fp { + idx += fwd as usize; + fp = match mem::replace(&mut events[idx], Event::tombstone()) { + Event::Start { + kind, + forward_parent, + } => { + if kind != TOMBSTONE { + forward_parents.push(kind); } - _ => unreachable!(), + forward_parent } - } - - for kind in forward_parents.drain(..).rev() { - sink.start_node(kind) + _ => unreachable!(), } } - Event::Finish => sink.finish_node(), - Event::Token { kind, n_raw_tokens } => { - sink.token(kind, n_raw_tokens); + + for kind in forward_parents.drain(..).rev() { + sink.start_node(kind) } - Event::Error { msg } => sink.error(msg), } + Event::Finish => sink.finish_node(), + Event::Token { kind, n_raw_tokens } => { + sink.token(kind, n_raw_tokens); + } + Event::Error { msg } => sink.error(msg), } } }