summary refs log tree commit diff
path: root/src/libsyntax/ext
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-06-23 16:37:28 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-07-06 16:59:08 +0300
commit22d6d8ac76d5b86601d09917b83789cf88ea043a (patch)
tree1a3074676ea7bd9789c1572ce0ad6d06d4768408 /src/libsyntax/ext
parent15042a3c1c5ec836d8aa5473a405ee245aec1a3a (diff)
downloadrust-22d6d8ac76d5b86601d09917b83789cf88ea043a.tar.gz
rust-22d6d8ac76d5b86601d09917b83789cf88ea043a.zip
`#[rustc_transparent_macro]` -> `#[rustc_macro_transparency = ...]`
Diffstat (limited to 'src/libsyntax/ext')
-rw-r--r--src/libsyntax/ext/tt/macro_rules.rs18
1 files changed, 11 insertions, 7 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| {