about summary refs log tree commit diff
path: root/src/libsyntax_ext/deriving/mod.rs
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-06-17 00:31:46 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-06-18 10:48:56 +0300
commit679000cc0e98b2810a2d1c76ae77ce2574a4ab91 (patch)
tree9a4933e716a54fa28bc8b38ee1910536558e47e2 /src/libsyntax_ext/deriving/mod.rs
parent961ba8f9efbb51d80e7e73a609f6587c0ffa0623 (diff)
downloadrust-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.rs19
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);