Move TypeMask cache to CommonMasks

Change-Id: I908046245f822079dab41421b868a8cc786c9745
Reviewed-on: https://dart-review.googlesource.com/55463
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
diff --git a/pkg/compiler/lib/src/types/flat_type_mask.dart b/pkg/compiler/lib/src/types/flat_type_mask.dart
index 932a128..f83240a 100644
--- a/pkg/compiler/lib/src/types/flat_type_mask.dart
+++ b/pkg/compiler/lib/src/types/flat_type_mask.dart
@@ -62,7 +62,8 @@
     if (((flags >> 1) == SUBCLASS) && !world.hasAnyStrictSubclass(base)) {
       flags = (flags & 0x1) | (EXACT << 1);
     }
-    return world.getCachedMask(
+    CommonMasks commonMasks = world.abstractValueDomain;
+    return commonMasks.getCachedMask(
         base, flags, () => new FlatTypeMask.internal(base, flags));
   }
 
diff --git a/pkg/compiler/lib/src/types/masks.dart b/pkg/compiler/lib/src/types/masks.dart
index 7039099..22a39b0 100644
--- a/pkg/compiler/lib/src/types/masks.dart
+++ b/pkg/compiler/lib/src/types/masks.dart
@@ -66,6 +66,19 @@
   TypeMask _unmodifiableArrayType;
   TypeMask _interceptorType;
 
+  /// Cache of [FlatTypeMask]s grouped by the 8 possible values of the
+  /// `FlatTypeMask.flags` property.
+  final List<Map<ClassEntity, TypeMask>> _canonicalizedTypeMasks =
+      new List<Map<ClassEntity, TypeMask>>.filled(8, null);
+
+  /// Return the cached mask for [base] with the given flags, or
+  /// calls [createMask] to create the mask and cache it.
+  TypeMask getCachedMask(ClassEntity base, int flags, TypeMask createMask()) {
+    Map<ClassEntity, TypeMask> cachedMasks =
+        _canonicalizedTypeMasks[flags] ??= <ClassEntity, TypeMask>{};
+    return cachedMasks.putIfAbsent(base, createMask);
+  }
+
   TypeMask get dynamicType => _dynamicType ??= new TypeMask.subclass(
       _closedWorld.commonElements.objectClass, _closedWorld);
 
diff --git a/pkg/compiler/lib/src/world.dart b/pkg/compiler/lib/src/world.dart
index f36e987..91a7d5b 100644
--- a/pkg/compiler/lib/src/world.dart
+++ b/pkg/compiler/lib/src/world.dart
@@ -20,7 +20,7 @@
 import 'ordered_typeset.dart';
 import 'options.dart';
 import 'types/abstract_value_domain.dart';
-import 'types/masks.dart' show CommonMasks, FlatTypeMask, TypeMask;
+import 'types/masks.dart' show CommonMasks, TypeMask;
 import 'universe/class_set.dart';
 import 'universe/function_set.dart' show FunctionSet;
 import 'universe/selector.dart' show Selector;
@@ -279,11 +279,6 @@
   /// methods defined in [ClosedWorld].
   ClassSet getClassSet(ClassEntity cls);
 
-  /// Return the cached mask for [base] with the given flags, or
-  /// calls [createMask] to create the mask and cache it.
-  // TODO(johnniwinther): Find a better strategy for caching these?
-  TypeMask getCachedMask(ClassEntity base, int flags, TypeMask createMask());
-
   /// Returns `true` if the field [element] is known to be effectively final.
   bool fieldNeverChanges(MemberEntity element);
 
@@ -514,21 +509,10 @@
   @override
   ClosedWorld get closedWorld => this;
 
-  /// Cache of [FlatTypeMask]s grouped by the 8 possible values of the
-  /// `FlatTypeMask.flags` property.
-  final List<Map<ClassEntity, TypeMask>> _canonicalizedTypeMasks =
-      new List<Map<ClassEntity, TypeMask>>.filled(8, null);
-
   CommonMasks get abstractValueDomain {
     return _commonMasks;
   }
 
-  TypeMask getCachedMask(ClassEntity base, int flags, TypeMask createMask()) {
-    Map<ClassEntity, TypeMask> cachedMasks =
-        _canonicalizedTypeMasks[flags] ??= <ClassEntity, TypeMask>{};
-    return cachedMasks.putIfAbsent(base, createMask);
-  }
-
   bool checkEntity(covariant Entity element);
 
   bool checkClass(covariant ClassEntity cls);