X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Flibrustc%2Fty%2Fmaps.rs;h=75c20a25131ab0795b209662274268518c69ce6c;hb=8821affd1523a719ffb9f6537d53f8725ab00592;hp=9f8eb2f75350ed58185d6a9eed54b0e04ffeeb61;hpb=7d9c98e4755e2d81c894e6517e3848b786cf7a3b;p=rust.git diff --git a/src/librustc/ty/maps.rs b/src/librustc/ty/maps.rs index 9f8eb2f7535..75c20a25131 100644 --- a/src/librustc/ty/maps.rs +++ b/src/librustc/ty/maps.rs @@ -12,7 +12,7 @@ use errors::{Diagnostic, DiagnosticBuilder}; use hir::def_id::{CrateNum, DefId, LOCAL_CRATE, DefIndex}; use hir::def::{Def, Export}; -use hir::{self, TraitCandidate, HirId}; +use hir::{self, TraitCandidate, ItemLocalId}; use hir::svh::Svh; use lint; use middle::const_val; @@ -20,9 +20,11 @@ use middle::cstore::{NativeLibraryKind, DepKind, CrateSource}; use middle::privacy::AccessLevels; use middle::region; -use middle::region::RegionMaps; use middle::resolve_lifetime::{Region, ObjectLifetimeDefault}; +use middle::stability::{self, DeprecationEntry}; use middle::lang_items::{LanguageItems, LangItem}; +use middle::exported_symbols::ExportedSymbols; +use middle::trans::{TransItem, CodegenUnit}; use mir; use mir::transform::{MirSuite, MirPassIndex}; use session::CompileResult; @@ -39,7 +41,7 @@ use rustc_data_structures::indexed_set::IdxSetBuf; use rustc_back::PanicStrategy; use rustc_data_structures::indexed_vec::IndexVec; -use rustc_data_structures::fx::FxHashMap; +use rustc_data_structures::fx::{FxHashMap, FxHashSet}; use std::cell::{RefCell, RefMut, Cell}; use std::fmt::Debug; use std::hash::Hash; @@ -48,6 +50,7 @@ use std::collections::BTreeMap; use std::ops::Deref; use std::rc::Rc; +use std::sync::Arc; use syntax_pos::{Span, DUMMY_SP}; use syntax::attr; use syntax::ast; @@ -87,7 +90,7 @@ fn default_span(&self, _: TyCtxt) -> Span { } } -impl Key for HirId { +impl Key for DefIndex { fn map_crate(&self) -> CrateNum { LOCAL_CRATE } @@ -159,7 +162,7 @@ fn default_span(&self, tcx: TyCtxt) -> Span { } } -impl<'tcx, T: Clone + Hash + Eq + Debug> Key for ty::ParamEnvAnd<'tcx, T> { +impl<'tcx> Key for Ty<'tcx> { fn map_crate(&self) -> CrateNum { LOCAL_CRATE } @@ -168,6 +171,15 @@ fn default_span(&self, _: TyCtxt) -> Span { } } +impl<'tcx, T: Key> Key for ty::ParamEnvAnd<'tcx, T> { + fn map_crate(&self) -> CrateNum { + self.value.map_crate() + } + fn default_span(&self, tcx: TyCtxt) -> Span { + self.value.default_span(tcx) + } +} + trait Value<'tcx>: Sized { fn from_cycle_error<'a>(tcx: TyCtxt<'a, 'tcx, 'tcx>) -> Self; } @@ -434,13 +446,13 @@ fn describe(_: TyCtxt, _: DefId) -> String { } -impl<'tcx> QueryDescription for queries::stability<'tcx> { +impl<'tcx> QueryDescription for queries::lookup_stability<'tcx> { fn describe(_: TyCtxt, _: DefId) -> String { bug!("stability") } } -impl<'tcx> QueryDescription for queries::deprecation<'tcx> { +impl<'tcx> QueryDescription for queries::lookup_deprecation_entry<'tcx> { fn describe(_: TyCtxt, _: DefId) -> String { bug!("deprecation") } @@ -556,15 +568,9 @@ fn describe(_tcx: TyCtxt, _: (DefId, DefId)) -> String { } } -impl<'tcx> QueryDescription for queries::in_scope_traits<'tcx> { - fn describe(_tcx: TyCtxt, _: HirId) -> String { - format!("fetching the traits in scope at a particular ast node") - } -} - -impl<'tcx> QueryDescription for queries::module_exports<'tcx> { - fn describe(_tcx: TyCtxt, _: HirId) -> String { - format!("fetching the exported items for a module") +impl<'tcx> QueryDescription for queries::in_scope_traits_map<'tcx> { + fn describe(_tcx: TyCtxt, _: DefIndex) -> String { + format!("traits in scope at a block") } } @@ -592,7 +598,7 @@ fn describe(_tcx: TyCtxt, _: CrateNum) -> String { } } -impl<'tcx> QueryDescription for queries::exported_symbols<'tcx> { +impl<'tcx> QueryDescription for queries::exported_symbol_ids<'tcx> { fn describe(_tcx: TyCtxt, _: CrateNum) -> String { format!("looking up the exported symbols of a crate") } @@ -652,21 +658,21 @@ fn describe(_tcx: TyCtxt, _: CrateNum) -> String { } } -impl<'tcx> QueryDescription for queries::named_region<'tcx> { - fn describe(_tcx: TyCtxt, _: HirId) -> String { - format!("fetching info about a named region") +impl<'tcx> QueryDescription for queries::named_region_map<'tcx> { + fn describe(_tcx: TyCtxt, _: DefIndex) -> String { + format!("looking up a named region") } } -impl<'tcx> QueryDescription for queries::is_late_bound<'tcx> { - fn describe(_tcx: TyCtxt, _: HirId) -> String { - format!("testing whether a lifetime is late bound") +impl<'tcx> QueryDescription for queries::is_late_bound_map<'tcx> { + fn describe(_tcx: TyCtxt, _: DefIndex) -> String { + format!("testing if a region is late boudn") } } -impl<'tcx> QueryDescription for queries::object_lifetime_defaults<'tcx> { - fn describe(_tcx: TyCtxt, _: HirId) -> String { - format!("fetching a list of ObjectLifetimeDefault for a lifetime") +impl<'tcx> QueryDescription for queries::object_lifetime_defaults_map<'tcx> { + fn describe(_tcx: TyCtxt, _: DefIndex) -> String { + format!("looking up lifetime defaults for a region") } } @@ -682,12 +688,6 @@ fn describe(_tcx: TyCtxt, _: CrateNum) -> String { } } -impl<'tcx> QueryDescription for queries::extern_mod_stmt_cnum<'tcx> { - fn describe(_tcx: TyCtxt, _: HirId) -> String { - format!("looking up the CrateNum for an `extern mod` statement") - } -} - impl<'tcx> QueryDescription for queries::get_lang_items<'tcx> { fn describe(_tcx: TyCtxt, _: CrateNum) -> String { format!("calculating the lang items map") @@ -730,21 +730,33 @@ fn describe(_tcx: TyCtxt, _: CrateNum) -> String { } } -impl<'tcx> QueryDescription for queries::freevars<'tcx> { - fn describe(_tcx: TyCtxt, _: HirId) -> String { - format!("looking up free variables for a node") +impl<'tcx> QueryDescription for queries::maybe_unused_extern_crates<'tcx> { + fn describe(_tcx: TyCtxt, _: CrateNum) -> String { + format!("looking up all possibly unused extern crates") } } -impl<'tcx> QueryDescription for queries::maybe_unused_trait_import<'tcx> { - fn describe(_tcx: TyCtxt, _: HirId) -> String { - format!("testing if a trait import is unused") +impl<'tcx> QueryDescription for queries::stability_index<'tcx> { + fn describe(_tcx: TyCtxt, _: CrateNum) -> String { + format!("calculating the stability index for the local crate") } } -impl<'tcx> QueryDescription for queries::maybe_unused_extern_crates<'tcx> { +impl<'tcx> QueryDescription for queries::all_crate_nums<'tcx> { fn describe(_tcx: TyCtxt, _: CrateNum) -> String { - format!("looking up all possibly unused extern crates") + format!("fetching all foreign CrateNum instances") + } +} + +impl<'tcx> QueryDescription for queries::exported_symbol_set<'tcx> { + fn describe(_tcx: TyCtxt, _: CrateNum) -> String { + format!("exported symbol set") + } +} + +impl<'tcx> QueryDescription for queries::collect_and_partition_translation_items<'tcx> { + fn describe(_tcx: TyCtxt, _: CrateNum) -> String { + format!("collect_and_partition_translation_items") } } @@ -1272,8 +1284,8 @@ fn default() -> Self { [] fn describe_def: DescribeDef(DefId) -> Option, [] fn def_span: DefSpan(DefId) -> Span, - [] fn stability: Stability(DefId) -> Option, - [] fn deprecation: Deprecation(DefId) -> Option, + [] fn lookup_stability: LookupStability(DefId) -> Option<&'tcx attr::Stability>, + [] fn lookup_deprecation_entry: LookupDeprecationEntry(DefId) -> Option, [] fn item_attrs: ItemAttrs(DefId) -> Rc<[ast::Attribute]>, [] fn fn_arg_names: FnArgNames(DefId) -> Vec, [] fn impl_parent: ImplParent(DefId) -> Option, @@ -1319,12 +1331,13 @@ fn default() -> Self { [] fn extern_crate: ExternCrate(DefId) -> Rc>, [] fn specializes: specializes_node((DefId, DefId)) -> bool, - [] fn in_scope_traits: InScopeTraits(HirId) -> Option>>, - [] fn module_exports: ModuleExports(HirId) -> Option>>, + [] fn in_scope_traits_map: InScopeTraits(DefIndex) + -> Option>>>>, + [] fn module_exports: ModuleExports(DefId) -> Option>>, [] fn lint_levels: lint_levels_node(CrateNum) -> Rc, [] fn impl_defaultness: ImplDefaultness(DefId) -> hir::Defaultness, - [] fn exported_symbols: ExportedSymbols(CrateNum) -> Rc>, + [] fn exported_symbol_ids: ExportedSymbolIds(CrateNum) -> Rc>, [] fn native_libraries: NativeLibraries(CrateNum) -> Rc>, [] fn plugin_registrar_fn: PluginRegistrarFn(CrateNum) -> Option, [] fn derive_registrar_fn: DeriveRegistrarFn(CrateNum) -> Option, @@ -1337,37 +1350,50 @@ fn default() -> Self { [] fn all_trait_implementations: AllTraitImplementations(CrateNum) -> Rc>, - [] is_dllimport_foreign_item: IsDllimportForeignItem(DefId) -> bool, - [] is_statically_included_foreign_item: IsStaticallyIncludedForeignItem(DefId) -> bool, - [] native_library_kind: NativeLibraryKind(DefId) + [] fn is_dllimport_foreign_item: IsDllimportForeignItem(DefId) -> bool, + [] fn is_statically_included_foreign_item: IsStaticallyIncludedForeignItem(DefId) -> bool, + [] fn native_library_kind: NativeLibraryKind(DefId) -> Option, - [] link_args: link_args_node(CrateNum) -> Rc>, - - [] named_region: NamedRegion(HirId) -> Option, - [] is_late_bound: IsLateBound(HirId) -> bool, - [] object_lifetime_defaults: ObjectLifetimeDefaults(HirId) - -> Option>>, - - [] visibility: Visibility(DefId) -> ty::Visibility, - [] dep_kind: DepKind(CrateNum) -> DepKind, - [] crate_name: CrateName(CrateNum) -> Symbol, - [] item_children: ItemChildren(DefId) -> Rc>, - [] extern_mod_stmt_cnum: ExternModStmtCnum(HirId) -> Option, - - [] get_lang_items: get_lang_items_node(CrateNum) -> Rc, - [] defined_lang_items: DefinedLangItems(CrateNum) -> Rc>, - [] missing_lang_items: MissingLangItems(CrateNum) -> Rc>, - [] item_body: ItemBody(DefId) -> &'tcx hir::Body, - [] visible_parent_map: visible_parent_map_node(CrateNum) + [] fn link_args: link_args_node(CrateNum) -> Rc>, + + [] fn named_region_map: NamedRegion(DefIndex) -> + Option>>, + [] fn is_late_bound_map: IsLateBound(DefIndex) -> + Option>>, + [] fn object_lifetime_defaults_map: ObjectLifetimeDefaults(DefIndex) + -> Option>>>>, + + [] fn visibility: Visibility(DefId) -> ty::Visibility, + [] fn dep_kind: DepKind(CrateNum) -> DepKind, + [] fn crate_name: CrateName(CrateNum) -> Symbol, + [] fn item_children: ItemChildren(DefId) -> Rc>, + [] fn extern_mod_stmt_cnum: ExternModStmtCnum(DefId) -> Option, + + [] fn get_lang_items: get_lang_items_node(CrateNum) -> Rc, + [] fn defined_lang_items: DefinedLangItems(CrateNum) -> Rc>, + [] fn missing_lang_items: MissingLangItems(CrateNum) -> Rc>, + [] fn extern_const_body: ExternConstBody(DefId) -> &'tcx hir::Body, + [] fn visible_parent_map: visible_parent_map_node(CrateNum) -> Rc>, - [] missing_extern_crate_item: MissingExternCrateItem(CrateNum) -> bool, - [] used_crate_source: UsedCrateSource(CrateNum) -> Rc, - [] postorder_cnums: postorder_cnums_node(CrateNum) -> Rc>, + [] fn missing_extern_crate_item: MissingExternCrateItem(CrateNum) -> bool, + [] fn used_crate_source: UsedCrateSource(CrateNum) -> Rc, + [] fn postorder_cnums: postorder_cnums_node(CrateNum) -> Rc>, + + [] fn freevars: Freevars(DefId) -> Option>>, + [] fn maybe_unused_trait_import: MaybeUnusedTraitImport(DefId) -> bool, + [] fn maybe_unused_extern_crates: maybe_unused_extern_crates_node(CrateNum) + -> Rc>, - [] freevars: Freevars(HirId) -> Option>>, - [] maybe_unused_trait_import: MaybeUnusedTraitImport(HirId) -> bool, - [] maybe_unused_extern_crates: maybe_unused_extern_crates_node(CrateNum) - -> Rc>, + [] fn stability_index: stability_index_node(CrateNum) -> Rc>, + [] fn all_crate_nums: all_crate_nums_node(CrateNum) -> Rc>, + + [] fn exported_symbol_set: exported_symbol_set_node(CrateNum) + -> Arc, + [] fn collect_and_partition_translation_items: + collect_and_partition_translation_items_node(CrateNum) + -> (Arc>>, Vec>>), + [] fn export_name: ExportName(DefId) -> Option, + [] fn contains_extern_indicator: ContainsExternIndicator(DefId) -> bool, } fn type_param_predicates<'tcx>((item_id, param_id): (DefId, DefId)) -> DepConstructor<'tcx> { @@ -1473,3 +1499,19 @@ fn postorder_cnums_node<'tcx>(_: CrateNum) -> DepConstructor<'tcx> { fn maybe_unused_extern_crates_node<'tcx>(_: CrateNum) -> DepConstructor<'tcx> { DepConstructor::MaybeUnusedExternCrates } + +fn stability_index_node<'tcx>(_: CrateNum) -> DepConstructor<'tcx> { + DepConstructor::StabilityIndex +} + +fn all_crate_nums_node<'tcx>(_: CrateNum) -> DepConstructor<'tcx> { + DepConstructor::AllCrateNums +} + +fn exported_symbol_set_node<'tcx>(_: CrateNum) -> DepConstructor<'tcx> { + DepConstructor::ExportedSymbols +} + +fn collect_and_partition_translation_items_node<'tcx>(_: CrateNum) -> DepConstructor<'tcx> { + DepConstructor::CollectAndPartitionTranslationItems +}