| //@ aux-build:test-macros.rs |
| //@ check-pass |
| //@ compile-flags: -Z span-debug |
| |
| #![no_std] // Don't load unnecessary hygiene information from std |
| extern crate std; |
| |
| extern crate test_macros; |
| use test_macros::{print_bang, print_bang_consume}; |
| |
| macro_rules! test_matchers { |
| ($expr:expr, $block:block, $stmt:stmt, $ty:ty, $ident:ident, $lifetime:lifetime, |
| $meta:meta, $path:path, $vis:vis, $tt:tt, $lit:literal) => { |
| print_bang_consume!($expr, $block, $stmt, $ty, $ident, |
| $lifetime, $meta, $path, $vis, $tt, $lit) |
| } |
| } |
| |
| macro_rules! use_expr { |
| ($expr:expr) => { |
| print_bang!($expr) |
| } |
| } |
| |
| macro_rules! use_pat { |
| ($pat:pat) => { |
| print_bang!($pat) |
| } |
| } |
| |
| #[allow(dead_code)] |
| struct Foo; |
| impl Foo { |
| #[allow(dead_code)] |
| fn use_self(self) { |
| drop(use_expr!(self)); |
| test_matchers!( |
| 1 + 1, |
| { "a" }, |
| let a = 1, |
| String, |
| my_name, |
| 'a, |
| my_val = 30, |
| std::option::Option, |
| pub(in some::path), |
| [ a b c ], |
| -30 |
| ); |
| } |
| |
| fn with_pat(use_pat!((a, b)): (u32, u32)) { |
| let _ = (a, b); |
| } |
| } |
| |
| fn main() {} |