Avoid using quote! in parser

This commit is contained in:
Chris Wong 2017-07-30 13:59:35 +12:00
parent f1fbea181a
commit 4f7189375e

View file

@ -1,4 +1,14 @@
use proc_macro::{Delimiter, Literal, Spacing, TokenNode, TokenStream, TokenTree, TokenTreeIter, quote}; use proc_macro::{
Delimiter,
Literal,
Spacing,
Span,
TokenNode,
TokenStream,
TokenTree,
TokenTreeIter,
};
use std::iter;
use std::mem; use std::mem;
use literalext::LiteralExt; use literalext::LiteralExt;
@ -292,7 +302,7 @@ impl Parser {
TokenTree { TokenTree {
kind: TokenNode::Group(Delimiter::Brace, body), kind: TokenNode::Group(Delimiter::Brace, body),
span, span,
}.into() }
}, },
// $pat => $expr // $pat => $expr
Some(first_token) => { Some(first_token) => {
@ -310,11 +320,14 @@ impl Parser {
// The generated code may have multiple statements, unlike the // The generated code may have multiple statements, unlike the
// original expression. So wrap the whole thing in a block just // original expression. So wrap the whole thing in a block just
// in case. // in case.
quote!({ $body }) TokenTree {
kind: TokenNode::Group(Delimiter::Brace, body),
span: Span::default(),
}
}, },
None => return self.error("unexpected end of @match arm"), None => return self.error("unexpected end of @match arm"),
}; };
Ok(Some(pat.into_iter().chain(body.into_iter()).collect())) Ok(Some(pat.into_iter().chain(iter::once(body)).collect()))
} }
/// Parses and renders a `@let` expression. /// Parses and renders a `@let` expression.