diff options
| author | bors <bors@rust-lang.org> | 2019-02-12 12:10:10 +0000 | 
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-02-12 12:10:10 +0000 | 
| commit | c84e7976423bb910bb5eb5eecffc7e33a897a97f (patch) | |
| tree | 24570884cb7742fe817286a3cde2643722eb8c6a /src/libsyntax/ext/base.rs | |
| parent | a54b5c7a645ead203d77e78245362f9e0f00dd3c (diff) | |
| parent | bbe524d7c1a1028737a93c7c71c508a68363b681 (diff) | |
| download | rust-c84e7976423bb910bb5eb5eecffc7e33a897a97f.tar.gz rust-c84e7976423bb910bb5eb5eecffc7e33a897a97f.zip | |
Auto merge of #58098 - oli-obk:maybe_allow_internal_unstable, r=petrochenkov
Require a list of features in `#[allow_internal_unstable]` The blanket-permission slip is not great and will likely give us trouble some point down the road.
Diffstat (limited to 'src/libsyntax/ext/base.rs')
| -rw-r--r-- | src/libsyntax/ext/base.rs | 20 | 
1 files changed, 13 insertions, 7 deletions
| diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index 465b53184dc..f7225810aca 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -621,7 +621,8 @@ pub enum SyntaxExtension { /// A function-like procedural macro. TokenStream -> TokenStream. ProcMacro { expander: Box<dyn ProcMacro + sync::Sync + sync::Send>, - allow_internal_unstable: bool, + /// Whitelist of unstable features that are treated as stable inside this macro + allow_internal_unstable: Option<Lrc<[Symbol]>>, edition: Edition, }, @@ -638,8 +639,10 @@ pub enum SyntaxExtension { expander: Box<dyn TTMacroExpander + sync::Sync + sync::Send>, def_info: Option<(ast::NodeId, Span)>, /// Whether the contents of the macro can - /// directly use `#[unstable]` things (true == yes). - allow_internal_unstable: bool, + /// directly use `#[unstable]` things. + /// + /// Only allows things that require a feature gate in the given whitelist + allow_internal_unstable: Option<Lrc<[Symbol]>>, /// Whether the contents of the macro can use `unsafe` /// without triggering the `unsafe_code` lint. allow_internal_unsafe: bool, @@ -654,8 +657,11 @@ pub enum SyntaxExtension { /// A function-like syntax extension that has an extra ident before /// the block. - /// - IdentTT(Box<dyn IdentMacroExpander + sync::Sync + sync::Send>, Option<Span>, bool), + IdentTT { + expander: Box<dyn IdentMacroExpander + sync::Sync + sync::Send>, + span: Option<Span>, + allow_internal_unstable: Option<Lrc<[Symbol]>>, + }, /// An attribute-like procedural macro. TokenStream -> TokenStream. /// The input is the annotated item. @@ -682,7 +688,7 @@ impl SyntaxExtension { match *self { SyntaxExtension::DeclMacro { .. } | SyntaxExtension::NormalTT { .. } | - SyntaxExtension::IdentTT(..) | + SyntaxExtension::IdentTT { .. } | SyntaxExtension::ProcMacro { .. } => MacroKind::Bang, SyntaxExtension::NonMacroAttr { .. } | @@ -716,7 +722,7 @@ impl SyntaxExtension { SyntaxExtension::ProcMacroDerive(.., edition) => edition, // Unstable legacy stuff SyntaxExtension::NonMacroAttr { .. } | - SyntaxExtension::IdentTT(..) | + SyntaxExtension::IdentTT { .. } | SyntaxExtension::MultiDecorator(..) | SyntaxExtension::MultiModifier(..) | SyntaxExtension::BuiltinDerive(..) => hygiene::default_edition(), | 
