From 4706c38e17349793b2713947f81cfa1fd1f75ba3 Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Wed, 12 Feb 2020 19:46:05 +0100 Subject: [PATCH] Use HirId in TraitCandidate. --- src/librustc/ich/impls_hir.rs | 1 - src/librustc/ty/context.rs | 1 + src/librustc/ty/mod.rs | 20 +++++++++++++++++++- src/librustc_hir/hir.rs | 4 ++-- src/librustc_resolve/late.rs | 2 +- src/librustc_resolve/lib.rs | 4 ++-- src/librustc_typeck/check/method/probe.rs | 15 ++++++--------- 7 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/librustc/ich/impls_hir.rs b/src/librustc/ich/impls_hir.rs index 1a763e43d55..eadc9ddeee6 100644 --- a/src/librustc/ich/impls_hir.rs +++ b/src/librustc/ich/impls_hir.rs @@ -270,7 +270,6 @@ fn to_stable_hash_key(&self, hcx: &StableHashingContext<'a>) -> Self::KeyType { let import_keys = import_ids .iter() - .map(|node_id| hcx.node_to_hir_id(*node_id)) .map(|hir_id| (hcx.local_def_path_hash(hir_id.owner), hir_id.local_id)) .collect(); (hcx.def_path_hash(*def_id), import_keys) diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs index 2adf7086417..1a071905523 100644 --- a/src/librustc/ty/context.rs +++ b/src/librustc/ty/context.rs @@ -1161,6 +1161,7 @@ pub fn create_global_ctxt( for (k, v) in resolutions.trait_map { let hir_id = hir.node_to_hir_id(k); let map = trait_map.entry(hir_id.owner).or_default(); + let v = v.into_iter().map(|tc| tc.node_to_hir_id(&hir.definitions())).collect(); map.insert(hir_id.local_id, StableVec::new(v)); } diff --git a/src/librustc/ty/mod.rs b/src/librustc/ty/mod.rs index 2bda99e6d20..a561d48844b 100644 --- a/src/librustc/ty/mod.rs +++ b/src/librustc/ty/mod.rs @@ -35,7 +35,7 @@ use rustc_hir as hir; use rustc_hir::def::{CtorKind, CtorOf, DefKind, Res}; use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, LocalDefId, CRATE_DEF_INDEX, LOCAL_CRATE}; -use rustc_hir::{Constness, GlobMap, Node, TraitMap}; +use rustc_hir::{Constness, GlobMap, Node}; use rustc_index::vec::{Idx, IndexVec}; use rustc_macros::HashStable; use rustc_serialize::{self, Encodable, Encoder}; @@ -46,6 +46,7 @@ use syntax::ast::{self, Ident, Name}; use syntax::node_id::{NodeId, NodeMap, NodeSet}; +use smallvec::SmallVec; use std::cell::RefCell; use std::cmp::{self, Ordering}; use std::fmt; @@ -122,6 +123,23 @@ // Data types +#[derive(Clone, Debug)] +pub struct TraitCandidate { + pub def_id: DefId, + pub import_ids: SmallVec<[NodeId; 1]>, +} + +impl TraitCandidate { + fn node_to_hir_id(self, definitions: &hir_map::Definitions) -> hir::TraitCandidate { + let TraitCandidate { def_id, import_ids } = self; + let import_ids = + import_ids.into_iter().map(|node_id| definitions.node_to_hir_id(node_id)).collect(); + hir::TraitCandidate { def_id, import_ids } + } +} + +pub type TraitMap = NodeMap>; + pub struct ResolverOutputs { pub definitions: hir_map::Definitions, pub cstore: Box, diff --git a/src/librustc_hir/hir.rs b/src/librustc_hir/hir.rs index c2ddaf7df31..0667bd3f4a2 100644 --- a/src/librustc_hir/hir.rs +++ b/src/librustc_hir/hir.rs @@ -16,7 +16,7 @@ use rustc_span::symbol::{kw, sym, Symbol}; use rustc_span::{MultiSpan, Span, DUMMY_SP}; use rustc_target::spec::abi::Abi; -use syntax::ast::{self, AsmDialect, CrateSugar, Ident, Name, NodeId}; +use syntax::ast::{self, AsmDialect, CrateSugar, Ident, Name}; use syntax::ast::{AttrVec, Attribute, FloatTy, IntTy, Label, LitKind, StrStyle, UintTy}; pub use syntax::ast::{BorrowKind, ImplPolarity, IsAuto}; pub use syntax::ast::{CaptureBy, Movability, Mutability}; @@ -2610,7 +2610,7 @@ pub struct Upvar { #[derive(Clone, Debug)] pub struct TraitCandidate { pub def_id: DefId, - pub import_ids: SmallVec<[NodeId; 1]>, + pub import_ids: SmallVec<[HirId; 1]>, } // Trait method resolution diff --git a/src/librustc_resolve/late.rs b/src/librustc_resolve/late.rs index 58ff7f44789..ea865a5590a 100644 --- a/src/librustc_resolve/late.rs +++ b/src/librustc_resolve/late.rs @@ -11,13 +11,13 @@ use crate::{Module, ModuleOrUniformRoot, NameBindingKind, ParentScope, PathResult}; use crate::{ResolutionError, Resolver, Segment, UseError}; +use rustc::ty::TraitCandidate; use rustc::{bug, lint, span_bug}; use rustc_data_structures::fx::{FxHashMap, FxHashSet}; use rustc_errors::DiagnosticId; use rustc_hir::def::Namespace::{self, *}; use rustc_hir::def::{self, CtorKind, DefKind, PartialRes, PerNS}; use rustc_hir::def_id::{DefId, CRATE_DEF_INDEX}; -use rustc_hir::TraitCandidate; use rustc_span::symbol::{kw, sym}; use rustc_span::Span; use smallvec::{smallvec, SmallVec}; diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 2e63c3e1706..cfe100dc588 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -22,7 +22,7 @@ use rustc::middle::cstore::{CrateStore, MetadataLoaderDyn}; use rustc::span_bug; use rustc::ty::query::Providers; -use rustc::ty::{self, DefIdTree, ResolverOutputs}; +use rustc::ty::{self, DefIdTree, ResolverOutputs, TraitMap}; use rustc_ast_pretty::pprust; use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap}; use rustc_data_structures::ptr_key::PtrKey; @@ -32,8 +32,8 @@ use rustc_hir::def::Namespace::*; use rustc_hir::def::{self, CtorOf, DefKind, NonMacroAttrKind, PartialRes}; use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, CRATE_DEF_INDEX, LOCAL_CRATE}; +use rustc_hir::GlobMap; use rustc_hir::PrimTy::{self, Bool, Char, Float, Int, Str, Uint}; -use rustc_hir::{GlobMap, TraitMap}; use rustc_metadata::creader::{CStore, CrateLoader}; use rustc_session::lint::{BuiltinLintDiagnostics, LintBuffer}; use rustc_session::Session; diff --git a/src/librustc_typeck/check/method/probe.rs b/src/librustc_typeck/check/method/probe.rs index 760b6487045..8f0fbc2d60c 100644 --- a/src/librustc_typeck/check/method/probe.rs +++ b/src/librustc_typeck/check/method/probe.rs @@ -902,13 +902,10 @@ fn assemble_extension_candidates_for_traits_in_scope( for trait_candidate in applicable_traits.iter() { let trait_did = trait_candidate.def_id; if duplicates.insert(trait_did) { - let import_ids = trait_candidate - .import_ids - .iter() - .map(|node_id| self.fcx.tcx.hir().node_to_hir_id(*node_id)) - .collect(); - let result = - self.assemble_extension_candidates_for_trait(import_ids, trait_did); + let result = self.assemble_extension_candidates_for_trait( + &trait_candidate.import_ids, + trait_did, + ); result?; } } @@ -920,7 +917,7 @@ fn assemble_extension_candidates_for_all_traits(&mut self) -> Result<(), MethodE let mut duplicates = FxHashSet::default(); for trait_info in suggest::all_traits(self.tcx) { if duplicates.insert(trait_info.def_id) { - self.assemble_extension_candidates_for_trait(smallvec![], trait_info.def_id)?; + self.assemble_extension_candidates_for_trait(&smallvec![], trait_info.def_id)?; } } Ok(()) @@ -959,7 +956,7 @@ pub fn matches_return_type( fn assemble_extension_candidates_for_trait( &mut self, - import_ids: SmallVec<[hir::HirId; 1]>, + import_ids: &SmallVec<[hir::HirId; 1]>, trait_def_id: DefId, ) -> Result<(), MethodError<'tcx>> { debug!("assemble_extension_candidates_for_trait(trait_def_id={:?})", trait_def_id); -- 2.44.0