Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/parser/src/parser.rs')
| -rw-r--r-- | crates/parser/src/parser.rs | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/crates/parser/src/parser.rs b/crates/parser/src/parser.rs index 0f4fa60229..280416ae7c 100644 --- a/crates/parser/src/parser.rs +++ b/crates/parser/src/parser.rs @@ -182,7 +182,7 @@ impl<'t> Parser<'t> { } /// Advances the parser by one token - pub(crate) fn split_float(&mut self, marker: Marker) -> (bool, Marker) { + pub(crate) fn split_float(&mut self, mut marker: Marker) -> (bool, Marker) { assert!(self.at(SyntaxKind::FLOAT_NUMBER)); // we have parse `<something>.` // `<something>`.0.1 @@ -191,26 +191,23 @@ impl<'t> Parser<'t> { // `<something>`. 0. 1; // here we need to change the follow up parse, the return value will cause us to emulate a dot // the actual splitting happens later - let has_pseudo_dot = !self.inp.is_joint(self.pos); - let marker = if !has_pseudo_dot { - let new_pos = self.start(); + let ends_in_dot = !self.inp.is_joint(self.pos); + if !ends_in_dot { + let new_marker = self.start(); let idx = marker.pos as usize; match &mut self.events[idx] { Event::Start { forward_parent, kind } => { *kind = SyntaxKind::FIELD_EXPR; - *forward_parent = Some(new_pos.pos - marker.pos); + *forward_parent = Some(new_marker.pos - marker.pos); } _ => unreachable!(), } - // NOTE: This brings the start / finish pairs out of balance! - std::mem::forget(marker); - new_pos - } else { - marker + marker.bomb.defuse(); + marker = new_marker; }; self.pos += 1 as usize; - self.push_event(Event::FloatSplitHack { has_pseudo_dot }); - (has_pseudo_dot, marker) + self.push_event(Event::FloatSplitHack { ends_in_dot }); + (ends_in_dot, marker) } /// Advances the parser by one token, remapping its kind. |