diff options
| author | bors <bors@rust-lang.org> | 2019-06-11 23:29:20 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-06-11 23:29:20 +0000 |
| commit | 961a9d6e97a37ff1bb33578721dfa8687054c7b8 (patch) | |
| tree | 1fb645923cd8e80998b706e12839320f8ec08000 /src/libsyntax_ext | |
| parent | 5f3656ce9a2212fad872605b7a4ee103a155e9f3 (diff) | |
| parent | 681712be090b72ecc73f08ffe98dd05b6f352052 (diff) | |
Auto merge of #61741 - Centril:rollup-fgro5kz, r=Centril
Rollup of 11 pull requests Successful merges: - #61518 (Add loops to doc list of things not stable in const fn) - #61526 (move some tests into subfolders) - #61550 (Windows 10 SDK is also required now.) - #61606 (Remove some legacy proc macro flavors) - #61652 (Mention slice patterns in array) - #61686 (librustc_errors: Add some more documentation) - #61698 (typeck: Fix const generic in repeat param ICE.) - #61707 (Azure: retry failed awscli installs) - #61715 (make sure make_ascii_lowercase actually leaves upper-case non-ASCII characters alone) - #61724 (core: use memcmp optimization for 128 bit integer slices) - #61726 (Use `for_each` in `Iterator::partition`) Failed merges: r? @ghost
Diffstat (limited to 'src/libsyntax_ext')
| -rw-r--r-- | src/libsyntax_ext/deriving/mod.rs | 24 | ||||
| -rw-r--r-- | src/libsyntax_ext/lib.rs | 19 |
2 files changed, 32 insertions, 11 deletions
diff --git a/src/libsyntax_ext/deriving/mod.rs b/src/libsyntax_ext/deriving/mod.rs index ac41f30e6b3..cf54eacc3d4 100644 --- a/src/libsyntax_ext/deriving/mod.rs +++ b/src/libsyntax_ext/deriving/mod.rs @@ -1,8 +1,8 @@ //! The compiler code necessary to implement the `#[derive]` extensions. use rustc_data_structures::sync::Lrc; -use syntax::ast; -use syntax::ext::base::{Annotatable, ExtCtxt, SyntaxExtension, Resolver}; +use syntax::ast::{self, MetaItem}; +use syntax::ext::base::{Annotatable, ExtCtxt, SyntaxExtension, Resolver, MultiItemModifier}; use syntax::ext::build::AstBuilder; use syntax::ext::hygiene::{Mark, SyntaxContext}; use syntax::ptr::P; @@ -39,9 +39,25 @@ pub mod partial_ord; #[path="cmp/ord.rs"] pub mod ord; - pub mod generic; +struct BuiltinDerive( + fn(&mut ExtCtxt<'_>, Span, &MetaItem, &Annotatable, &mut dyn FnMut(Annotatable)) +); + +impl MultiItemModifier for BuiltinDerive { + fn expand(&self, + ecx: &mut ExtCtxt<'_>, + span: Span, + meta_item: &MetaItem, + item: Annotatable) + -> Vec<Annotatable> { + let mut items = Vec::new(); + (self.0)(ecx, span, meta_item, &item, &mut |a| items.push(a)); + items + } +} + macro_rules! derive_traits { ($( $name:expr => $func:path, )+) => { pub fn is_builtin_trait(name: ast::Name) -> bool { @@ -55,7 +71,7 @@ macro_rules! derive_traits { $( resolver.add_builtin( ast::Ident::with_empty_ctxt(Symbol::intern($name)), - Lrc::new(SyntaxExtension::BuiltinDerive($func)) + Lrc::new(SyntaxExtension::LegacyDerive(Box::new(BuiltinDerive($func)))) ); )* } diff --git a/src/libsyntax_ext/lib.rs b/src/libsyntax_ext/lib.rs index 1627f99f616..3dd17207cb8 100644 --- a/src/libsyntax_ext/lib.rs +++ b/src/libsyntax_ext/lib.rs @@ -42,7 +42,9 @@ pub mod proc_macro_impl; use rustc_data_structures::sync::Lrc; use syntax::ast; -use syntax::ext::base::{MacroExpanderFn, NormalTT, NamedSyntaxExtension, MultiModifier}; + +use syntax::ext::base::{MacroExpanderFn, NamedSyntaxExtension, SyntaxExtension}; +use syntax::ext::hygiene::Transparency; use syntax::edition::Edition; use syntax::symbol::{sym, Symbol}; @@ -57,9 +59,10 @@ pub fn register_builtins(resolver: &mut dyn syntax::ext::base::Resolver, macro_rules! register { ($( $name:ident: $f:expr, )*) => { $( register(Symbol::intern(stringify!($name)), - NormalTT { + SyntaxExtension::LegacyBang { expander: Box::new($f as MacroExpanderFn), def_info: None, + transparency: Transparency::SemiTransparent, allow_internal_unstable: None, allow_internal_unsafe: false, local_inner_macros: false, @@ -94,15 +97,16 @@ pub fn register_builtins(resolver: &mut dyn syntax::ext::base::Resolver, assert: assert::expand_assert, } - register(sym::test_case, MultiModifier(Box::new(test_case::expand))); - register(sym::test, MultiModifier(Box::new(test::expand_test))); - register(sym::bench, MultiModifier(Box::new(test::expand_bench))); + register(sym::test_case, SyntaxExtension::LegacyAttr(Box::new(test_case::expand))); + register(sym::test, SyntaxExtension::LegacyAttr(Box::new(test::expand_test))); + register(sym::bench, SyntaxExtension::LegacyAttr(Box::new(test::expand_bench))); // format_args uses `unstable` things internally. register(Symbol::intern("format_args"), - NormalTT { + SyntaxExtension::LegacyBang { expander: Box::new(format::expand_format_args), def_info: None, + transparency: Transparency::SemiTransparent, allow_internal_unstable: Some(vec![sym::fmt_internals].into()), allow_internal_unsafe: false, local_inner_macros: false, @@ -110,9 +114,10 @@ pub fn register_builtins(resolver: &mut dyn syntax::ext::base::Resolver, edition, }); register(sym::format_args_nl, - NormalTT { + SyntaxExtension::LegacyBang { expander: Box::new(format::expand_format_args_nl), def_info: None, + transparency: Transparency::SemiTransparent, allow_internal_unstable: Some(vec![sym::fmt_internals].into()), allow_internal_unsafe: false, local_inner_macros: false, |
