From 37ed2ab91038567bafe3fd2e545c7d1631ff2ab0 Mon Sep 17 00:00:00 2001 From: Dan Aloni Date: Tue, 10 Apr 2018 02:08:47 +0300 Subject: 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 ``` --- src/libsyntax/print/pprust.rs | 1 + 1 file changed, 1 insertion(+) (limited to 'src/libsyntax/print') diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index b8ddb063d98..99a6fcf170d 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -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), -- cgit 1.4.1-3-g733a5