Remove for_each_child_stable

Now that `Resolutions` has a deterministic iteration order, it's no
longer necessary to sort its entries before iterating over them
This commit is contained in:
Aaron Hill 2019-10-05 16:02:34 -04:00
parent dd403e4ab0
commit add0a42034
No known key found for this signature in database
GPG Key ID: B4087E510E98B164
5 changed files with 17 additions and 28 deletions

View File

@ -527,7 +527,7 @@ impl<'a> Resolver<'a> {
in_module_is_extern)) = worklist.pop() {
// We have to visit module children in deterministic order to avoid
// instabilities in reported imports (#43552).
in_module.for_each_child_stable(self, |this, ident, ns, name_binding| {
in_module.for_each_child(self, |this, ident, ns, name_binding| {
// avoid imports entirely
if name_binding.is_import() && !name_binding.is_extern_crate() { return; }
// avoid non-importable candidates as well

View File

@ -728,7 +728,7 @@ impl<'a> LateResolutionVisitor<'a, '_> {
// abort if the module is already found
if result.is_some() { break; }
in_module.for_each_child_stable(self.r, |_, ident, _, name_binding| {
in_module.for_each_child(self.r, |_, ident, _, name_binding| {
// abort if the module is already found or if name_binding is private external
if result.is_some() || !name_binding.vis.is_visible_locally() {
return
@ -760,7 +760,7 @@ impl<'a> LateResolutionVisitor<'a, '_> {
fn collect_enum_variants(&mut self, def_id: DefId) -> Option<Vec<Path>> {
self.find_module(def_id).map(|(enum_module, enum_import_suggestion)| {
let mut variants = Vec::new();
enum_module.for_each_child_stable(self.r, |_, ident, _, name_binding| {
enum_module.for_each_child(self.r, |_, ident, _, name_binding| {
if let Res::Def(DefKind::Variant, _) = name_binding.res() {
let mut segms = enum_import_suggestion.path.segments.clone();
segms.push(ast::PathSegment::from_ident(ident));

View File

@ -497,17 +497,6 @@ impl<'a> ModuleData<'a> {
}
}
fn for_each_child_stable<R, F>(&'a self, resolver: &mut R, mut f: F)
where R: AsMut<Resolver<'a>>, F: FnMut(&mut R, Ident, Namespace, &'a NameBinding<'a>)
{
let resolutions = resolver.as_mut().resolutions(self).borrow();
let mut resolutions = resolutions.iter().collect::<Vec<_>>();
resolutions.sort_by_cached_key(|&(&(ident, ns), _)| (ident.as_str(), ns));
for &(&(ident, ns), &resolution) in resolutions.iter() {
resolution.borrow().binding.map(|binding| f(resolver, ident, ns, binding));
}
}
fn res(&self) -> Option<Res> {
match self.kind {
ModuleKind::Def(kind, def_id, _) => Some(Res::Def(kind, def_id)),

View File

@ -5,10 +5,10 @@ LL | let x = Option(1);
| ^^^^^^
help: try using one of the enum's variants
|
LL | let x = std::prelude::v1::Option::None(1);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
LL | let x = std::prelude::v1::Option::Some(1);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
LL | let x = std::option::Option::None(1);
| ^^^^^^^^^^^^^^^^^^^^^^^^^
LL | let x = std::option::Option::Some(1);
| ^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0532]: expected tuple struct/variant, found enum `Option`
--> $DIR/issue-43871-enum-instead-of-variant.rs:21:12
@ -17,10 +17,10 @@ LL | if let Option(_) = x {
| ^^^^^^
help: try using one of the enum's variants
|
LL | if let std::prelude::v1::Option::None(_) = x {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
LL | if let std::prelude::v1::Option::Some(_) = x {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
LL | if let std::option::Option::None(_) = x {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
LL | if let std::option::Option::Some(_) = x {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0532]: expected tuple struct/variant, found enum `Example`
--> $DIR/issue-43871-enum-instead-of-variant.rs:27:12
@ -47,14 +47,14 @@ LL | let z = ManyVariants();
| ^^^^^^^^^^^^
help: try using one of the enum's variants
|
LL | let z = ManyVariants::Eight();
LL | let z = ManyVariants::One();
| ^^^^^^^^^^^^^^^^^
LL | let z = ManyVariants::Two();
| ^^^^^^^^^^^^^^^^^
LL | let z = ManyVariants::Three();
| ^^^^^^^^^^^^^^^^^^^
LL | let z = ManyVariants::Five();
| ^^^^^^^^^^^^^^^^^^
LL | let z = ManyVariants::Four();
| ^^^^^^^^^^^^^^^^^^
LL | let z = ManyVariants::Nine();
| ^^^^^^^^^^^^^^^^^^
and 6 other candidates
error: aborting due to 5 previous errors

View File

@ -63,7 +63,7 @@ LL | fn qux() -> Some {
| ^^^^
| |
| not a type
| help: try using the variant's enum: `Option`
| help: try using the variant's enum: `std::option::Option`
error: aborting due to 7 previous errors