]> git.lizzy.rs Git - rust.git/commitdiff
Update crate_variances and inferred_outlives_crate
authorJohn Kåre Alsaker <john.kare.alsaker@gmail.com>
Mon, 20 May 2019 22:40:32 +0000 (00:40 +0200)
committerJohn Kåre Alsaker <john.kare.alsaker@gmail.com>
Thu, 23 May 2019 16:51:52 +0000 (18:51 +0200)
src/librustc/arena.rs
src/librustc/query/mod.rs
src/librustc_typeck/outlives/mod.rs
src/librustc_typeck/variance/mod.rs

index 6312a6cfcd651b777da0189454386c6ee51622ee..c179b05683d1c91258bf53b335f9cc94d8e305c5 100644 (file)
@@ -99,6 +99,8 @@ macro_rules! arena_types {
             [few] reachable_non_generics: rustc::util::nodemap::DefIdMap<
                 rustc::middle::exported_symbols::SymbolExportLevel
             >,
+            [few] crate_variances: rustc::ty::CrateVariancesMap<'tcx>,
+            [few] inferred_outlives_crate: rustc::ty::CratePredicatesMap<'tcx>,
         ], $tcx);
     )
 }
index 68d3cb65729d2b4d963682939b513b91c6329781..c03cd7e268ef5ceed3e20e678624516bf12ed3fc 100644 (file)
         query static_mutability(_: DefId) -> Option<hir::Mutability> {}
 
         /// Gets a map with the variance of every item; use `item_variance` instead.
-        query crate_variances(_: CrateNum) -> Lrc<ty::CrateVariancesMap<'tcx>> {
+        query crate_variances(_: CrateNum) -> &'tcx ty::CrateVariancesMap<'tcx> {
             desc { "computing the variances for items in this crate" }
         }
 
     TypeChecking {
         /// Maps from thee `DefId` of a type to its (inferred) outlives.
         query inferred_outlives_crate(_: CrateNum)
-            -> Lrc<ty::CratePredicatesMap<'tcx>> {
+            -> &'tcx ty::CratePredicatesMap<'tcx> {
             desc { "computing the inferred outlives predicates for items in this crate" }
         }
     }
index a6b5b99982ec6b5ba8a4cb72b36446268a17999c..57787a75e4aefd683a7a6320aac19899215b4756 100644 (file)
@@ -4,7 +4,6 @@
 use rustc::ty::query::Providers;
 use rustc::ty::subst::UnpackedKind;
 use rustc::ty::{self, CratePredicatesMap, TyCtxt};
-use rustc_data_structures::sync::Lrc;
 use syntax::symbol::sym;
 
 mod explicit;
@@ -74,7 +73,7 @@ fn inferred_outlives_of<'a, 'tcx>(
 fn inferred_outlives_crate<'tcx>(
     tcx: TyCtxt<'_, 'tcx, 'tcx>,
     crate_num: CrateNum,
-) -> Lrc<CratePredicatesMap<'tcx>> {
+) -> &'tcx CratePredicatesMap<'tcx> {
     assert_eq!(crate_num, LOCAL_CRATE);
 
     // Compute a map from each struct/enum/union S to the **explicit**
@@ -120,7 +119,7 @@ fn inferred_outlives_crate<'tcx>(
             (def_id, &*predicates)
         }).collect();
 
-    Lrc::new(ty::CratePredicatesMap {
+    tcx.arena.alloc(ty::CratePredicatesMap {
         predicates,
     })
 }
index 88ee1d79f5435dd165bc30e1402a1c191f5915fa..47c4a9b39c865e024dc91be4c9984783f85ec1db 100644 (file)
@@ -9,7 +9,6 @@
 use rustc::hir::def_id::{CrateNum, DefId, LOCAL_CRATE};
 use rustc::ty::{self, CrateVariancesMap, TyCtxt};
 use rustc::ty::query::Providers;
-use rustc_data_structures::sync::Lrc;
 
 /// Defines the `TermsContext` basically houses an arena where we can
 /// allocate terms.
@@ -36,12 +35,12 @@ pub fn provide(providers: &mut Providers<'_>) {
 }
 
 fn crate_variances<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, crate_num: CrateNum)
-                             -> Lrc<CrateVariancesMap<'tcx>> {
+                             -> &'tcx CrateVariancesMap<'tcx> {
     assert_eq!(crate_num, LOCAL_CRATE);
     let mut arena = arena::TypedArena::default();
     let terms_cx = terms::determine_parameters_to_be_inferred(tcx, &mut arena);
     let constraints_cx = constraints::add_constraints_from_crate(terms_cx);
-    Lrc::new(solve::solve_constraints(constraints_cx))
+    tcx.arena.alloc(solve::solve_constraints(constraints_cx))
 }
 
 fn variances_of<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, item_def_id: DefId)