Skip to content

Commit

Permalink
Reference count crate_inherent_implss return value.
Browse files Browse the repository at this point in the history
The repeated cloning of the result in `inherent_impls` queries has quite
an impact on crates with many inherent trait implementations.
  • Loading branch information
hugwijst committed Nov 12, 2018
1 parent ca79ecd commit 4fdae85
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 3 deletions.
3 changes: 2 additions & 1 deletion src/librustc/ty/query/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,8 @@ define_queries! { <'tcx>
/// Gets a complete map from all types to their inherent impls.
/// Not meant to be used directly outside of coherence.
/// (Defined only for LOCAL_CRATE)
[] fn crate_inherent_impls: crate_inherent_impls_dep_node(CrateNum) -> CrateInherentImpls,
[] fn crate_inherent_impls: crate_inherent_impls_dep_node(CrateNum)
-> Lrc<CrateInherentImpls>,

/// Checks all types in the krate for overlap in their inherent impls. Reports errors.
/// Not meant to be used directly outside of coherence.
Expand Down
4 changes: 2 additions & 2 deletions src/librustc_typeck/coherence/inherent_impls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ use syntax_pos::Span;
/// On-demand query: yields a map containing all types mapped to their inherent impls.
pub fn crate_inherent_impls<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
crate_num: CrateNum)
-> CrateInherentImpls {
-> Lrc<CrateInherentImpls> {
assert_eq!(crate_num, LOCAL_CRATE);

let krate = tcx.hir.krate();
Expand All @@ -42,7 +42,7 @@ pub fn crate_inherent_impls<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
}
};
krate.visit_all_item_likes(&mut collect);
collect.impls_map
Lrc::new(collect.impls_map)
}

/// On-demand query: yields a vector of the inherent impls for a specific type.
Expand Down

0 comments on commit 4fdae85

Please sign in to comment.