diff --git a/src/parser/event_parser/grammar/items.rs b/src/parser/event_parser/grammar/items.rs index d2bfeac977..5b0180b810 100644 --- a/src/parser/event_parser/grammar/items.rs +++ b/src/parser/event_parser/grammar/items.rs @@ -49,9 +49,7 @@ fn item(p: &mut Parser) -> bool { || node_if(p, STRUCT_KW, STRUCT_ITEM, struct_item) || node_if(p, FN_KW, FN_ITEM, fn_item); - if item_parsed && attrs_start != item_start { - p.forward_parent(attrs_start, item_start); - } + p.forward_parent(attrs_start, item_start); item_parsed } diff --git a/src/parser/event_parser/parser.rs b/src/parser/event_parser/parser.rs index 14c0efe2d5..6171b35794 100644 --- a/src/parser/event_parser/parser.rs +++ b/src/parser/event_parser/parser.rs @@ -55,6 +55,9 @@ impl<'t> Parser<'t> { } pub(crate) fn forward_parent(&mut self, child: Mark, parent: Mark) { + if child == parent || parent == self.mark() { + return + } assert!(child.0 < parent.0); let diff = parent.0 - child.0; match self.events[child.0 as usize] {