diff options
| author | Dan Aloni <alonid@gmail.com> | 2018-04-10 02:08:47 +0300 |
|---|---|---|
| committer | Dan Aloni <alonid@gmail.com> | 2018-05-13 19:17:02 +0300 |
| commit | 37ed2ab91038567bafe3fd2e545c7d1631ff2ab0 (patch) | |
| tree | 27b8125e37ecd34720f6cee3286e821c6a6df96d /src/libsyntax/fold.rs | |
| parent | 3e955a058108fcadf0a8222de5868b0c905534d5 (diff) | |
| download | rust-37ed2ab91038567bafe3fd2e545c7d1631ff2ab0.tar.gz rust-37ed2ab91038567bafe3fd2e545c7d1631ff2ab0.zip | |
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
```
Diffstat (limited to 'src/libsyntax/fold.rs')
| -rw-r--r-- | src/libsyntax/fold.rs | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index a0cd831a9ba..d67995761f6 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -635,6 +635,7 @@ pub fn noop_fold_interpolated<T: Folder>(nt: token::Nonterminal, fld: &mut T) token::NtTy(ty) => token::NtTy(fld.fold_ty(ty)), token::NtIdent(ident, is_raw) => token::NtIdent(fld.fold_ident(ident), is_raw), token::NtLifetime(ident) => token::NtLifetime(fld.fold_ident(ident)), + token::NtLiteral(expr) => token::NtLiteral(fld.fold_expr(expr)), token::NtMeta(meta) => token::NtMeta(fld.fold_meta_item(meta)), token::NtPath(path) => token::NtPath(fld.fold_path(path)), token::NtTT(tt) => token::NtTT(fld.fold_tt(tt)), |
