Macros: Add a 'literal' fragment specifier
Implements RFC 1576. See: https://github.com/rust-lang/rfcs/blob/master/text/1576-macros-literal-matcher.md Changes are mostly in libsyntax, docs, and tests. Feature gate is enabled for 1.27.0. Many thanks to Vadim Petrochenkov for following through code reviews and suggestions. Example: ````rust macro_rules! test_literal { ($l:literal) => { println!("literal: {}", $l); }; ($e:expr) => { println!("expr: {}", $e); }; } fn main() { let a = 1; test_literal!(a); test_literal!(2); test_literal!(-3); } ``` Output: ``` expr: 1 literal: 2 literal: -3 ```
This commit is contained in:
@@ -273,6 +273,7 @@ pub fn token_to_string(tok: &Token) -> String {
|
||||
token::NtIdent(e, false) => ident_to_string(e),
|
||||
token::NtIdent(e, true) => format!("r#{}", ident_to_string(e)),
|
||||
token::NtLifetime(e) => ident_to_string(e),
|
||||
token::NtLiteral(ref e) => expr_to_string(e),
|
||||
token::NtTT(ref tree) => tt_to_string(tree.clone()),
|
||||
token::NtArm(ref e) => arm_to_string(e),
|
||||
token::NtImplItem(ref e) => impl_item_to_string(e),
|
||||
|
||||
Reference in New Issue
Block a user