Avoid using quote!
in parser
This commit is contained in:
parent
f1fbea181a
commit
4f7189375e
1 changed files with 17 additions and 4 deletions
|
@ -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.
|
||||||
|
|
Loading…
Add table
Reference in a new issue