|  | #![allow(unused_macros)] | 
|  |  | 
|  | mod macros_cant_escape_fns { | 
|  | fn f() { | 
|  | macro_rules! m { () => { 3 + 4 } } | 
|  | } | 
|  | fn g() -> i32 { m!() } | 
|  | //~^ ERROR cannot find macro | 
|  | } | 
|  |  | 
|  | mod macros_cant_escape_mods { | 
|  | mod f { | 
|  | macro_rules! m { () => { 3 + 4 } } | 
|  | } | 
|  | fn g() -> i32 { m!() } | 
|  | //~^ ERROR cannot find macro | 
|  | } | 
|  |  | 
|  | mod macros_can_escape_flattened_mods_test { | 
|  | #[macro_use] | 
|  | mod f { | 
|  | macro_rules! m { () => { 3 + 4 } } | 
|  | } | 
|  | fn g() -> i32 { m!() } | 
|  | } | 
|  |  | 
|  | fn macro_tokens_should_match() { | 
|  | macro_rules! m { (a) => { 13 } } | 
|  | m!(a); | 
|  | } | 
|  |  | 
|  | // should be able to use a bound identifier as a literal in a macro definition: | 
|  | fn self_macro_parsing() { | 
|  | macro_rules! foo { (zz) => { 287; } } | 
|  | fn f(zz: i32) { | 
|  | foo!(zz); | 
|  | } | 
|  | } | 
|  |  | 
|  | fn main() {} |