diff options
| author | Christian Poveda <cpovedar@fnal.gov> | 2019-06-20 17:01:48 -0500 |
|---|---|---|
| committer | Christian Poveda <cpovedar@fnal.gov> | 2019-06-20 17:01:48 -0500 |
| commit | e152c38f65ae1aa69630b0b82e571e52b05e3302 (patch) | |
| tree | a717ab627647fe0e4a11057a58277db860a4c1b4 /src/libsyntax_ext | |
| parent | 752a1a46685412202153c53ae320957cb48c751b (diff) | |
| parent | f693d339f175b3aa23a91c62632c5f0c86886059 (diff) | |
Fix merge issues
Diffstat (limited to 'src/libsyntax_ext')
| -rw-r--r-- | src/libsyntax_ext/deriving/generic/mod.rs | 13 | ||||
| -rw-r--r-- | src/libsyntax_ext/deriving/generic/ty.rs | 1 | ||||
| -rw-r--r-- | src/libsyntax_ext/deriving/mod.rs | 40 | ||||
| -rw-r--r-- | src/libsyntax_ext/format.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax_ext/lib.rs | 70 | ||||
| -rw-r--r-- | src/libsyntax_ext/proc_macro_decls.rs | 16 | ||||
| -rw-r--r-- | src/libsyntax_ext/test.rs | 15 | ||||
| -rw-r--r-- | src/libsyntax_ext/test_case.rs | 15 |
8 files changed, 74 insertions, 98 deletions
diff --git a/src/libsyntax_ext/deriving/generic/mod.rs b/src/libsyntax_ext/deriving/generic/mod.rs index 8b719b5477c..444cf1263ce 100644 --- a/src/libsyntax_ext/deriving/generic/mod.rs +++ b/src/libsyntax_ext/deriving/generic/mod.rs @@ -339,14 +339,15 @@ pub fn combine_substructure<'a>(f: CombineSubstructureFunc<'a>) /// This method helps to extract all the type parameters referenced from a /// type. For a type parameter `<T>`, it looks for either a `TyPath` that /// is not global and starts with `T`, or a `TyQPath`. -fn find_type_parameters(ty: &ast::Ty, - ty_param_names: &[ast::Name], - span: Span, - cx: &ExtCtxt<'_>) - -> Vec<P<ast::Ty>> { +fn find_type_parameters( + ty: &ast::Ty, + ty_param_names: &[ast::Name], + span: Span, + cx: &ExtCtxt<'_>, +) -> Vec<P<ast::Ty>> { use syntax::visit; - struct Visitor<'a, 'b: 'a> { + struct Visitor<'a, 'b> { cx: &'a ExtCtxt<'b>, span: Span, ty_param_names: &'a [ast::Name], diff --git a/src/libsyntax_ext/deriving/generic/ty.rs b/src/libsyntax_ext/deriving/generic/ty.rs index 362ea9ed229..90d826429da 100644 --- a/src/libsyntax_ext/deriving/generic/ty.rs +++ b/src/libsyntax_ext/deriving/generic/ty.rs @@ -223,7 +223,6 @@ fn mk_generics(params: Vec<ast::GenericParam>, span: Span) -> Generics { Generics { params, where_clause: ast::WhereClause { - id: ast::DUMMY_NODE_ID, predicates: Vec::new(), span, }, diff --git a/src/libsyntax_ext/deriving/mod.rs b/src/libsyntax_ext/deriving/mod.rs index cf54eacc3d4..1fe6094fca6 100644 --- a/src/libsyntax_ext/deriving/mod.rs +++ b/src/libsyntax_ext/deriving/mod.rs @@ -2,9 +2,10 @@ use rustc_data_structures::sync::Lrc; use syntax::ast::{self, MetaItem}; -use syntax::ext::base::{Annotatable, ExtCtxt, SyntaxExtension, Resolver, MultiItemModifier}; +use syntax::edition::Edition; +use syntax::ext::base::{Annotatable, ExtCtxt, Resolver, MultiItemModifier}; +use syntax::ext::base::{SyntaxExtension, SyntaxExtensionKind}; use syntax::ext::build::AstBuilder; -use syntax::ext::hygiene::{Mark, SyntaxContext}; use syntax::ptr::P; use syntax::symbol::{Symbol, sym}; use syntax_pos::Span; @@ -67,11 +68,25 @@ macro_rules! derive_traits { } } - pub fn register_builtin_derives(resolver: &mut dyn Resolver) { + pub fn register_builtin_derives(resolver: &mut dyn Resolver, edition: Edition) { + let allow_internal_unstable = Some([ + sym::core_intrinsics, + sym::rustc_attrs, + Symbol::intern("derive_clone_copy"), + Symbol::intern("derive_eq"), + Symbol::intern("libstd_sys_internals"), // RustcDeserialize and RustcSerialize + ][..].into()); + $( resolver.add_builtin( ast::Ident::with_empty_ctxt(Symbol::intern($name)), - Lrc::new(SyntaxExtension::LegacyDerive(Box::new(BuiltinDerive($func)))) + Lrc::new(SyntaxExtension { + allow_internal_unstable: allow_internal_unstable.clone(), + ..SyntaxExtension::default( + SyntaxExtensionKind::LegacyDerive(Box::new(BuiltinDerive($func))), + edition, + ) + }), ); )* } @@ -148,24 +163,11 @@ fn hygienic_type_parameter(item: &Annotatable, base: &str) -> String { /// Constructs an expression that calls an intrinsic fn call_intrinsic(cx: &ExtCtxt<'_>, - mut span: Span, + span: Span, intrinsic: &str, args: Vec<P<ast::Expr>>) -> P<ast::Expr> { - let intrinsic_allowed_via_allow_internal_unstable = cx - .current_expansion.mark.expn_info().unwrap() - .allow_internal_unstable.map_or(false, |features| features.iter().any(|&s| - s == sym::core_intrinsics - )); - if intrinsic_allowed_via_allow_internal_unstable { - span = span.with_ctxt(cx.backtrace()); - } else { // Avoid instability errors with user defined curstom derives, cc #36316 - let mut info = cx.current_expansion.mark.expn_info().unwrap(); - info.allow_internal_unstable = Some(vec![sym::core_intrinsics].into()); - let mark = Mark::fresh(Mark::root()); - mark.set_expn_info(info); - span = span.with_ctxt(SyntaxContext::empty().apply_mark(mark)); - } + let span = span.with_ctxt(cx.backtrace()); let path = cx.std_path(&[sym::intrinsics, Symbol::intern(intrinsic)]); let call = cx.expr_call_global(span, path, args); diff --git a/src/libsyntax_ext/format.rs b/src/libsyntax_ext/format.rs index f44a6e7efa4..a5f96559ca8 100644 --- a/src/libsyntax_ext/format.rs +++ b/src/libsyntax_ext/format.rs @@ -31,7 +31,7 @@ enum Position { Named(Symbol), } -struct Context<'a, 'b: 'a> { +struct Context<'a, 'b> { ecx: &'a mut ExtCtxt<'b>, /// The macro's call site. References to unstable formatting internals must /// use this span to pass the stability checker. diff --git a/src/libsyntax_ext/lib.rs b/src/libsyntax_ext/lib.rs index 3dd17207cb8..b868f5b273c 100644 --- a/src/libsyntax_ext/lib.rs +++ b/src/libsyntax_ext/lib.rs @@ -43,32 +43,31 @@ pub mod proc_macro_impl; use rustc_data_structures::sync::Lrc; use syntax::ast; -use syntax::ext::base::{MacroExpanderFn, NamedSyntaxExtension, SyntaxExtension}; -use syntax::ext::hygiene::Transparency; +use syntax::ext::base::MacroExpanderFn; +use syntax::ext::base::{NamedSyntaxExtension, SyntaxExtension, SyntaxExtensionKind}; use syntax::edition::Edition; use syntax::symbol::{sym, Symbol}; pub fn register_builtins(resolver: &mut dyn syntax::ext::base::Resolver, user_exts: Vec<NamedSyntaxExtension>, edition: Edition) { - deriving::register_builtin_derives(resolver); + deriving::register_builtin_derives(resolver, edition); let mut register = |name, ext| { resolver.add_builtin(ast::Ident::with_empty_ctxt(name), Lrc::new(ext)); }; macro_rules! register { ($( $name:ident: $f:expr, )*) => { $( - register(Symbol::intern(stringify!($name)), - 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, - unstable_feature: None, - edition, - }); + register(Symbol::intern(stringify!($name)), SyntaxExtension::default( + SyntaxExtensionKind::LegacyBang(Box::new($f as MacroExpanderFn)), edition + )); + )* } + } + macro_rules! register_attr { + ($( $name:ident: $f:expr, )*) => { $( + register(Symbol::intern(stringify!($name)), SyntaxExtension::default( + SyntaxExtensionKind::LegacyAttr(Box::new($f)), edition + )); )* } } @@ -97,33 +96,26 @@ pub fn register_builtins(resolver: &mut dyn syntax::ext::base::Resolver, assert: assert::expand_assert, } - 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))); + register_attr! { + test_case: test_case::expand, + test: test::expand_test, + bench: test::expand_bench, + } // format_args uses `unstable` things internally. - register(Symbol::intern("format_args"), - 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, - unstable_feature: None, - edition, - }); - register(sym::format_args_nl, - 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, - unstable_feature: None, - edition, - }); + let allow_internal_unstable = Some([sym::fmt_internals][..].into()); + register(Symbol::intern("format_args"), SyntaxExtension { + allow_internal_unstable: allow_internal_unstable.clone(), + ..SyntaxExtension::default( + SyntaxExtensionKind::LegacyBang(Box::new(format::expand_format_args)), edition + ) + }); + register(sym::format_args_nl, SyntaxExtension { + allow_internal_unstable, + ..SyntaxExtension::default( + SyntaxExtensionKind::LegacyBang(Box::new(format::expand_format_args_nl)), edition + ) + }); for (name, ext) in user_exts { register(name, ext); diff --git a/src/libsyntax_ext/proc_macro_decls.rs b/src/libsyntax_ext/proc_macro_decls.rs index 29297aa913e..45e65288a24 100644 --- a/src/libsyntax_ext/proc_macro_decls.rs +++ b/src/libsyntax_ext/proc_macro_decls.rs @@ -347,18 +347,10 @@ fn mk_decls( custom_macros: &[ProcMacroDef], ) -> P<ast::Item> { let mark = Mark::fresh(Mark::root()); - mark.set_expn_info(ExpnInfo { - call_site: DUMMY_SP, - def_site: None, - format: MacroAttribute(sym::proc_macro), - allow_internal_unstable: Some(vec![ - sym::rustc_attrs, - Symbol::intern("proc_macro_internals"), - ].into()), - allow_internal_unsafe: false, - local_inner_macros: false, - edition: cx.parse_sess.edition, - }); + mark.set_expn_info(ExpnInfo::with_unstable( + MacroAttribute(sym::proc_macro), DUMMY_SP, cx.parse_sess.edition, + &[sym::rustc_attrs, Symbol::intern("proc_macro_internals")], + )); let span = DUMMY_SP.apply_mark(mark); let hidden = cx.meta_list_item_word(span, sym::hidden); diff --git a/src/libsyntax_ext/test.rs b/src/libsyntax_ext/test.rs index c20dc6cb2d7..24d3055e711 100644 --- a/src/libsyntax_ext/test.rs +++ b/src/libsyntax_ext/test.rs @@ -8,7 +8,7 @@ use syntax::attr; use syntax::ast; use syntax::print::pprust; use syntax::symbol::{Symbol, sym}; -use syntax_pos::{DUMMY_SP, Span}; +use syntax_pos::Span; use syntax::source_map::{ExpnInfo, MacroAttribute}; use std::iter; @@ -62,15 +62,10 @@ pub fn expand_test_or_bench( let (sp, attr_sp) = { let mark = Mark::fresh(Mark::root()); - mark.set_expn_info(ExpnInfo { - call_site: DUMMY_SP, - def_site: None, - format: MacroAttribute(sym::test), - allow_internal_unstable: Some(vec![sym::rustc_attrs, sym::test].into()), - allow_internal_unsafe: false, - local_inner_macros: false, - edition: cx.parse_sess.edition, - }); + mark.set_expn_info(ExpnInfo::with_unstable( + MacroAttribute(sym::test), attr_sp, cx.parse_sess.edition, + &[sym::rustc_attrs, sym::test], + )); (item.span.with_ctxt(SyntaxContext::empty().apply_mark(mark)), attr_sp.with_ctxt(SyntaxContext::empty().apply_mark(mark))) }; diff --git a/src/libsyntax_ext/test_case.rs b/src/libsyntax_ext/test_case.rs index cffecdd0f18..6e3bc05b65e 100644 --- a/src/libsyntax_ext/test_case.rs +++ b/src/libsyntax_ext/test_case.rs @@ -15,7 +15,7 @@ use syntax::ext::hygiene::{Mark, SyntaxContext}; use syntax::ast; use syntax::source_map::respan; use syntax::symbol::sym; -use syntax_pos::{DUMMY_SP, Span}; +use syntax_pos::Span; use syntax::source_map::{ExpnInfo, MacroAttribute}; use syntax::feature_gate; @@ -37,15 +37,10 @@ pub fn expand( let sp = { let mark = Mark::fresh(Mark::root()); - mark.set_expn_info(ExpnInfo { - call_site: DUMMY_SP, - def_site: None, - format: MacroAttribute(sym::test_case), - allow_internal_unstable: Some(vec![sym::test, sym::rustc_attrs].into()), - allow_internal_unsafe: false, - local_inner_macros: false, - edition: ecx.parse_sess.edition, - }); + mark.set_expn_info(ExpnInfo::with_unstable( + MacroAttribute(sym::test_case), attr_sp, ecx.parse_sess.edition, + &[sym::test, sym::rustc_attrs], + )); attr_sp.with_ctxt(SyntaxContext::empty().apply_mark(mark)) }; |
