| //@ aux-build:parent-source-spans.rs |
| |
| #![feature(decl_macro)] |
| |
| extern crate parent_source_spans; |
| |
| use parent_source_spans::parent_source_spans; |
| |
| macro one($a:expr, $b:expr) { |
| two!($a, $b); |
| //~^ ERROR first parent: "hello" |
| //~| ERROR second parent: "world" |
| } |
| |
| macro two($a:expr, $b:expr) { |
| three!($a, $b); |
| //~^ ERROR first final: "hello" |
| //~| ERROR second final: "world" |
| //~| ERROR first final: "yay" |
| //~| ERROR second final: "rust" |
| } |
| |
| // forwarding tokens directly doesn't create a new source chain |
| macro three($($tokens:tt)*) { |
| four!($($tokens)*); |
| } |
| |
| macro four($($tokens:tt)*) { |
| parent_source_spans!($($tokens)*); |
| //~^ ERROR cannot find value `ok` in this scope |
| //~| ERROR cannot find value `ok` in this scope |
| //~| ERROR cannot find value `ok` in this scope |
| } |
| |
| fn main() { |
| one!("hello", "world"); |
| //~^ ERROR first grandparent: "hello" |
| //~| ERROR second grandparent: "world" |
| //~| ERROR first source: "hello" |
| //~| ERROR second source: "world" |
| |
| two!("yay", "rust"); |
| //~^ ERROR first parent: "yay" |
| //~| ERROR second parent: "rust" |
| //~| ERROR first source: "yay" |
| //~| ERROR second source: "rust" |
| |
| three!("hip", "hop"); |
| //~^ ERROR first final: "hip" |
| //~| ERROR second final: "hop" |
| //~| ERROR first source: "hip" |
| //~| ERROR second source: "hop" |
| } |