@@ -2,7 +2,6 @@ use crate::edition::Edition;
2
2
use crate :: ext:: base:: { DummyResult , ExtCtxt , MacResult , TTMacroExpander } ;
3
3
use crate :: ext:: base:: { SyntaxExtension , SyntaxExtensionKind } ;
4
4
use crate :: ext:: expand:: { AstFragment , AstFragmentKind } ;
5
- use crate :: ext:: hygiene:: Transparency ;
6
5
use crate :: ext:: tt:: macro_parser:: { parse, parse_failure_msg} ;
7
6
use crate :: ext:: tt:: macro_parser:: { Error , Failure , Success } ;
8
7
use crate :: ext:: tt:: macro_parser:: { MatchedNonterminal , MatchedSeq } ;
@@ -15,7 +14,7 @@ use crate::parse::token::{self, NtTT, Token};
15
14
use crate :: parse:: { Directory , ParseSess } ;
16
15
use crate :: symbol:: { kw, sym, Symbol } ;
17
16
use crate :: tokenstream:: { DelimSpan , TokenStream , TokenTree } ;
18
- use crate :: { ast, attr} ;
17
+ use crate :: { ast, attr, attr :: TransparencyError } ;
19
18
20
19
use errors:: FatalError ;
21
20
use log:: debug;
@@ -380,17 +379,19 @@ pub fn compile(
380
379
let expander: Box < _ > =
381
380
Box :: new ( MacroRulesMacroExpander { name : def. ident , lhses, rhses, valid } ) ;
382
381
383
- let value_str = attr:: first_attr_value_str_by_name ( & def. attrs , sym:: rustc_macro_transparency) ;
384
- let default_transparency = value_str. and_then ( |s| Some ( match & * s. as_str ( ) {
385
- "transparent" => Transparency :: Transparent ,
386
- "semitransparent" => Transparency :: SemiTransparent ,
387
- "opaque" => Transparency :: Opaque ,
388
- _ => {
389
- let msg = format ! ( "unknown macro transparency: `{}`" , s) ;
390
- sess. span_diagnostic . span_err ( def. span , & msg) ;
391
- return None ;
392
- }
393
- } ) ) . unwrap_or ( if body. legacy { Transparency :: SemiTransparent } else { Transparency :: Opaque } ) ;
382
+ let ( default_transparency, transparency_error) =
383
+ attr:: find_transparency ( & def. attrs , body. legacy ) ;
384
+ match transparency_error {
385
+ Some ( TransparencyError :: UnknownTransparency ( value, span) ) =>
386
+ sess. span_diagnostic . span_err (
387
+ span, & format ! ( "unknown macro transparency: `{}`" , value)
388
+ ) ,
389
+ Some ( TransparencyError :: MultipleTransparencyAttrs ( old_span, new_span) ) =>
390
+ sess. span_diagnostic . span_err (
391
+ vec ! [ old_span, new_span] , "multiple macro transparency attributes"
392
+ ) ,
393
+ None => { }
394
+ }
394
395
395
396
let allow_internal_unstable =
396
397
attr:: find_by_name ( & def. attrs , sym:: allow_internal_unstable) . map ( |attr| {
0 commit comments