Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/mbe/src/syntax_bridge.rs')
| -rw-r--r-- | crates/mbe/src/syntax_bridge.rs | 79 |
1 files changed, 0 insertions, 79 deletions
diff --git a/crates/mbe/src/syntax_bridge.rs b/crates/mbe/src/syntax_bridge.rs index 361633e39d..21a0aa4284 100644 --- a/crates/mbe/src/syntax_bridge.rs +++ b/crates/mbe/src/syntax_bridge.rs @@ -243,8 +243,6 @@ fn convert_tokens<C: TokenConvertor>(conv: &mut C) -> tt::Subtree { let char = match token.to_char(conv) { Some(c) => c, None => { - // FIXME: this isn't really correct, `to_char` yields the *first* char of the token, - // and this is relevant when eg. creating 2 `tt::Punct` from a single `::` token panic!("Token from lexer must be single char: token = {:#?}", token); } }; @@ -262,33 +260,6 @@ fn convert_tokens<C: TokenConvertor>(conv: &mut C) -> tt::Subtree { IDENT => make_leaf!(Ident), UNDERSCORE => make_leaf!(Ident), k if k.is_keyword() => make_leaf!(Ident), - FLOAT_NUMBER_START_0 | FLOAT_NUMBER_START_1 | FLOAT_NUMBER_START_2 => { - // Reassemble a split-up float token. - let mut range = range; - let mut text = token.to_text(conv).to_string(); - if kind == FLOAT_NUMBER_START_1 || kind == FLOAT_NUMBER_START_2 { - let (dot, dot_range) = conv.bump().unwrap(); - assert_eq!(dot.kind(conv), DOT); - text += &*dot.to_text(conv); - range = TextRange::new(range.start(), dot_range.end()); - - if kind == FLOAT_NUMBER_START_2 { - let (tail, tail_range) = conv.bump().unwrap(); - assert_eq!(tail.kind(conv), FLOAT_NUMBER_PART); - text += &*tail.to_text(conv); - range = TextRange::new(range.start(), tail_range.end()); - } - } - - result.push( - tt::Leaf::from(tt::Literal { - id: conv.id_alloc().alloc(range, synth_id), - text: text.into(), - }) - .into(), - ); - continue; - } k if k.is_literal() => make_leaf!(Literal), LIFETIME_IDENT => { let char_unit = TextSize::of('\''); @@ -742,7 +713,6 @@ struct TtTreeSink<'a> { text_pos: TextSize, inner: SyntaxTreeBuilder, token_map: TokenMap, - remaining_float_lit_text: String, } impl<'a> TtTreeSink<'a> { @@ -754,7 +724,6 @@ impl<'a> TtTreeSink<'a> { text_pos: 0.into(), inner: SyntaxTreeBuilder::default(), token_map: TokenMap::default(), - remaining_float_lit_text: String::new(), } } @@ -781,54 +750,6 @@ impl<'a> TtTreeSink<'a> { n_tokens = 2; } - // We need to split a float `tt::Literal` into up to 3 tokens consumed by the parser. - match self.cursor.token_tree() { - Some(tt::buffer::TokenTreeRef::Subtree(sub, _)) if sub.delimiter.is_none() => { - self.cursor = self.cursor.subtree().unwrap() - } - _ => {} - } - let literal = match self.cursor.token_tree() { - Some(tt::buffer::TokenTreeRef::Leaf(tt::Leaf::Literal(lit), _)) => Some(lit), - _ => None, - }; - if matches!( - kind, - FLOAT_NUMBER_PART | FLOAT_NUMBER_START_0 | FLOAT_NUMBER_START_1 | FLOAT_NUMBER_START_2 - ) { - if self.remaining_float_lit_text.is_empty() { - always!( - literal.is_some(), - "kind={:?}, cursor tt={:?}", - kind, - self.cursor.token_tree() - ); - let text = literal.map_or(String::new(), |lit| lit.to_string()); - self.cursor = self.cursor.bump(); - match text.split_once('.') { - Some((start, end)) => { - self.inner.token(kind, start); - self.remaining_float_lit_text = format!(".{end}"); - return; - } - None => { - self.inner.token(kind, &text); - return; - } - } - } else { - self.inner.token(kind, &self.remaining_float_lit_text); - self.remaining_float_lit_text.clear(); - return; - } - } - if kind == DOT && !self.remaining_float_lit_text.is_empty() { - always!(self.remaining_float_lit_text.chars().next() == Some('.')); - self.inner.token(kind, "."); - self.remaining_float_lit_text = self.remaining_float_lit_text[1..].to_string(); - return; - } - let mut last = self.cursor; for _ in 0..n_tokens { let tmp: u8; |