diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-06-23 16:37:28 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-07-06 16:59:08 +0300 |
| commit | 22d6d8ac76d5b86601d09917b83789cf88ea043a (patch) | |
| tree | 1a3074676ea7bd9789c1572ce0ad6d06d4768408 /src/libsyntax | |
| parent | 15042a3c1c5ec836d8aa5473a405ee245aec1a3a (diff) | |
| download | rust-22d6d8ac76d5b86601d09917b83789cf88ea043a.tar.gz rust-22d6d8ac76d5b86601d09917b83789cf88ea043a.zip | |
`#[rustc_transparent_macro]` -> `#[rustc_macro_transparency = ...]`
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ext/tt/macro_rules.rs | 18 | ||||
| -rw-r--r-- | src/libsyntax/feature_gate.rs | 4 |
2 files changed, 14 insertions, 8 deletions
diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs index 1a448cb2a43..cec59b8a40e 100644 --- a/src/libsyntax/ext/tt/macro_rules.rs +++ b/src/libsyntax/ext/tt/macro_rules.rs @@ -380,13 +380,17 @@ pub fn compile( let expander: Box<_> = Box::new(MacroRulesMacroExpander { name: def.ident, lhses, rhses, valid }); - let default_transparency = if attr::contains_name(&def.attrs, sym::rustc_transparent_macro) { - Transparency::Transparent - } else if body.legacy { - Transparency::SemiTransparent - } else { - Transparency::Opaque - }; + let value_str = attr::first_attr_value_str_by_name(&def.attrs, sym::rustc_macro_transparency); + let default_transparency = value_str.and_then(|s| Some(match &*s.as_str() { + "transparent" => Transparency::Transparent, + "semitransparent" => Transparency::SemiTransparent, + "opaque" => Transparency::Opaque, + _ => { + let msg = format!("unknown macro transparency: `{}`", s); + sess.span_diagnostic.span_err(def.span, &msg); + return None; + } + })).unwrap_or(if body.legacy { Transparency::SemiTransparent } else { Transparency::Opaque }); let allow_internal_unstable = attr::find_by_name(&def.attrs, sym::allow_internal_unstable).map(|attr| { diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index 6dc46ba2c7e..1329e6f7fce 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -1313,7 +1313,9 @@ pub const BUILTIN_ATTRIBUTES: &[BuiltinAttribute] = &[ "the `#[rustc_test_marker]` attribute \ is used internally to track tests", cfg_fn!(rustc_attrs))), - (sym::rustc_transparent_macro, Whitelisted, template!(Word), Gated(Stability::Unstable, + (sym::rustc_macro_transparency, Whitelisted, template!(NameValueStr: + "transparent|semitransparent|opaque"), + Gated(Stability::Unstable, sym::rustc_attrs, "used internally for testing macro hygiene", cfg_fn!(rustc_attrs))), |
