diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-06-17 00:31:46 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-06-18 10:48:56 +0300 |
| commit | 679000cc0e98b2810a2d1c76ae77ce2574a4ab91 (patch) | |
| tree | 9a4933e716a54fa28bc8b38ee1910536558e47e2 /src/libsyntax_ext/deriving/mod.rs | |
| parent | 961ba8f9efbb51d80e7e73a609f6587c0ffa0623 (diff) | |
| download | rust-679000cc0e98b2810a2d1c76ae77ce2574a4ab91.tar.gz rust-679000cc0e98b2810a2d1c76ae77ce2574a4ab91.zip | |
allow_internal_unstable: Avoid some more allocations
Diffstat (limited to 'src/libsyntax_ext/deriving/mod.rs')
| -rw-r--r-- | src/libsyntax_ext/deriving/mod.rs | 19 |
1 files changed, 3 insertions, 16 deletions
diff --git a/src/libsyntax_ext/deriving/mod.rs b/src/libsyntax_ext/deriving/mod.rs index e4a413dda09..1fe6094fca6 100644 --- a/src/libsyntax_ext/deriving/mod.rs +++ b/src/libsyntax_ext/deriving/mod.rs @@ -6,7 +6,6 @@ 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; @@ -71,6 +70,7 @@ macro_rules! derive_traits { 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"), @@ -163,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); |
