Skip to content

Commit 679000c

Browse files
committed
allow_internal_unstable: Avoid some more allocations
1 parent 961ba8f commit 679000c

File tree

3 files changed

+16
-23
lines changed

3 files changed

+16
-23
lines changed

src/librustc/hir/lowering.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,9 @@ pub struct LoweringContext<'a> {
142142
current_hir_id_owner: Vec<(DefIndex, u32)>,
143143
item_local_id_counters: NodeMap<u32>,
144144
node_id_to_hir_id: IndexVec<NodeId, hir::HirId>,
145+
146+
allow_try_trait: Option<Lrc<[Symbol]>>,
147+
allow_gen_future: Option<Lrc<[Symbol]>>,
145148
}
146149

147150
pub trait Resolver {
@@ -267,6 +270,8 @@ pub fn lower_crate(
267270
lifetimes_to_define: Vec::new(),
268271
is_collecting_in_band_lifetimes: false,
269272
in_scope_lifetimes: Vec::new(),
273+
allow_try_trait: Some([sym::try_trait][..].into()),
274+
allow_gen_future: Some([sym::gen_future][..].into()),
270275
}.lower_crate(krate)
271276
}
272277

@@ -1156,7 +1161,7 @@ impl<'a> LoweringContext<'a> {
11561161
let unstable_span = self.mark_span_with_reason(
11571162
CompilerDesugaringKind::Async,
11581163
span,
1159-
Some(vec![sym::gen_future].into()),
1164+
self.allow_gen_future.clone(),
11601165
);
11611166
let gen_future = self.expr_std_path(
11621167
unstable_span, &[sym::future, sym::from_generator], None, ThinVec::new());
@@ -4382,7 +4387,7 @@ impl<'a> LoweringContext<'a> {
43824387
let unstable_span = this.mark_span_with_reason(
43834388
CompilerDesugaringKind::TryBlock,
43844389
body.span,
4385-
Some(vec![sym::try_trait].into()),
4390+
this.allow_try_trait.clone(),
43864391
);
43874392
let mut block = this.lower_block(body, true).into_inner();
43884393
let tail = block.expr.take().map_or_else(
@@ -4968,13 +4973,13 @@ impl<'a> LoweringContext<'a> {
49684973
let unstable_span = self.mark_span_with_reason(
49694974
CompilerDesugaringKind::QuestionMark,
49704975
e.span,
4971-
Some(vec![sym::try_trait].into()),
4976+
self.allow_try_trait.clone(),
49724977
);
49734978
let try_span = self.sess.source_map().end_point(e.span);
49744979
let try_span = self.mark_span_with_reason(
49754980
CompilerDesugaringKind::QuestionMark,
49764981
try_span,
4977-
Some(vec![sym::try_trait].into()),
4982+
self.allow_try_trait.clone(),
49784983
);
49794984

49804985
// `Try::into_result(<expr>)`
@@ -5776,7 +5781,7 @@ impl<'a> LoweringContext<'a> {
57765781
let gen_future_span = self.mark_span_with_reason(
57775782
CompilerDesugaringKind::Await,
57785783
await_span,
5779-
Some(vec![sym::gen_future].into()),
5784+
self.allow_gen_future.clone(),
57805785
);
57815786

57825787
// let mut pinned = <expr>;

src/libsyntax_ext/deriving/mod.rs

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use syntax::edition::Edition;
66
use syntax::ext::base::{Annotatable, ExtCtxt, Resolver, MultiItemModifier};
77
use syntax::ext::base::{SyntaxExtension, SyntaxExtensionKind};
88
use syntax::ext::build::AstBuilder;
9-
use syntax::ext::hygiene::{Mark, SyntaxContext};
109
use syntax::ptr::P;
1110
use syntax::symbol::{Symbol, sym};
1211
use syntax_pos::Span;
@@ -71,6 +70,7 @@ macro_rules! derive_traits {
7170

7271
pub fn register_builtin_derives(resolver: &mut dyn Resolver, edition: Edition) {
7372
let allow_internal_unstable = Some([
73+
sym::core_intrinsics,
7474
sym::rustc_attrs,
7575
Symbol::intern("derive_clone_copy"),
7676
Symbol::intern("derive_eq"),
@@ -163,24 +163,11 @@ fn hygienic_type_parameter(item: &Annotatable, base: &str) -> String {
163163

164164
/// Constructs an expression that calls an intrinsic
165165
fn call_intrinsic(cx: &ExtCtxt<'_>,
166-
mut span: Span,
166+
span: Span,
167167
intrinsic: &str,
168168
args: Vec<P<ast::Expr>>)
169169
-> P<ast::Expr> {
170-
let intrinsic_allowed_via_allow_internal_unstable = cx
171-
.current_expansion.mark.expn_info().unwrap()
172-
.allow_internal_unstable.map_or(false, |features| features.iter().any(|&s|
173-
s == sym::core_intrinsics
174-
));
175-
if intrinsic_allowed_via_allow_internal_unstable {
176-
span = span.with_ctxt(cx.backtrace());
177-
} else { // Avoid instability errors with user defined curstom derives, cc #36316
178-
let mut info = cx.current_expansion.mark.expn_info().unwrap();
179-
info.allow_internal_unstable = Some(vec![sym::core_intrinsics].into());
180-
let mark = Mark::fresh(Mark::root());
181-
mark.set_expn_info(info);
182-
span = span.with_ctxt(SyntaxContext::empty().apply_mark(mark));
183-
}
170+
let span = span.with_ctxt(cx.backtrace());
184171
let path = cx.std_path(&[sym::intrinsics, Symbol::intern(intrinsic)]);
185172
let call = cx.expr_call_global(span, path, args);
186173

src/libsyntax_ext/lib.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,14 +103,15 @@ pub fn register_builtins(resolver: &mut dyn syntax::ext::base::Resolver,
103103
}
104104

105105
// format_args uses `unstable` things internally.
106+
let allow_internal_unstable = Some([sym::fmt_internals][..].into());
106107
register(Symbol::intern("format_args"), SyntaxExtension {
107-
allow_internal_unstable: Some([sym::fmt_internals][..].into()),
108+
allow_internal_unstable: allow_internal_unstable.clone(),
108109
..SyntaxExtension::default(
109110
SyntaxExtensionKind::LegacyBang(Box::new(format::expand_format_args)), edition
110111
)
111112
});
112113
register(sym::format_args_nl, SyntaxExtension {
113-
allow_internal_unstable: Some([sym::fmt_internals][..].into()),
114+
allow_internal_unstable,
114115
..SyntaxExtension::default(
115116
SyntaxExtensionKind::LegacyBang(Box::new(format::expand_format_args_nl)), edition
116117
)

0 commit comments

Comments
 (0)