Skip to content

Commit b2f4911

Browse files
committed
[WIP] resolve: In visit_scopes do not extract ctxt out of span unless necessary
1 parent a3c5eaf commit b2f4911

4 files changed

Lines changed: 15 additions & 13 deletions

File tree

compiler/rustc_resolve/src/diagnostics.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ use rustc_span::edit_distance::find_best_match_for_name;
3232
use rustc_span::edition::Edition;
3333
use rustc_span::hygiene::MacroKind;
3434
use rustc_span::source_map::{SourceMap, Spanned};
35-
use rustc_span::{BytePos, Ident, Macros20NormalizedIdent, Span, Symbol, SyntaxContext, kw, sym};
35+
use rustc_span::{
36+
BytePos, DUMMY_SP, Ident, Macros20NormalizedIdent, Span, Symbol, SyntaxContext, kw, sym,
37+
};
3638
use thin_vec::{ThinVec, thin_vec};
3739
use tracing::{debug, instrument};
3840

@@ -1177,6 +1179,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
11771179
ctxt: SyntaxContext,
11781180
filter_fn: &impl Fn(Res) -> bool,
11791181
) {
1182+
let ctxt = DUMMY_SP.with_ctxt(ctxt);
11801183
self.cm().visit_scopes(scope_set, ps, ctxt, None, |this, scope, use_prelude, _| {
11811184
match scope {
11821185
Scope::DeriveHelpers(expn_id) => {

compiler/rustc_resolve/src/ident.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -236,11 +236,12 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
236236
fn hygienic_lexical_parent(
237237
&self,
238238
module: Module<'ra>,
239-
ctxt: &mut SyntaxContext,
239+
span: &mut Span,
240240
derive_fallback_lint_id: Option<NodeId>,
241241
) -> Option<(Module<'ra>, Option<NodeId>)> {
242-
if !module.expansion.outer_expn_is_descendant_of(*ctxt) {
243-
return Some((self.expn_def_scope(ctxt.remove_mark()), None));
242+
let ctxt = span.ctxt();
243+
if !module.expansion.outer_expn_is_descendant_of(ctxt) {
244+
return Some((self.expn_def_scope(span.remove_mark()), None));
244245
}
245246

246247
if let ModuleKind::Block = module.kind {
@@ -270,7 +271,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
270271
let ext = &self.get_macro_by_def_id(def_id).ext;
271272
if ext.builtin_name.is_none()
272273
&& ext.macro_kinds() == MacroKinds::DERIVE
273-
&& parent.expansion.outer_expn_is_descendant_of(*ctxt)
274+
&& parent.expansion.outer_expn_is_descendant_of(ctxt)
274275
{
275276
return Some((parent, derive_fallback_lint_id));
276277
}
@@ -431,10 +432,10 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
431432
let break_result = self.visit_scopes(
432433
scope_set,
433434
parent_scope,
434-
orig_ident.span.ctxt(),
435+
orig_ident.span,
435436
derive_fallback_lint_id,
436437
|this, scope, use_prelude, ctxt| {
437-
let ident = Ident::new(orig_ident.name, orig_ident.span.with_ctxt(ctxt));
438+
let ident = Ident::new(orig_ident.name, ctxt);
438439
// The passed `ctxt` is already normalized, so avoid expensive double normalization.
439440
let ident = Macros20NormalizedIdent(ident);
440441
let res = match this.reborrow().resolve_ident_in_scope(

compiler/rustc_resolve/src/late.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,7 @@ use rustc_session::config::{CrateType, ResolveDocLinks};
3737
use rustc_session::lint;
3838
use rustc_session::parse::feature_err;
3939
use rustc_span::source_map::{Spanned, respan};
40-
use rustc_span::{
41-
BytePos, DUMMY_SP, Ident, Macros20NormalizedIdent, Span, Symbol, SyntaxContext, kw, sym,
42-
};
40+
use rustc_span::{BytePos, DUMMY_SP, Ident, Macros20NormalizedIdent, Span, Symbol, kw, sym};
4341
use smallvec::{SmallVec, smallvec};
4442
use thin_vec::ThinVec;
4543
use tracing::{debug, instrument, trace};
@@ -5224,7 +5222,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
52245222
self.r.traits_in_scope(
52255223
self.current_trait_ref.as_ref().map(|(module, _)| *module),
52265224
&self.parent_scope,
5227-
ident.span.ctxt(),
5225+
ident.span,
52285226
Some((ident.name, ns)),
52295227
)
52305228
}
@@ -5323,7 +5321,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
53235321
.entry(self.parent_scope.module.nearest_parent_mod().expect_local())
53245322
.or_insert_with(|| {
53255323
self.r
5326-
.traits_in_scope(None, &self.parent_scope, SyntaxContext::root(), None)
5324+
.traits_in_scope(None, &self.parent_scope, DUMMY_SP, None)
53275325
.into_iter()
53285326
.filter_map(|tr| {
53295327
if self.is_invalid_proc_macro_item_for_doc(tr.def_id) {

compiler/rustc_resolve/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1908,7 +1908,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
19081908
&mut self,
19091909
current_trait: Option<Module<'ra>>,
19101910
parent_scope: &ParentScope<'ra>,
1911-
ctxt: SyntaxContext,
1911+
ctxt: Span,
19121912
assoc_item: Option<(Symbol, Namespace)>,
19131913
) -> Vec<TraitCandidate> {
19141914
let mut found_traits = Vec::new();

0 commit comments

Comments
 (0)