]> git.lizzy.rs Git - rust.git/commitdiff
Tweaks to intern_ty
authorJohn Kåre Alsaker <john.kare.alsaker@gmail.com>
Fri, 13 Apr 2018 17:33:21 +0000 (19:33 +0200)
committerJohn Kåre Alsaker <john.kare.alsaker@gmail.com>
Sun, 15 Apr 2018 18:53:36 +0000 (20:53 +0200)
src/librustc/ty/context.rs

index fea0172576989b90c660532ceff8b2cc362a5925..4c7d8d7f44e6af58ca29dfce8803330e59b88802 100644 (file)
@@ -173,10 +173,10 @@ fn intern_ty(&self, st: TypeVariants<'tcx>,
                 return ty;
             }
             let global_interner = global_interners.map(|interners| {
-                interners.type_.borrow_mut()
+                (interners.type_.borrow_mut(), &interners.arena)
             });
-            if let Some(ref interner) = global_interner {
-                if let Some(&Interned(ty)) = interner.get(&st) {
+            if let Some((ref type_, _)) = global_interner {
+                if let Some(&Interned(ty)) = type_.get(&st) {
                     return ty;
                 }
             }
@@ -192,18 +192,18 @@ fn intern_ty(&self, st: TypeVariants<'tcx>,
             // determine that all contents are in the global tcx.
             // See comments on Lift for why we can't use that.
             if !flags.flags.intersects(ty::TypeFlags::KEEP_IN_LOCAL_TCX) {
-                if let Some(interner) = global_interners {
+                if let Some((mut type_, arena)) = global_interner {
                     let ty_struct: TyS<'gcx> = unsafe {
                         mem::transmute(ty_struct)
                     };
-                    let ty: Ty<'gcx> = interner.arena.alloc(ty_struct);
-                    global_interner.unwrap().insert(Interned(ty));
+                    let ty: Ty<'gcx> = arena.alloc(ty_struct);
+                    type_.insert(Interned(ty));
                     return ty;
                 }
             } else {
                 // Make sure we don't end up with inference
                 // types/regions in the global tcx.
-                if global_interners.is_none() {
+                if global_interner.is_none() {
                     drop(interner);
                     bug!("Attempted to intern `{:?}` which contains \
                           inference types/regions in the global type context",