Skip to content

Commit e6e3a41

Browse files
merge source and target bindings into single field
1 parent 6b3ae3f commit e6e3a41

File tree

3 files changed

+133
-130
lines changed

3 files changed

+133
-130
lines changed

compiler/rustc_resolve/src/build_reduced_graph.rs

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
88
use std::cell::Cell;
99
use std::sync::Arc;
10+
use std::task::Poll;
1011

1112
use rustc_ast::visit::{self, AssocCtxt, Visitor, WalkItemKind};
1213
use rustc_ast::{
@@ -32,10 +33,9 @@ use crate::def_collector::collect_definitions;
3233
use crate::imports::{ImportData, ImportKind};
3334
use crate::macros::{MacroRulesBinding, MacroRulesScope, MacroRulesScopeRef};
3435
use crate::{
35-
BindingKey, Determinacy, ExternPreludeEntry, Finalize, MacroData, Module, ModuleKind,
36-
ModuleOrUniformRoot, NameBinding, NameBindingData, NameBindingKind, ParentScope, PathResult,
37-
ResolutionError, Resolver, ResolverArenas, Segment, ToNameBinding, Used, VisResolutionError,
38-
errors,
36+
BindingKey, ExternPreludeEntry, Finalize, MacroData, Module, ModuleKind, ModuleOrUniformRoot,
37+
NameBinding, NameBindingData, NameBindingKind, ParentScope, PathResult, ResolutionError,
38+
Resolver, ResolverArenas, Segment, ToNameBinding, Used, VisResolutionError, errors,
3939
};
4040

4141
type Res = def::Res<NodeId>;
@@ -618,19 +618,24 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
618618
let kind = ImportKind::Single {
619619
source: source.ident,
620620
target: ident,
621-
source_bindings: PerNS {
622-
type_ns: Cell::new(Err(Determinacy::Undetermined)),
623-
value_ns: Cell::new(Err(Determinacy::Undetermined)),
624-
macro_ns: Cell::new(Err(Determinacy::Undetermined)),
625-
},
626-
target_bindings: PerNS {
627-
type_ns: Cell::new(None),
628-
value_ns: Cell::new(None),
629-
macro_ns: Cell::new(None),
630-
},
621+
// source_bindings: PerNS {
622+
// type_ns: Cell::new(Err(Determinacy::Undetermined)),
623+
// value_ns: Cell::new(Err(Determinacy::Undetermined)),
624+
// macro_ns: Cell::new(Err(Determinacy::Undetermined)),
625+
// },
626+
// target_bindings: PerNS {
627+
// type_ns: Cell::new(None),
628+
// value_ns: Cell::new(None),
629+
// macro_ns: Cell::new(None),
630+
// },
631631
type_ns_only,
632632
nested,
633633
id,
634+
bindings: PerNS {
635+
value_ns: Cell::new(Poll::Pending),
636+
type_ns: Cell::new(Poll::Pending),
637+
macro_ns: Cell::new(Poll::Pending),
638+
},
634639
};
635640

636641
self.add_import(module_path, kind, use_tree.span, item, root_span, item.id, vis);

compiler/rustc_resolve/src/ident.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -977,19 +977,18 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
977977
let Some(module) = single_import.imported_module.get() else {
978978
return Err((Undetermined, Weak::No));
979979
};
980-
let ImportKind::Single { source, target, target_bindings, .. } = &single_import.kind
981-
else {
980+
let ImportKind::Single { source, target, bindings, .. } = &single_import.kind else {
982981
unreachable!();
983982
};
984983
if source != target {
985984
// This branch allows the binding to be defined or updated later if the target name
986985
// can hide the source.
987-
if target_bindings.iter().all(|binding| binding.get().is_none()) {
986+
if bindings.iter().all(|binding| binding.get().is_pending()) {
988987
// None of the target bindings are available, so we can't determine
989988
// if this binding is correct or not.
990989
// See more details in #124840
991990
return Err((Undetermined, Weak::No));
992-
} else if target_bindings[ns].get().is_none() && binding.is_some() {
991+
} else if bindings[ns].get().is_pending() && binding.is_some() {
993992
// `binding.is_some()` avoids the condition where the binding
994993
// truly doesn't exist in this namespace and should return `Err(Determined)`.
995994
return Err((Undetermined, Weak::No));

0 commit comments

Comments
 (0)