From fcb1eef3232c3fc673bf5f98595708e108c3950c Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Sat, 25 May 2019 20:31:53 +0800 Subject: Change TokenSource to iteration based --- crates/ra_mbe/src/syntax_bridge.rs | 42 ++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 18 deletions(-) (limited to 'crates/ra_mbe/src/syntax_bridge.rs') diff --git a/crates/ra_mbe/src/syntax_bridge.rs b/crates/ra_mbe/src/syntax_bridge.rs index 0a75305b4..0aab5ea8b 100644 --- a/crates/ra_mbe/src/syntax_bridge.rs +++ b/crates/ra_mbe/src/syntax_bridge.rs @@ -48,9 +48,10 @@ pub fn syntax_node_to_token_tree(node: &SyntaxNode) -> Option<(tt::Subtree, Toke /// Parses the token tree (result of macro expansion) to an expression pub fn token_tree_to_expr(tt: &tt::Subtree) -> Result, ExpandError> { let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]); - let token_source = SubtreeTokenSource::new(&buffer); - let mut tree_sink = TtTreeSink::new(token_source.querier()); - ra_parser::parse_expr(&token_source, &mut tree_sink); + let mut token_source = SubtreeTokenSource::new(&buffer); + let querier = token_source.querier(); + let mut tree_sink = TtTreeSink::new(querier.as_ref()); + ra_parser::parse_expr(&mut token_source, &mut tree_sink); if tree_sink.roots.len() != 1 { return Err(ExpandError::ConversionError); } @@ -64,9 +65,10 @@ pub fn token_tree_to_expr(tt: &tt::Subtree) -> Result, Expand /// Parses the token tree (result of macro expansion) to a Pattern pub fn token_tree_to_pat(tt: &tt::Subtree) -> Result, ExpandError> { let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]); - let token_source = SubtreeTokenSource::new(&buffer); - let mut tree_sink = TtTreeSink::new(token_source.querier()); - ra_parser::parse_pat(&token_source, &mut tree_sink); + let mut token_source = SubtreeTokenSource::new(&buffer); + let querier = token_source.querier(); + let mut tree_sink = TtTreeSink::new(querier.as_ref()); + ra_parser::parse_pat(&mut token_source, &mut tree_sink); if tree_sink.roots.len() != 1 { return Err(ExpandError::ConversionError); } @@ -78,9 +80,10 @@ pub fn token_tree_to_pat(tt: &tt::Subtree) -> Result, ExpandEr /// Parses the token tree (result of macro expansion) to a Type pub fn token_tree_to_ty(tt: &tt::Subtree) -> Result, ExpandError> { let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]); - let token_source = SubtreeTokenSource::new(&buffer); - let mut tree_sink = TtTreeSink::new(token_source.querier()); - ra_parser::parse_ty(&token_source, &mut tree_sink); + let mut token_source = SubtreeTokenSource::new(&buffer); + let querier = token_source.querier(); + let mut tree_sink = TtTreeSink::new(querier.as_ref()); + ra_parser::parse_ty(&mut token_source, &mut tree_sink); if tree_sink.roots.len() != 1 { return Err(ExpandError::ConversionError); } @@ -93,9 +96,10 @@ pub fn token_tree_to_macro_stmts( tt: &tt::Subtree, ) -> Result, ExpandError> { let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]); - let token_source = SubtreeTokenSource::new(&buffer); - let mut tree_sink = TtTreeSink::new(token_source.querier()); - ra_parser::parse_macro_stmts(&token_source, &mut tree_sink); + let mut token_source = SubtreeTokenSource::new(&buffer); + let querier = token_source.querier(); + let mut tree_sink = TtTreeSink::new(querier.as_ref()); + ra_parser::parse_macro_stmts(&mut token_source, &mut tree_sink); if tree_sink.roots.len() != 1 { return Err(ExpandError::ConversionError); } @@ -108,9 +112,10 @@ pub fn token_tree_to_macro_items( tt: &tt::Subtree, ) -> Result, ExpandError> { let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]); - let token_source = SubtreeTokenSource::new(&buffer); - let mut tree_sink = TtTreeSink::new(token_source.querier()); - ra_parser::parse_macro_items(&token_source, &mut tree_sink); + let mut token_source = SubtreeTokenSource::new(&buffer); + let querier = token_source.querier(); + let mut tree_sink = TtTreeSink::new(querier.as_ref()); + ra_parser::parse_macro_items(&mut token_source, &mut tree_sink); if tree_sink.roots.len() != 1 { return Err(ExpandError::ConversionError); } @@ -121,9 +126,10 @@ pub fn token_tree_to_macro_items( /// Parses the token tree (result of macro expansion) as a sequence of items pub fn token_tree_to_ast_item_list(tt: &tt::Subtree) -> TreeArc { let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]); - let token_source = SubtreeTokenSource::new(&buffer); - let mut tree_sink = TtTreeSink::new(token_source.querier()); - ra_parser::parse(&token_source, &mut tree_sink); + let mut token_source = SubtreeTokenSource::new(&buffer); + let querier = token_source.querier(); + let mut tree_sink = TtTreeSink::new(querier.as_ref()); + ra_parser::parse(&mut token_source, &mut tree_sink); let syntax = tree_sink.inner.finish(); ast::SourceFile::cast(&syntax).unwrap().to_owned() } -- cgit v1.2.3