diff options
| author | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2017-11-29 01:05:31 -0800 |
|---|---|---|
| committer | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2017-12-13 13:33:03 -0800 |
| commit | d052d28d70b31fac942765da137f794835e6536e (patch) | |
| tree | b339c73c8f824f39bab9aa06dc785964f46e917d /src/test | |
| parent | 3dfbc88a626625be01e112da11ec367e2fc71bb3 (diff) | |
| download | rust-d052d28d70b31fac942765da137f794835e6536e.tar.gz rust-d052d28d70b31fac942765da137f794835e6536e.zip | |
Improve interaction between macros 2.0 and `macro_rules!`.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/run-pass/hygiene/auxiliary/legacy_interaction.rs | 19 | ||||
| -rw-r--r-- | src/test/run-pass/hygiene/legacy_interaction.rs | 50 |
2 files changed, 69 insertions, 0 deletions
diff --git a/src/test/run-pass/hygiene/auxiliary/legacy_interaction.rs b/src/test/run-pass/hygiene/auxiliary/legacy_interaction.rs new file mode 100644 index 00000000000..c614ee4d575 --- /dev/null +++ b/src/test/run-pass/hygiene/auxiliary/legacy_interaction.rs @@ -0,0 +1,19 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// ignore-pretty pretty-printing is unhygienic + +#[macro_export] +macro_rules! m { + () => { + fn f() {} // (2) + g(); // (1) + } +} diff --git a/src/test/run-pass/hygiene/legacy_interaction.rs b/src/test/run-pass/hygiene/legacy_interaction.rs new file mode 100644 index 00000000000..683a15b99ae --- /dev/null +++ b/src/test/run-pass/hygiene/legacy_interaction.rs @@ -0,0 +1,50 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// ignore-pretty pretty-printing is unhygienic + +// aux-build:legacy_interaction.rs + +#![feature(decl_macro)] +#[allow(unused)] + +extern crate legacy_interaction; +// ^ defines +// ```rust +// macro_rules! m { +// () => { +// fn f() // (1) +// g() // (2) +// } +// } +// ```rust + +mod def_site { + // Unless this macro opts out of hygiene, it should resolve the same wherever it is invoked. + pub macro m2() { + ::legacy_interaction::m!(); + f(); // This should resolve to (1) + fn g() {} // We want (2) resolve to this, not to (4) + } +} + +mod use_site { + fn test() { + fn f() -> bool { true } // (3) + fn g() -> bool { true } // (4) + + ::def_site::m2!(); + + let _: bool = f(); // This should resolve to (3) + let _: bool = g(); // This should resolve to (4) + } +} + +fn main() {} |
