Version 2.15.0-83.0.dev

Merge commit '2b5adb7231e81366eade1b14761593f2c3cf03ef' into 'dev'
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index ea3cf9b..308ab12 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -1589,10 +1589,6 @@
   void operator []=(K key, V value) {}
 }
 
-abstract class _ImmutableMap<K, V> implements Map<K, V> {
-  dynamic _kvPairs;
-}
-
 abstract class pragma {
   String name;
   Object options;
diff --git a/pkg/front_end/testcases/agnostic/map.dart.strong.expect b/pkg/front_end/testcases/agnostic/map.dart.strong.expect
index 4802fa3..a399067 100644
--- a/pkg/front_end/testcases/agnostic/map.dart.strong.expect
+++ b/pkg/front_end/testcases/agnostic/map.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static const field core::List<core::int> a = #C1;
 static const field core::List<core::int?> b = #C2;
-static const field core::Map<core::List<core::int?>, core::int> c = #C6;
+static const field core::Map<core::List<core::int?>, core::int> c = #C5;
 static method main() → dynamic {}
 
 constants  {
@@ -12,6 +12,5 @@
   #C2 = <core::int?>[]
   #C3 = 0
   #C4 = 1
-  #C5 = <dynamic>[#C1, #C3, #C2, #C4]
-  #C6 = core::_ImmutableMap<core::List<core::int?>, core::int> {_kvPairs:#C5}
+  #C5 = <core::List<core::int?>, core::int>{#C1:#C3, #C2:#C4)
 }
diff --git a/pkg/front_end/testcases/agnostic/map.dart.strong.transformed.expect b/pkg/front_end/testcases/agnostic/map.dart.strong.transformed.expect
index 4802fa3..a399067 100644
--- a/pkg/front_end/testcases/agnostic/map.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/agnostic/map.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 static const field core::List<core::int> a = #C1;
 static const field core::List<core::int?> b = #C2;
-static const field core::Map<core::List<core::int?>, core::int> c = #C6;
+static const field core::Map<core::List<core::int?>, core::int> c = #C5;
 static method main() → dynamic {}
 
 constants  {
@@ -12,6 +12,5 @@
   #C2 = <core::int?>[]
   #C3 = 0
   #C4 = 1
-  #C5 = <dynamic>[#C1, #C3, #C2, #C4]
-  #C6 = core::_ImmutableMap<core::List<core::int?>, core::int> {_kvPairs:#C5}
+  #C5 = <core::List<core::int?>, core::int>{#C1:#C3, #C2:#C4)
 }
diff --git a/pkg/front_end/testcases/agnostic/map.dart.weak.expect b/pkg/front_end/testcases/agnostic/map.dart.weak.expect
index 2104776..70e1f24 100644
--- a/pkg/front_end/testcases/agnostic/map.dart.weak.expect
+++ b/pkg/front_end/testcases/agnostic/map.dart.weak.expect
@@ -4,7 +4,7 @@
 
 static const field core::List<core::int> a = #C1;
 static const field core::List<core::int?> b = #C2;
-static const field core::Map<core::List<core::int?>, core::int> c = #C6;
+static const field core::Map<core::List<core::int?>, core::int> c = #C5;
 static method main() → dynamic {}
 
 constants  {
@@ -12,6 +12,5 @@
   #C2 = <core::int?>[]
   #C3 = 0
   #C4 = 1
-  #C5 = <dynamic>[#C1, #C3, #C2, #C4]
-  #C6 = core::_ImmutableMap<core::List<core::int?>*, core::int*> {_kvPairs:#C5}
+  #C5 = <core::List<core::int?>*, core::int*>{#C1:#C3, #C2:#C4)
 }
diff --git a/pkg/front_end/testcases/agnostic/map.dart.weak.outline.expect b/pkg/front_end/testcases/agnostic/map.dart.weak.outline.expect
index 9a50a62..8309821 100644
--- a/pkg/front_end/testcases/agnostic/map.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/agnostic/map.dart.weak.outline.expect
@@ -12,5 +12,5 @@
 Extra constant evaluation status:
 Evaluated: ListLiteral @ org-dartlang-testcase:///map.dart:5:16 -> ListConstant(const <int*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///map.dart:6:17 -> ListConstant(const <int?>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///map.dart:7:11 -> InstanceConstant(const _ImmutableMap<List<int?>*, int*>{_ImmutableMap._kvPairs: const <dynamic>[const <int*>[], 0, const <int?>[], 1]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///map.dart:7:11 -> MapConstant(const <List<int?>*, int*>{const <int*>[]: 0, const <int?>[]: 1})
 Extra constant evaluation: evaluated: 3, effectively constant: 3
diff --git a/pkg/front_end/testcases/agnostic/map.dart.weak.transformed.expect b/pkg/front_end/testcases/agnostic/map.dart.weak.transformed.expect
index 2104776..70e1f24 100644
--- a/pkg/front_end/testcases/agnostic/map.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/agnostic/map.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 static const field core::List<core::int> a = #C1;
 static const field core::List<core::int?> b = #C2;
-static const field core::Map<core::List<core::int?>, core::int> c = #C6;
+static const field core::Map<core::List<core::int?>, core::int> c = #C5;
 static method main() → dynamic {}
 
 constants  {
@@ -12,6 +12,5 @@
   #C2 = <core::int?>[]
   #C3 = 0
   #C4 = 1
-  #C5 = <dynamic>[#C1, #C3, #C2, #C4]
-  #C6 = core::_ImmutableMap<core::List<core::int?>*, core::int*> {_kvPairs:#C5}
+  #C5 = <core::List<core::int?>*, core::int*>{#C1:#C3, #C2:#C4)
 }
diff --git a/pkg/front_end/testcases/agnostic/set.dart.strong.expect b/pkg/front_end/testcases/agnostic/set.dart.strong.expect
index 9da7c28..6113c8a 100644
--- a/pkg/front_end/testcases/agnostic/set.dart.strong.expect
+++ b/pkg/front_end/testcases/agnostic/set.dart.strong.expect
@@ -4,14 +4,11 @@
 
 static const field core::List<core::int> a = #C1;
 static const field core::List<core::int?> b = #C2;
-static const field core::Set<core::List<core::int?>> c = #C6;
+static const field core::Set<core::List<core::int?>> c = #C3;
 static method main() → dynamic {}
 
 constants  {
   #C1 = <core::int>[]
   #C2 = <core::int?>[]
-  #C3 = null
-  #C4 = <dynamic>[#C1, #C3, #C2, #C3]
-  #C5 = core::_ImmutableMap<core::List<core::int?>, Null> {_kvPairs:#C4}
-  #C6 = col::_UnmodifiableSet<core::List<core::int?>> {_map:#C5}
+  #C3 = <core::List<core::int?>>{#C1, #C2}
 }
diff --git a/pkg/front_end/testcases/agnostic/set.dart.strong.transformed.expect b/pkg/front_end/testcases/agnostic/set.dart.strong.transformed.expect
index 9da7c28..6113c8a 100644
--- a/pkg/front_end/testcases/agnostic/set.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/agnostic/set.dart.strong.transformed.expect
@@ -4,14 +4,11 @@
 
 static const field core::List<core::int> a = #C1;
 static const field core::List<core::int?> b = #C2;
-static const field core::Set<core::List<core::int?>> c = #C6;
+static const field core::Set<core::List<core::int?>> c = #C3;
 static method main() → dynamic {}
 
 constants  {
   #C1 = <core::int>[]
   #C2 = <core::int?>[]
-  #C3 = null
-  #C4 = <dynamic>[#C1, #C3, #C2, #C3]
-  #C5 = core::_ImmutableMap<core::List<core::int?>, Null> {_kvPairs:#C4}
-  #C6 = col::_UnmodifiableSet<core::List<core::int?>> {_map:#C5}
+  #C3 = <core::List<core::int?>>{#C1, #C2}
 }
diff --git a/pkg/front_end/testcases/agnostic/set.dart.weak.expect b/pkg/front_end/testcases/agnostic/set.dart.weak.expect
index 8c54370..add03f5 100644
--- a/pkg/front_end/testcases/agnostic/set.dart.weak.expect
+++ b/pkg/front_end/testcases/agnostic/set.dart.weak.expect
@@ -4,14 +4,11 @@
 
 static const field core::List<core::int> a = #C1;
 static const field core::List<core::int?> b = #C2;
-static const field core::Set<core::List<core::int?>> c = #C6;
+static const field core::Set<core::List<core::int?>> c = #C3;
 static method main() → dynamic {}
 
 constants  {
   #C1 = <core::int*>[]
   #C2 = <core::int?>[]
-  #C3 = null
-  #C4 = <dynamic>[#C1, #C3, #C2, #C3]
-  #C5 = core::_ImmutableMap<core::List<core::int?>*, Null> {_kvPairs:#C4}
-  #C6 = col::_UnmodifiableSet<core::List<core::int?>*> {_map:#C5}
+  #C3 = <core::List<core::int?>*>{#C1, #C2}
 }
diff --git a/pkg/front_end/testcases/agnostic/set.dart.weak.outline.expect b/pkg/front_end/testcases/agnostic/set.dart.weak.outline.expect
index 62e6f76..a7a0c26 100644
--- a/pkg/front_end/testcases/agnostic/set.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/agnostic/set.dart.weak.outline.expect
@@ -12,5 +12,5 @@
 Extra constant evaluation status:
 Evaluated: ListLiteral @ org-dartlang-testcase:///set.dart:5:16 -> ListConstant(const <int*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///set.dart:6:17 -> ListConstant(const <int?>[])
-Evaluated: SetLiteral @ org-dartlang-testcase:///set.dart:7:11 -> InstanceConstant(const _UnmodifiableSet<List<int?>*>{_UnmodifiableSet._map: const _ImmutableMap<List<int?>*, Null>{_ImmutableMap._kvPairs: const <dynamic>[const <int*>[], null, const <int?>[], null]}})
+Evaluated: SetLiteral @ org-dartlang-testcase:///set.dart:7:11 -> SetConstant(const <List<int?>*>{const <int*>[], const <int?>[]})
 Extra constant evaluation: evaluated: 3, effectively constant: 3
diff --git a/pkg/front_end/testcases/agnostic/set.dart.weak.transformed.expect b/pkg/front_end/testcases/agnostic/set.dart.weak.transformed.expect
index 8c54370..add03f5 100644
--- a/pkg/front_end/testcases/agnostic/set.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/agnostic/set.dart.weak.transformed.expect
@@ -4,14 +4,11 @@
 
 static const field core::List<core::int> a = #C1;
 static const field core::List<core::int?> b = #C2;
-static const field core::Set<core::List<core::int?>> c = #C6;
+static const field core::Set<core::List<core::int?>> c = #C3;
 static method main() → dynamic {}
 
 constants  {
   #C1 = <core::int*>[]
   #C2 = <core::int?>[]
-  #C3 = null
-  #C4 = <dynamic>[#C1, #C3, #C2, #C3]
-  #C5 = core::_ImmutableMap<core::List<core::int?>*, Null> {_kvPairs:#C4}
-  #C6 = col::_UnmodifiableSet<core::List<core::int?>*> {_map:#C5}
+  #C3 = <core::List<core::int?>*>{#C1, #C2}
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_map.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_map.dart.strong.expect
index f35acb3..4ab4b2c 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_map.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_map.dart.strong.expect
@@ -8,7 +8,7 @@
 static const field core::Object? var1 = #C1;
 static const field core::Object? var2 = #C2;
 static const field core::Object? var3 = #C3;
-static const field core::Map<core::String, core::int> map = #C10;
+static const field core::Map<core::String, core::int> map = #C9;
 static const field core::Object? var4 = #C2;
 static const field core::Object? var5 = #C6;
 static const field core::Object? var6 = #C8;
@@ -17,7 +17,7 @@
   return map.{core::Map::[]}(key){(core::Object?) → core::Object?};
 }
 static method fn2() → core::int? {
-  return (#C13).{core::Map::[]}("key"){(core::Object?) → core::int?};
+  return (#C11).{core::Map::[]}("key"){(core::Object?) → core::int?};
 }
 static method main() → void {
   exp::Expect::equals(#C1, "val");
@@ -38,9 +38,7 @@
   #C6 = 3
   #C7 = "key3"
   #C8 = 4
-  #C9 = <dynamic>[#C4, #C2, #C5, #C6, #C7, #C8]
-  #C10 = core::_ImmutableMap<core::String, core::int> {_kvPairs:#C9}
-  #C11 = "key"
-  #C12 = <dynamic>[#C11, #C2]
-  #C13 = core::_ImmutableMap<core::String, core::int> {_kvPairs:#C12}
+  #C9 = <core::String, core::int>{#C4:#C2, #C5:#C6, #C7:#C8)
+  #C10 = "key"
+  #C11 = <core::String, core::int>{#C10:#C2)
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_map.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_map.dart.strong.transformed.expect
index f35acb3..4ab4b2c 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_map.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_map.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
 static const field core::Object? var1 = #C1;
 static const field core::Object? var2 = #C2;
 static const field core::Object? var3 = #C3;
-static const field core::Map<core::String, core::int> map = #C10;
+static const field core::Map<core::String, core::int> map = #C9;
 static const field core::Object? var4 = #C2;
 static const field core::Object? var5 = #C6;
 static const field core::Object? var6 = #C8;
@@ -17,7 +17,7 @@
   return map.{core::Map::[]}(key){(core::Object?) → core::Object?};
 }
 static method fn2() → core::int? {
-  return (#C13).{core::Map::[]}("key"){(core::Object?) → core::int?};
+  return (#C11).{core::Map::[]}("key"){(core::Object?) → core::int?};
 }
 static method main() → void {
   exp::Expect::equals(#C1, "val");
@@ -38,9 +38,7 @@
   #C6 = 3
   #C7 = "key3"
   #C8 = 4
-  #C9 = <dynamic>[#C4, #C2, #C5, #C6, #C7, #C8]
-  #C10 = core::_ImmutableMap<core::String, core::int> {_kvPairs:#C9}
-  #C11 = "key"
-  #C12 = <dynamic>[#C11, #C2]
-  #C13 = core::_ImmutableMap<core::String, core::int> {_kvPairs:#C12}
+  #C9 = <core::String, core::int>{#C4:#C2, #C5:#C6, #C7:#C8)
+  #C10 = "key"
+  #C11 = <core::String, core::int>{#C10:#C2)
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.expect
index a1dcfec..07bb8d3 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.expect
@@ -8,7 +8,7 @@
 static const field core::Object? var1 = #C1;
 static const field core::Object? var2 = #C2;
 static const field core::Object? var3 = #C3;
-static const field core::Map<core::String, core::int> map = #C10;
+static const field core::Map<core::String, core::int> map = #C9;
 static const field core::Object? var4 = #C2;
 static const field core::Object? var5 = #C6;
 static const field core::Object? var6 = #C8;
@@ -17,7 +17,7 @@
   return map.{core::Map::[]}(key){(core::Object?) → core::Object?};
 }
 static method fn2() → core::int? {
-  return (#C13).{core::Map::[]}("key"){(core::Object?) → core::int?};
+  return (#C11).{core::Map::[]}("key"){(core::Object?) → core::int?};
 }
 static method main() → void {
   exp::Expect::equals(#C1, "val");
@@ -38,9 +38,7 @@
   #C6 = 3
   #C7 = "key3"
   #C8 = 4
-  #C9 = <dynamic>[#C4, #C2, #C5, #C6, #C7, #C8]
-  #C10 = core::_ImmutableMap<core::String*, core::int*> {_kvPairs:#C9}
-  #C11 = "key"
-  #C12 = <dynamic>[#C11, #C2]
-  #C13 = core::_ImmutableMap<core::String*, core::int*> {_kvPairs:#C12}
+  #C9 = <core::String*, core::int*>{#C4:#C2, #C5:#C6, #C7:#C8)
+  #C10 = "key"
+  #C11 = <core::String*, core::int*>{#C10:#C2)
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.outline.expect b/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.outline.expect
index 87b21de..7dfb681 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.outline.expect
@@ -21,11 +21,11 @@
 
 
 Extra constant evaluation status:
-Evaluated: MapLiteral @ org-dartlang-testcase:///const_functions_map.dart:9:17 -> InstanceConstant(const _ImmutableMap<Object*, Object*>{_ImmutableMap._kvPairs: const <dynamic>["key", "val"]})
-Evaluated: MapLiteral @ org-dartlang-testcase:///const_functions_map.dart:11:17 -> InstanceConstant(const _ImmutableMap<Object*, Object*>{_ImmutableMap._kvPairs: const <dynamic>["key", 2]})
-Evaluated: MapLiteral @ org-dartlang-testcase:///const_functions_map.dart:13:17 -> InstanceConstant(const _ImmutableMap<Object*, Object*>{_ImmutableMap._kvPairs: const <dynamic>["key", 2]})
-Evaluated: MapLiteral @ org-dartlang-testcase:///const_functions_map.dart:15:13 -> InstanceConstant(const _ImmutableMap<String*, int*>{_ImmutableMap._kvPairs: const <dynamic>["key1", 2, "key2", 3, "key3", 4]})
-Evaluated: StaticGet @ org-dartlang-testcase:///const_functions_map.dart:16:17 -> InstanceConstant(const _ImmutableMap<String*, int*>{_ImmutableMap._kvPairs: const <dynamic>["key1", 2, "key2", 3, "key3", 4]})
-Evaluated: StaticGet @ org-dartlang-testcase:///const_functions_map.dart:17:17 -> InstanceConstant(const _ImmutableMap<String*, int*>{_ImmutableMap._kvPairs: const <dynamic>["key1", 2, "key2", 3, "key3", 4]})
-Evaluated: StaticGet @ org-dartlang-testcase:///const_functions_map.dart:18:17 -> InstanceConstant(const _ImmutableMap<String*, int*>{_ImmutableMap._kvPairs: const <dynamic>["key1", 2, "key2", 3, "key3", 4]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///const_functions_map.dart:9:17 -> MapConstant(const <Object*, Object*>{"key": "val"})
+Evaluated: MapLiteral @ org-dartlang-testcase:///const_functions_map.dart:11:17 -> MapConstant(const <Object*, Object*>{"key": 2})
+Evaluated: MapLiteral @ org-dartlang-testcase:///const_functions_map.dart:13:17 -> MapConstant(const <Object*, Object*>{"key": 2})
+Evaluated: MapLiteral @ org-dartlang-testcase:///const_functions_map.dart:15:13 -> MapConstant(const <String*, int*>{"key1": 2, "key2": 3, "key3": 4})
+Evaluated: StaticGet @ org-dartlang-testcase:///const_functions_map.dart:16:17 -> MapConstant(const <String*, int*>{"key1": 2, "key2": 3, "key3": 4})
+Evaluated: StaticGet @ org-dartlang-testcase:///const_functions_map.dart:17:17 -> MapConstant(const <String*, int*>{"key1": 2, "key2": 3, "key3": 4})
+Evaluated: StaticGet @ org-dartlang-testcase:///const_functions_map.dart:18:17 -> MapConstant(const <String*, int*>{"key1": 2, "key2": 3, "key3": 4})
 Extra constant evaluation: evaluated: 14, effectively constant: 7
diff --git a/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.transformed.expect
index a1dcfec..07bb8d3 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
 static const field core::Object? var1 = #C1;
 static const field core::Object? var2 = #C2;
 static const field core::Object? var3 = #C3;
-static const field core::Map<core::String, core::int> map = #C10;
+static const field core::Map<core::String, core::int> map = #C9;
 static const field core::Object? var4 = #C2;
 static const field core::Object? var5 = #C6;
 static const field core::Object? var6 = #C8;
@@ -17,7 +17,7 @@
   return map.{core::Map::[]}(key){(core::Object?) → core::Object?};
 }
 static method fn2() → core::int? {
-  return (#C13).{core::Map::[]}("key"){(core::Object?) → core::int?};
+  return (#C11).{core::Map::[]}("key"){(core::Object?) → core::int?};
 }
 static method main() → void {
   exp::Expect::equals(#C1, "val");
@@ -38,9 +38,7 @@
   #C6 = 3
   #C7 = "key3"
   #C8 = 4
-  #C9 = <dynamic>[#C4, #C2, #C5, #C6, #C7, #C8]
-  #C10 = core::_ImmutableMap<core::String*, core::int*> {_kvPairs:#C9}
-  #C11 = "key"
-  #C12 = <dynamic>[#C11, #C2]
-  #C13 = core::_ImmutableMap<core::String*, core::int*> {_kvPairs:#C12}
+  #C9 = <core::String*, core::int*>{#C4:#C2, #C5:#C6, #C7:#C8)
+  #C10 = "key"
+  #C11 = <core::String*, core::int*>{#C10:#C2)
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.expect
index 2c377ec..b88cd017 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.expect
@@ -23,35 +23,34 @@
 static method m<X extends core::Object? = dynamic>(self::m::X% x) → core::List<self::m::X%>
   return <self::m::X%>[x];
 static method FunctionApplier|applyAndPrint(lowered final core::Function #this, core::List<core::Object?> positionalArguments) → void
-  return core::print(core::Function::apply(#this, positionalArguments, #C2));
+  return core::print(core::Function::apply(#this, positionalArguments, #C1));
 static method FunctionApplier|get#applyAndPrint(lowered final core::Function #this) → (core::List<core::Object?>) → void
   return (core::List<core::Object?> positionalArguments) → void => self::FunctionApplier|applyAndPrint(#this, positionalArguments);
 static method test() → dynamic {
-  (#C4).{core::Object::toString}(){() → core::String};
+  (#C3).{core::Object::toString}(){() → core::String};
 }
 static method main() → void {
   self::A<dynamic> a = new self::A::•<dynamic>();
   self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::int>, <core::Object?>[2]);
   self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::String>, <core::Object?>["three"]);
-  self::FunctionApplier|applyAndPrint(#C6, <core::Object?>[2]);
-  self::FunctionApplier|applyAndPrint(#C7, <core::Object?>["three"]);
-  self::FunctionApplier|applyAndPrint(#C9, <core::Object?>[2]);
-  self::FunctionApplier|applyAndPrint(#C10, <core::Object?>["three"]);
-  self::FunctionApplier|applyAndPrint(#C6, <core::Object?>[2]);
-  self::FunctionApplier|applyAndPrint(#C7, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C5, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C6, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C8, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C9, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C5, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C6, <core::Object?>["three"]);
+  (#C2).{core::Object::toString}(){() → core::String};
   (#C3).{core::Object::toString}(){() → core::String};
-  (#C4).{core::Object::toString}(){() → core::String};
 }
 
 constants  {
-  #C1 = <dynamic>[]
-  #C2 = core::_ImmutableMap<core::Symbol, dynamic> {_kvPairs:#C1}
-  #C3 = constructor-tearoff self::A::named
-  #C4 = instantiation self::A::named <core::int>
-  #C5 = static-tearoff self::A::n
-  #C6 = instantiation self::A::n <core::int>
-  #C7 = instantiation self::A::n <core::String>
-  #C8 = static-tearoff self::m
-  #C9 = instantiation self::m <core::int>
-  #C10 = instantiation self::m <core::String>
+  #C1 = <core::Symbol, dynamic>{)
+  #C2 = constructor-tearoff self::A::named
+  #C3 = instantiation self::A::named <core::int>
+  #C4 = static-tearoff self::A::n
+  #C5 = instantiation self::A::n <core::int>
+  #C6 = instantiation self::A::n <core::String>
+  #C7 = static-tearoff self::m
+  #C8 = instantiation self::m <core::int>
+  #C9 = instantiation self::m <core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.transformed.expect
index 67fea71..277922f 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.transformed.expect
@@ -23,35 +23,34 @@
 static method m<X extends core::Object? = dynamic>(self::m::X% x) → core::List<self::m::X%>
   return core::_GrowableList::_literal1<self::m::X%>(x);
 static method FunctionApplier|applyAndPrint(lowered final core::Function #this, core::List<core::Object?> positionalArguments) → void
-  return core::print(core::Function::apply(#this, positionalArguments, #C2));
+  return core::print(core::Function::apply(#this, positionalArguments, #C1));
 static method FunctionApplier|get#applyAndPrint(lowered final core::Function #this) → (core::List<core::Object?>) → void
   return (core::List<core::Object?> positionalArguments) → void => self::FunctionApplier|applyAndPrint(#this, positionalArguments);
 static method test() → dynamic {
-  (#C4).{core::Object::toString}(){() → core::String};
+  (#C3).{core::Object::toString}(){() → core::String};
 }
 static method main() → void {
   self::A<dynamic> a = new self::A::•<dynamic>();
   self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::int>, core::_GrowableList::_literal1<core::Object?>(2));
   self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::String>, core::_GrowableList::_literal1<core::Object?>("three"));
-  self::FunctionApplier|applyAndPrint(#C6, core::_GrowableList::_literal1<core::Object?>(2));
-  self::FunctionApplier|applyAndPrint(#C7, core::_GrowableList::_literal1<core::Object?>("three"));
-  self::FunctionApplier|applyAndPrint(#C9, core::_GrowableList::_literal1<core::Object?>(2));
-  self::FunctionApplier|applyAndPrint(#C10, core::_GrowableList::_literal1<core::Object?>("three"));
-  self::FunctionApplier|applyAndPrint(#C6, core::_GrowableList::_literal1<core::Object?>(2));
-  self::FunctionApplier|applyAndPrint(#C7, core::_GrowableList::_literal1<core::Object?>("three"));
+  self::FunctionApplier|applyAndPrint(#C5, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C6, core::_GrowableList::_literal1<core::Object?>("three"));
+  self::FunctionApplier|applyAndPrint(#C8, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C9, core::_GrowableList::_literal1<core::Object?>("three"));
+  self::FunctionApplier|applyAndPrint(#C5, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C6, core::_GrowableList::_literal1<core::Object?>("three"));
+  (#C2).{core::Object::toString}(){() → core::String};
   (#C3).{core::Object::toString}(){() → core::String};
-  (#C4).{core::Object::toString}(){() → core::String};
 }
 
 constants  {
-  #C1 = <dynamic>[]
-  #C2 = core::_ImmutableMap<core::Symbol, dynamic> {_kvPairs:#C1}
-  #C3 = constructor-tearoff self::A::named
-  #C4 = instantiation self::A::named <core::int>
-  #C5 = static-tearoff self::A::n
-  #C6 = instantiation self::A::n <core::int>
-  #C7 = instantiation self::A::n <core::String>
-  #C8 = static-tearoff self::m
-  #C9 = instantiation self::m <core::int>
-  #C10 = instantiation self::m <core::String>
+  #C1 = <core::Symbol, dynamic>{)
+  #C2 = constructor-tearoff self::A::named
+  #C3 = instantiation self::A::named <core::int>
+  #C4 = static-tearoff self::A::n
+  #C5 = instantiation self::A::n <core::int>
+  #C6 = instantiation self::A::n <core::String>
+  #C7 = static-tearoff self::m
+  #C8 = instantiation self::m <core::int>
+  #C9 = instantiation self::m <core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.expect
index a112778..365cc1d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.expect
@@ -23,35 +23,34 @@
 static method m<X extends core::Object? = dynamic>(self::m::X% x) → core::List<self::m::X%>
   return <self::m::X%>[x];
 static method FunctionApplier|applyAndPrint(lowered final core::Function #this, core::List<core::Object?> positionalArguments) → void
-  return core::print(core::Function::apply(#this, positionalArguments, #C2));
+  return core::print(core::Function::apply(#this, positionalArguments, #C1));
 static method FunctionApplier|get#applyAndPrint(lowered final core::Function #this) → (core::List<core::Object?>) → void
   return (core::List<core::Object?> positionalArguments) → void => self::FunctionApplier|applyAndPrint(#this, positionalArguments);
 static method test() → dynamic {
-  (#C4).{core::Object::toString}(){() → core::String};
+  (#C3).{core::Object::toString}(){() → core::String};
 }
 static method main() → void {
   self::A<dynamic> a = new self::A::•<dynamic>();
   self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::int>, <core::Object?>[2]);
   self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::String>, <core::Object?>["three"]);
-  self::FunctionApplier|applyAndPrint(#C6, <core::Object?>[2]);
-  self::FunctionApplier|applyAndPrint(#C7, <core::Object?>["three"]);
-  self::FunctionApplier|applyAndPrint(#C9, <core::Object?>[2]);
-  self::FunctionApplier|applyAndPrint(#C10, <core::Object?>["three"]);
-  self::FunctionApplier|applyAndPrint(#C6, <core::Object?>[2]);
-  self::FunctionApplier|applyAndPrint(#C7, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C5, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C6, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C8, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C9, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C5, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C6, <core::Object?>["three"]);
+  (#C2).{core::Object::toString}(){() → core::String};
   (#C3).{core::Object::toString}(){() → core::String};
-  (#C4).{core::Object::toString}(){() → core::String};
 }
 
 constants  {
-  #C1 = <dynamic>[]
-  #C2 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C1}
-  #C3 = constructor-tearoff self::A::named
-  #C4 = instantiation self::A::named <core::int*>
-  #C5 = static-tearoff self::A::n
-  #C6 = instantiation self::A::n <core::int*>
-  #C7 = instantiation self::A::n <core::String*>
-  #C8 = static-tearoff self::m
-  #C9 = instantiation self::m <core::int*>
-  #C10 = instantiation self::m <core::String*>
+  #C1 = <core::Symbol*, dynamic>{)
+  #C2 = constructor-tearoff self::A::named
+  #C3 = instantiation self::A::named <core::int*>
+  #C4 = static-tearoff self::A::n
+  #C5 = instantiation self::A::n <core::int*>
+  #C6 = instantiation self::A::n <core::String*>
+  #C7 = static-tearoff self::m
+  #C8 = instantiation self::m <core::int*>
+  #C9 = instantiation self::m <core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.transformed.expect
index ca0d633..8e69dba 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.transformed.expect
@@ -23,35 +23,34 @@
 static method m<X extends core::Object? = dynamic>(self::m::X% x) → core::List<self::m::X%>
   return core::_GrowableList::_literal1<self::m::X%>(x);
 static method FunctionApplier|applyAndPrint(lowered final core::Function #this, core::List<core::Object?> positionalArguments) → void
-  return core::print(core::Function::apply(#this, positionalArguments, #C2));
+  return core::print(core::Function::apply(#this, positionalArguments, #C1));
 static method FunctionApplier|get#applyAndPrint(lowered final core::Function #this) → (core::List<core::Object?>) → void
   return (core::List<core::Object?> positionalArguments) → void => self::FunctionApplier|applyAndPrint(#this, positionalArguments);
 static method test() → dynamic {
-  (#C4).{core::Object::toString}(){() → core::String};
+  (#C3).{core::Object::toString}(){() → core::String};
 }
 static method main() → void {
   self::A<dynamic> a = new self::A::•<dynamic>();
   self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::int>, core::_GrowableList::_literal1<core::Object?>(2));
   self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::String>, core::_GrowableList::_literal1<core::Object?>("three"));
-  self::FunctionApplier|applyAndPrint(#C6, core::_GrowableList::_literal1<core::Object?>(2));
-  self::FunctionApplier|applyAndPrint(#C7, core::_GrowableList::_literal1<core::Object?>("three"));
-  self::FunctionApplier|applyAndPrint(#C9, core::_GrowableList::_literal1<core::Object?>(2));
-  self::FunctionApplier|applyAndPrint(#C10, core::_GrowableList::_literal1<core::Object?>("three"));
-  self::FunctionApplier|applyAndPrint(#C6, core::_GrowableList::_literal1<core::Object?>(2));
-  self::FunctionApplier|applyAndPrint(#C7, core::_GrowableList::_literal1<core::Object?>("three"));
+  self::FunctionApplier|applyAndPrint(#C5, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C6, core::_GrowableList::_literal1<core::Object?>("three"));
+  self::FunctionApplier|applyAndPrint(#C8, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C9, core::_GrowableList::_literal1<core::Object?>("three"));
+  self::FunctionApplier|applyAndPrint(#C5, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C6, core::_GrowableList::_literal1<core::Object?>("three"));
+  (#C2).{core::Object::toString}(){() → core::String};
   (#C3).{core::Object::toString}(){() → core::String};
-  (#C4).{core::Object::toString}(){() → core::String};
 }
 
 constants  {
-  #C1 = <dynamic>[]
-  #C2 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C1}
-  #C3 = constructor-tearoff self::A::named
-  #C4 = instantiation self::A::named <core::int*>
-  #C5 = static-tearoff self::A::n
-  #C6 = instantiation self::A::n <core::int*>
-  #C7 = instantiation self::A::n <core::String*>
-  #C8 = static-tearoff self::m
-  #C9 = instantiation self::m <core::int*>
-  #C10 = instantiation self::m <core::String*>
+  #C1 = <core::Symbol*, dynamic>{)
+  #C2 = constructor-tearoff self::A::named
+  #C3 = instantiation self::A::named <core::int*>
+  #C4 = static-tearoff self::A::n
+  #C5 = instantiation self::A::n <core::int*>
+  #C6 = instantiation self::A::n <core::String*>
+  #C7 = static-tearoff self::m
+  #C8 = instantiation self::m <core::int*>
+  #C9 = instantiation self::m <core::String*>
 }
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.weak.expect b/pkg/front_end/testcases/general/abstract_members.dart.weak.expect
index 67d0267..d874a11 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart.weak.expect
+++ b/pkg/front_end/testcases/general/abstract_members.dart.weak.expect
@@ -431,7 +431,7 @@
   #C1 = #interfaceMethod2
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #abstractMethod
   #C6 = #interfaceMethod1
   #C7 = #interfaceMethod3
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.weak.outline.expect b/pkg/front_end/testcases/general/abstract_members.dart.weak.outline.expect
index 49ba0ba..9685255 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_members.dart.weak.outline.expect
@@ -428,29 +428,29 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:12:8 -> SymbolConstant(#interfaceMethod2)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:12:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:12:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:12:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:12:8 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:23:3 -> SymbolConstant(#abstractMethod)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:23:3 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:23:3 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:23:3 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:23:3 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:8:8 -> SymbolConstant(#interfaceMethod1)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:8:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:8:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:8:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:8:8 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:18:8 -> SymbolConstant(#interfaceMethod3)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:18:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:18:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:18:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:18:8 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:26:12 -> SymbolConstant(#property3=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:26:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:26:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:26:12 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:14:7 -> SymbolConstant(#interfaceMethod1=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:14:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:14:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:14:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:24:12 -> SymbolConstant(#property1=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:24:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:24:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:24:12 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:25:12 -> SymbolConstant(#property2=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:25:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:25:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:25:12 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 73, effectively constant: 28
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
index da16394..882db16 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
@@ -54,5 +54,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.outline.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.outline.expect
index db26f68..41d6539 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.outline.expect
@@ -52,5 +52,5 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_overrides_concrete_with_no_such_method.dart:10:5 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_overrides_concrete_with_no_such_method.dart:10:5 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_overrides_concrete_with_no_such_method.dart:10:5 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_overrides_concrete_with_no_such_method.dart:10:5 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_overrides_concrete_with_no_such_method.dart:10:5 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 9, effectively constant: 4
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
index da16394..882db16 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
@@ -54,5 +54,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.expect
index 13b1fa7..5e350b2 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.expect
@@ -420,8 +420,8 @@
 static const field core::List<core::String*>* barWithCustomIterableSpread3 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
 static const field core::List<core::String*>* listConcat = invalid-expression "The method '+' can't be invoked on '<String>[\"Hello\"]' in a constant expression.";
 static const field core::Set<core::String*>* nullSet = #C3;
-static const field core::Set<core::String*>* baz = #C14;
-static const field core::Set<core::String*>* qux = #C17;
+static const field core::Set<core::String*>* baz = #C12;
+static const field core::Set<core::String*>* qux = #C13;
 static const field core::Set<core::String*>* quxWithNullSpread = invalid-expression "Null value during constant evaluation.";
 static const field core::Set<core::String*>* quxWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:41:50: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
 const Set<String> quxWithIntSpread = {...baz, ...fortyTwo};
@@ -439,8 +439,8 @@
  - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
 static const field core::Set<dynamic>* setWithDuplicates = invalid-expression "The element '42' conflicts with another existing element in the set.";
 static const field core::Map<core::String*, core::String*>* nullMap = #C3;
-static const field core::Map<core::String*, core::String*>* quux = #C19;
-static const field core::Map<core::String*, core::String*>* quuz = #C22;
+static const field core::Map<core::String*, core::String*>* quux = #C14;
+static const field core::Map<core::String*, core::String*>* quuz = #C16;
 static const field core::Map<core::String*, core::String*>* quuzWithNullSpread = invalid-expression "Null value during constant evaluation.";
 static const field core::Map<core::String*, core::String*>* quuzWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:58:60: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
 const Map<String, String> quuzWithIntSpread = {...quux, ...fortyTwo};
@@ -453,7 +453,7 @@
                                              ^";
 static const field core::Map<core::String*, core::String*>* mapWithCustomMap1 = invalid-expression "Only maps can be used in spreads in constant maps.";
 static const field core::Map<core::String*, core::String*>* mapWithCustomMap2 = invalid-expression "Only maps can be used in spreads in constant maps.";
-static const field core::Map<core::String*, core::String*>* customMap = #C23;
+static const field core::Map<core::String*, core::String*>* customMap = #C17;
 static const field core::Map<core::String*, core::String*>* mapWithCustomMap3 = invalid-expression "Only maps can be used in spreads in constant maps.";
 static const field core::Map<dynamic, core::int*>* mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
  - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
@@ -463,22 +463,22 @@
 static get barAsGetter() → core::List<core::String*>*
   return #C10;
 static get bazAsGetter() → core::Set<core::String*>*
-  return #C14;
+  return #C12;
 static get quxAsGetter() → core::Set<core::String*>*
-  return #C17;
+  return #C13;
 static get quuxAsGetter() → core::Map<core::String*, core::String*>*
-  return #C19;
+  return #C14;
 static get quuzAsGetter() → core::Map<core::String*, core::String*>*
-  return #C22;
+  return #C16;
 static method main() → dynamic {
   core::print(#C10);
-  core::print(#C17);
-  core::print(#C22);
+  core::print(#C13);
+  core::print(#C16);
   core::print( block {
     final core::Set<core::String*>* #t2 = col::LinkedHashSet::•<core::String*>();
     #t2.{core::Set::add}{Invariant}("hello"){(core::String*) →* core::bool*};
   } =>#t2);
-  core::print(#C26);
+  core::print(#C18);
 }
 
 constants  {
@@ -493,21 +493,13 @@
   #C9 = "!"
   #C10 = <core::String*>[#C6, #C7, #C9]
   #C11 = self::CustomIterable {}
-  #C12 = <dynamic>[#C6, #C3, #C7, #C3]
-  #C13 = core::_ImmutableMap<core::String*, Null> {_kvPairs:#C12}
-  #C14 = col::_UnmodifiableSet<core::String*> {_map:#C13}
-  #C15 = <dynamic>[#C6, #C3, #C7, #C3, #C9, #C3]
-  #C16 = core::_ImmutableMap<core::String*, Null> {_kvPairs:#C15}
-  #C17 = col::_UnmodifiableSet<core::String*> {_map:#C16}
-  #C18 = <dynamic>[#C6, #C7]
-  #C19 = core::_ImmutableMap<core::String*, core::String*> {_kvPairs:#C18}
-  #C20 = "bye!"
-  #C21 = <dynamic>[#C6, #C7, #C9, #C20]
-  #C22 = core::_ImmutableMap<core::String*, core::String*> {_kvPairs:#C21}
-  #C23 = self::CustomMap {}
-  #C24 = <dynamic>[#C6, #C3]
-  #C25 = core::_ImmutableMap<core::String*, Null> {_kvPairs:#C24}
-  #C26 = col::_UnmodifiableSet<core::String*> {_map:#C25}
+  #C12 = <core::String*>{#C6, #C7}
+  #C13 = <core::String*>{#C6, #C7, #C9}
+  #C14 = <core::String*, core::String*>{#C6:#C7)
+  #C15 = "bye!"
+  #C16 = <core::String*, core::String*>{#C6:#C7, #C9:#C15)
+  #C17 = self::CustomMap {}
+  #C18 = <core::String*>{#C6}
 }
 
 
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
index 3ab56c9..8b671e9 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
@@ -332,22 +332,22 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:32:63 -> InstanceConstant(const CustomIterable{})
 Evaluated: ListLiteral @ org-dartlang-testcase:///const_collections.dart:33:33 -> ListConstant(const <String*>["Hello"])
 Evaluated: ListLiteral @ org-dartlang-testcase:///const_collections.dart:33:45 -> ListConstant(const <String*>["World"])
-Evaluated: SetLiteral @ org-dartlang-testcase:///const_collections.dart:36:25 -> InstanceConstant(const _UnmodifiableSet<String*>{_UnmodifiableSet._map: const _ImmutableMap<String*, Null>{_ImmutableMap._kvPairs: const <dynamic>["hello", null, "world", null]}})
-Evaluated: SetConcatenation @ org-dartlang-testcase:///const_collections.dart:38:25 -> InstanceConstant(const _UnmodifiableSet<String*>{_UnmodifiableSet._map: const _ImmutableMap<String*, Null>{_ImmutableMap._kvPairs: const <dynamic>["hello", null, "world", null, "!", null]}})
-Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:40:43 -> InstanceConstant(const _UnmodifiableSet<String*>{_UnmodifiableSet._map: const _ImmutableMap<String*, Null>{_ImmutableMap._kvPairs: const <dynamic>["hello", null, "world", null]}})
+Evaluated: SetLiteral @ org-dartlang-testcase:///const_collections.dart:36:25 -> SetConstant(const <String*>{"hello", "world"})
+Evaluated: SetConcatenation @ org-dartlang-testcase:///const_collections.dart:38:25 -> SetConstant(const <String*>{"hello", "world", "!"})
+Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:40:43 -> SetConstant(const <String*>{"hello", "world"})
 Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:40:51 -> NullConstant(null)
-Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:41:42 -> InstanceConstant(const _UnmodifiableSet<String*>{_UnmodifiableSet._map: const _ImmutableMap<String*, Null>{_ImmutableMap._kvPairs: const <dynamic>["hello", null, "world", null]}})
-Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:44:6 -> InstanceConstant(const _UnmodifiableSet<String*>{_UnmodifiableSet._map: const _ImmutableMap<String*, Null>{_ImmutableMap._kvPairs: const <dynamic>["hello", null, "world", null]}})
+Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:41:42 -> SetConstant(const <String*>{"hello", "world"})
+Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:44:6 -> SetConstant(const <String*>{"hello", "world"})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:45:12 -> InstanceConstant(const CustomIterable{})
-Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:47:54 -> InstanceConstant(const _UnmodifiableSet<String*>{_UnmodifiableSet._map: const _ImmutableMap<String*, Null>{_ImmutableMap._kvPairs: const <dynamic>["hello", null, "world", null]}})
+Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:47:54 -> SetConstant(const <String*>{"hello", "world"})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:47:62 -> InstanceConstant(const CustomIterable{})
-Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:48:54 -> InstanceConstant(const _UnmodifiableSet<String*>{_UnmodifiableSet._map: const _ImmutableMap<String*, Null>{_ImmutableMap._kvPairs: const <dynamic>["hello", null, "world", null]}})
+Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:48:54 -> SetConstant(const <String*>{"hello", "world"})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:49:55 -> InstanceConstant(const WithEquals{WithEquals.i: 42})
-Evaluated: MapLiteral @ org-dartlang-testcase:///const_collections.dart:53:34 -> InstanceConstant(const _ImmutableMap<String*, String*>{_ImmutableMap._kvPairs: const <dynamic>["hello", "world"]})
-Evaluated: MapConcatenation @ org-dartlang-testcase:///const_collections.dart:55:27 -> InstanceConstant(const _ImmutableMap<String*, String*>{_ImmutableMap._kvPairs: const <dynamic>["hello", "world", "!", "bye!"]})
-Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:57:52 -> InstanceConstant(const _ImmutableMap<String*, String*>{_ImmutableMap._kvPairs: const <dynamic>["hello", "world"]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///const_collections.dart:53:34 -> MapConstant(const <String*, String*>{"hello": "world"})
+Evaluated: MapConcatenation @ org-dartlang-testcase:///const_collections.dart:55:27 -> MapConstant(const <String*, String*>{"hello": "world", "!": "bye!"})
+Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:57:52 -> MapConstant(const <String*, String*>{"hello": "world"})
 Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:57:61 -> NullConstant(null)
-Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:58:51 -> InstanceConstant(const _ImmutableMap<String*, String*>{_ImmutableMap._kvPairs: const <dynamic>["hello", "world"]})
+Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:58:51 -> MapConstant(const <String*, String*>{"hello": "world"})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:61:57 -> InstanceConstant(const CustomMap{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:62:51 -> InstanceConstant(const CustomMap{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:63:45 -> InstanceConstant(const CustomMap{})
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.transformed.expect
index f8c5584..13439a67 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.transformed.expect
@@ -420,8 +420,8 @@
 static const field core::List<core::String*>* barWithCustomIterableSpread3 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
 static const field core::List<core::String*>* listConcat = invalid-expression "The method '+' can't be invoked on '<String>[\"Hello\"]' in a constant expression.";
 static const field core::Set<core::String*>* nullSet = #C3;
-static const field core::Set<core::String*>* baz = #C14;
-static const field core::Set<core::String*>* qux = #C17;
+static const field core::Set<core::String*>* baz = #C12;
+static const field core::Set<core::String*>* qux = #C13;
 static const field core::Set<core::String*>* quxWithNullSpread = invalid-expression "Null value during constant evaluation.";
 static const field core::Set<core::String*>* quxWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:41:50: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
 const Set<String> quxWithIntSpread = {...baz, ...fortyTwo};
@@ -439,8 +439,8 @@
  - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
 static const field core::Set<dynamic>* setWithDuplicates = invalid-expression "The element '42' conflicts with another existing element in the set.";
 static const field core::Map<core::String*, core::String*>* nullMap = #C3;
-static const field core::Map<core::String*, core::String*>* quux = #C19;
-static const field core::Map<core::String*, core::String*>* quuz = #C22;
+static const field core::Map<core::String*, core::String*>* quux = #C14;
+static const field core::Map<core::String*, core::String*>* quuz = #C16;
 static const field core::Map<core::String*, core::String*>* quuzWithNullSpread = invalid-expression "Null value during constant evaluation.";
 static const field core::Map<core::String*, core::String*>* quuzWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:58:60: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
 const Map<String, String> quuzWithIntSpread = {...quux, ...fortyTwo};
@@ -453,7 +453,7 @@
                                              ^";
 static const field core::Map<core::String*, core::String*>* mapWithCustomMap1 = invalid-expression "Only maps can be used in spreads in constant maps.";
 static const field core::Map<core::String*, core::String*>* mapWithCustomMap2 = invalid-expression "Only maps can be used in spreads in constant maps.";
-static const field core::Map<core::String*, core::String*>* customMap = #C23;
+static const field core::Map<core::String*, core::String*>* customMap = #C17;
 static const field core::Map<core::String*, core::String*>* mapWithCustomMap3 = invalid-expression "Only maps can be used in spreads in constant maps.";
 static const field core::Map<dynamic, core::int*>* mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
  - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
@@ -463,22 +463,22 @@
 static get barAsGetter() → core::List<core::String*>*
   return #C10;
 static get bazAsGetter() → core::Set<core::String*>*
-  return #C14;
+  return #C12;
 static get quxAsGetter() → core::Set<core::String*>*
-  return #C17;
+  return #C13;
 static get quuxAsGetter() → core::Map<core::String*, core::String*>*
-  return #C19;
+  return #C14;
 static get quuzAsGetter() → core::Map<core::String*, core::String*>*
-  return #C22;
+  return #C16;
 static method main() → dynamic {
   core::print(#C10);
-  core::print(#C17);
-  core::print(#C22);
+  core::print(#C13);
+  core::print(#C16);
   core::print( block {
     final core::Set<core::String*>* #t2 = new col::_CompactLinkedHashSet::•<core::String*>();
     #t2.{core::Set::add}{Invariant}("hello"){(core::String*) →* core::bool*};
   } =>#t2);
-  core::print(#C26);
+  core::print(#C18);
 }
 
 constants  {
@@ -493,21 +493,13 @@
   #C9 = "!"
   #C10 = <core::String*>[#C6, #C7, #C9]
   #C11 = self::CustomIterable {}
-  #C12 = <dynamic>[#C6, #C3, #C7, #C3]
-  #C13 = core::_ImmutableMap<core::String*, Null> {_kvPairs:#C12}
-  #C14 = col::_UnmodifiableSet<core::String*> {_map:#C13}
-  #C15 = <dynamic>[#C6, #C3, #C7, #C3, #C9, #C3]
-  #C16 = core::_ImmutableMap<core::String*, Null> {_kvPairs:#C15}
-  #C17 = col::_UnmodifiableSet<core::String*> {_map:#C16}
-  #C18 = <dynamic>[#C6, #C7]
-  #C19 = core::_ImmutableMap<core::String*, core::String*> {_kvPairs:#C18}
-  #C20 = "bye!"
-  #C21 = <dynamic>[#C6, #C7, #C9, #C20]
-  #C22 = core::_ImmutableMap<core::String*, core::String*> {_kvPairs:#C21}
-  #C23 = self::CustomMap {}
-  #C24 = <dynamic>[#C6, #C3]
-  #C25 = core::_ImmutableMap<core::String*, Null> {_kvPairs:#C24}
-  #C26 = col::_UnmodifiableSet<core::String*> {_map:#C25}
+  #C12 = <core::String*>{#C6, #C7}
+  #C13 = <core::String*>{#C6, #C7, #C9}
+  #C14 = <core::String*, core::String*>{#C6:#C7)
+  #C15 = "bye!"
+  #C16 = <core::String*, core::String*>{#C6:#C7, #C9:#C15)
+  #C17 = self::CustomMap {}
+  #C18 = <core::String*>{#C6}
 }
 
 
diff --git a/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.expect b/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.expect
index c76837e..6d5d48a 100644
--- a/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.expect
@@ -4,33 +4,27 @@
 
 import "org-dartlang-testcase:///main_lib.dart" as a;
 
-static const field core::Map<core::int*, core::String*>* map = #C4;
-static const field core::Set<core::int*>* set = #C10;
-static const field core::List<core::int*>* list = #C11;
+static const field core::Map<core::int*, core::String*>* map = #C3;
+static const field core::Set<core::int*>* set = #C6;
+static const field core::List<core::int*>* list = #C7;
 static method main() → dynamic {}
 
 library;
 import self as self2;
 import "dart:core" as core;
 
-static const field core::Map<core::int*, core::String*>* map = #C4;
-static const field core::Set<core::int*>* set = #C14;
-static const field core::List<core::int*>* list = #C15;
+static const field core::Map<core::int*, core::String*>* map = #C3;
+static const field core::Set<core::int*>* set = #C8;
+static const field core::List<core::int*>* list = #C9;
 
 constants  {
   #C1 = 1
   #C2 = "a"
-  #C3 = <dynamic>[#C1, #C2]
-  #C4 = core::_ImmutableMap<core::int*, core::String*> {_kvPairs:#C3}
-  #C5 = 2
-  #C6 = null
-  #C7 = 3
-  #C8 = <dynamic>[#C5, #C6, #C7, #C6]
-  #C9 = core::_ImmutableMap<core::int*, Null> {_kvPairs:#C8}
-  #C10 = col::_UnmodifiableSet<core::int*> {_map:#C9}
-  #C11 = <core::int*>[#C7, #C5]
-  #C12 = <dynamic>[#C5, #C6]
-  #C13 = core::_ImmutableMap<core::int*, Null> {_kvPairs:#C12}
-  #C14 = col::_UnmodifiableSet<core::int*> {_map:#C13}
-  #C15 = <core::int*>[#C7]
+  #C3 = <core::int*, core::String*>{#C1:#C2)
+  #C4 = 2
+  #C5 = 3
+  #C6 = <core::int*>{#C4, #C5}
+  #C7 = <core::int*>[#C5, #C4]
+  #C8 = <core::int*>{#C4}
+  #C9 = <core::int*>[#C5]
 }
diff --git a/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.outline.expect
index 280c0fe..f0edaba 100644
--- a/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.outline.expect
@@ -15,26 +15,22 @@
 import self as mai;
 import "dart:core" as core;
 
-static const field core::Map<core::int*, core::String*>* map = #C4;
-static const field core::Set<core::int*>* set = #C9;
-static const field core::List<core::int*>* list = #C11;
+static const field core::Map<core::int*, core::String*>* map = #C3;
+static const field core::Set<core::int*>* set = #C5;
+static const field core::List<core::int*>* list = #C7;
 
 constants  {
   #C1 = 1
   #C2 = "a"
-  #C3 = <dynamic>[#C1, #C2]
-  #C4 = core::_ImmutableMap<core::int*, core::String*> {_kvPairs:#C3}
-  #C5 = 2
-  #C6 = null
-  #C7 = <dynamic>[#C5, #C6]
-  #C8 = core::_ImmutableMap<core::int*, Null> {_kvPairs:#C7}
-  #C9 = col::_UnmodifiableSet<core::int*> {_map:#C8}
-  #C10 = 3
-  #C11 = <core::int*>[#C10]
+  #C3 = <core::int*, core::String*>{#C1:#C2)
+  #C4 = 2
+  #C5 = <core::int*>{#C4}
+  #C6 = 3
+  #C7 = <core::int*>[#C6]
 }
 
 Extra constant evaluation status:
-Evaluated: MapConcatenation @ org-dartlang-testcase:///main.dart:7:7 -> InstanceConstant(const _ImmutableMap<int*, String*>{_ImmutableMap._kvPairs: const <dynamic>[1, "a"]})
-Evaluated: SetConcatenation @ org-dartlang-testcase:///main.dart:11:18 -> InstanceConstant(const _UnmodifiableSet<int*>{_UnmodifiableSet._map: const _ImmutableMap<int*, Null>{_ImmutableMap._kvPairs: const <dynamic>[2, null, 3, null]}})
+Evaluated: MapConcatenation @ org-dartlang-testcase:///main.dart:7:7 -> MapConstant(const <int*, String*>{1: "a"})
+Evaluated: SetConcatenation @ org-dartlang-testcase:///main.dart:11:18 -> SetConstant(const <int*>{2, 3})
 Evaluated: ListConcatenation @ org-dartlang-testcase:///main.dart:16:19 -> ListConstant(const <int*>[3, 2])
 Extra constant evaluation: evaluated: 3, effectively constant: 3
diff --git a/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.transformed.expect
index c76837e..6d5d48a 100644
--- a/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.transformed.expect
@@ -4,33 +4,27 @@
 
 import "org-dartlang-testcase:///main_lib.dart" as a;
 
-static const field core::Map<core::int*, core::String*>* map = #C4;
-static const field core::Set<core::int*>* set = #C10;
-static const field core::List<core::int*>* list = #C11;
+static const field core::Map<core::int*, core::String*>* map = #C3;
+static const field core::Set<core::int*>* set = #C6;
+static const field core::List<core::int*>* list = #C7;
 static method main() → dynamic {}
 
 library;
 import self as self2;
 import "dart:core" as core;
 
-static const field core::Map<core::int*, core::String*>* map = #C4;
-static const field core::Set<core::int*>* set = #C14;
-static const field core::List<core::int*>* list = #C15;
+static const field core::Map<core::int*, core::String*>* map = #C3;
+static const field core::Set<core::int*>* set = #C8;
+static const field core::List<core::int*>* list = #C9;
 
 constants  {
   #C1 = 1
   #C2 = "a"
-  #C3 = <dynamic>[#C1, #C2]
-  #C4 = core::_ImmutableMap<core::int*, core::String*> {_kvPairs:#C3}
-  #C5 = 2
-  #C6 = null
-  #C7 = 3
-  #C8 = <dynamic>[#C5, #C6, #C7, #C6]
-  #C9 = core::_ImmutableMap<core::int*, Null> {_kvPairs:#C8}
-  #C10 = col::_UnmodifiableSet<core::int*> {_map:#C9}
-  #C11 = <core::int*>[#C7, #C5]
-  #C12 = <dynamic>[#C5, #C6]
-  #C13 = core::_ImmutableMap<core::int*, Null> {_kvPairs:#C12}
-  #C14 = col::_UnmodifiableSet<core::int*> {_map:#C13}
-  #C15 = <core::int*>[#C7]
+  #C3 = <core::int*, core::String*>{#C1:#C2)
+  #C4 = 2
+  #C5 = 3
+  #C6 = <core::int*>{#C4, #C5}
+  #C7 = <core::int*>[#C5, #C4]
+  #C8 = <core::int*>{#C4}
+  #C9 = <core::int*>[#C5]
 }
diff --git a/pkg/front_end/testcases/general/issue40744.dart.weak.expect b/pkg/front_end/testcases/general/issue40744.dart.weak.expect
index b193d72..265bcc9 100644
--- a/pkg/front_end/testcases/general/issue40744.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue40744.dart.weak.expect
@@ -2,18 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-static const field core::Map<core::String*, dynamic>* generatorConfigDefaultJson = #C4;
+static const field core::Map<core::String*, dynamic>* generatorConfigDefaultJson = #C3;
 static method helper(core::Map<core::String*, dynamic>* input) → void {
   core::print(input);
 }
 static method main() → void {
-  final core::Map<core::String*, Null>* nullValueMap = core::Map::fromEntries<core::String*, Null>((#C4).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>*>*}.{core::Iterable::map}<core::MapEntry<core::String*, Null>*>((core::MapEntry<core::String*, dynamic>* e) → core::MapEntry<core::String*, Null>* => new core::MapEntry::_<core::String*, Null>(e.{core::MapEntry::key}{core::String*}, null)){((core::MapEntry<core::String*, dynamic>*) →* core::MapEntry<core::String*, Null>*) →* core::Iterable<core::MapEntry<core::String*, Null>*>*});
+  final core::Map<core::String*, Null>* nullValueMap = core::Map::fromEntries<core::String*, Null>((#C3).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>*>*}.{core::Iterable::map}<core::MapEntry<core::String*, Null>*>((core::MapEntry<core::String*, dynamic>* e) → core::MapEntry<core::String*, Null>* => new core::MapEntry::_<core::String*, Null>(e.{core::MapEntry::key}{core::String*}, null)){((core::MapEntry<core::String*, dynamic>*) →* core::MapEntry<core::String*, Null>*) →* core::Iterable<core::MapEntry<core::String*, Null>*>*});
   self::helper(nullValueMap);
 }
 
 constants  {
   #C1 = "a"
   #C2 = 1
-  #C3 = <dynamic>[#C1, #C2]
-  #C4 = core::_ImmutableMap<core::String*, dynamic> {_kvPairs:#C3}
+  #C3 = <core::String*, dynamic>{#C1:#C2)
 }
diff --git a/pkg/front_end/testcases/general/issue40744.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue40744.dart.weak.outline.expect
index 3b367f6..5acf79e 100644
--- a/pkg/front_end/testcases/general/issue40744.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue40744.dart.weak.outline.expect
@@ -10,5 +10,5 @@
 
 
 Extra constant evaluation status:
-Evaluated: MapLiteral @ org-dartlang-testcase:///issue40744.dart:5:53 -> InstanceConstant(const _ImmutableMap<String*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>["a", 1]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///issue40744.dart:5:53 -> MapConstant(const <String*, dynamic>{"a": 1})
 Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/issue40744.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue40744.dart.weak.transformed.expect
index b193d72..265bcc9 100644
--- a/pkg/front_end/testcases/general/issue40744.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue40744.dart.weak.transformed.expect
@@ -2,18 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-static const field core::Map<core::String*, dynamic>* generatorConfigDefaultJson = #C4;
+static const field core::Map<core::String*, dynamic>* generatorConfigDefaultJson = #C3;
 static method helper(core::Map<core::String*, dynamic>* input) → void {
   core::print(input);
 }
 static method main() → void {
-  final core::Map<core::String*, Null>* nullValueMap = core::Map::fromEntries<core::String*, Null>((#C4).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>*>*}.{core::Iterable::map}<core::MapEntry<core::String*, Null>*>((core::MapEntry<core::String*, dynamic>* e) → core::MapEntry<core::String*, Null>* => new core::MapEntry::_<core::String*, Null>(e.{core::MapEntry::key}{core::String*}, null)){((core::MapEntry<core::String*, dynamic>*) →* core::MapEntry<core::String*, Null>*) →* core::Iterable<core::MapEntry<core::String*, Null>*>*});
+  final core::Map<core::String*, Null>* nullValueMap = core::Map::fromEntries<core::String*, Null>((#C3).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>*>*}.{core::Iterable::map}<core::MapEntry<core::String*, Null>*>((core::MapEntry<core::String*, dynamic>* e) → core::MapEntry<core::String*, Null>* => new core::MapEntry::_<core::String*, Null>(e.{core::MapEntry::key}{core::String*}, null)){((core::MapEntry<core::String*, dynamic>*) →* core::MapEntry<core::String*, Null>*) →* core::Iterable<core::MapEntry<core::String*, Null>*>*});
   self::helper(nullValueMap);
 }
 
 constants  {
   #C1 = "a"
   #C2 = 1
-  #C3 = <dynamic>[#C1, #C2]
-  #C4 = core::_ImmutableMap<core::String*, dynamic> {_kvPairs:#C3}
+  #C3 = <core::String*, dynamic>{#C1:#C2)
 }
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect b/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect
index 56f882f..d009d81 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect
@@ -5,7 +5,7 @@
 
 import "org-dartlang-testcase:///foo_lib.dart";
 
-static const field core::Set<foo::Foo> foo = #C5;
+static const field core::Set<foo::Foo> foo = #C2;
 static method main() → dynamic {}
 
 library /*isNonNullableByDefault*/;
@@ -41,10 +41,7 @@
 
 constants  {
   #C1 = bar::Bar<dynamic> {}
-  #C2 = null
-  #C3 = <dynamic>[#C1, #C2]
-  #C4 = core::_ImmutableMap<foo::Foo*, Null> {_kvPairs:#C3}
-  #C5 = col::_UnmodifiableSet<foo::Foo*> {_map:#C4}
+  #C2 = <foo::Foo*>{#C1}
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue45003/main.dart.weak.outline.expect
index db7011d..277bd57 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.weak.outline.expect
@@ -43,5 +43,5 @@
 
 
 Extra constant evaluation status:
-Evaluated: SetLiteral @ org-dartlang-testcase:///main.dart:7:27 -> InstanceConstant(const _UnmodifiableSet<Foo*>{_UnmodifiableSet._map: const _ImmutableMap<Foo*, Null>{_ImmutableMap._kvPairs: const <dynamic>[const Bar<dynamic>{}, null]}})
+Evaluated: SetLiteral @ org-dartlang-testcase:///main.dart:7:27 -> SetConstant(const <Foo*>{const Bar<dynamic>{}})
 Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45003/main.dart.weak.transformed.expect
index 56f882f..d009d81 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 
 import "org-dartlang-testcase:///foo_lib.dart";
 
-static const field core::Set<foo::Foo> foo = #C5;
+static const field core::Set<foo::Foo> foo = #C2;
 static method main() → dynamic {}
 
 library /*isNonNullableByDefault*/;
@@ -41,10 +41,7 @@
 
 constants  {
   #C1 = bar::Bar<dynamic> {}
-  #C2 = null
-  #C3 = <dynamic>[#C1, #C2]
-  #C4 = core::_ImmutableMap<foo::Foo*, Null> {_kvPairs:#C3}
-  #C5 = col::_UnmodifiableSet<foo::Foo*> {_map:#C4}
+  #C2 = <foo::Foo*>{#C1}
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue46719.dart.weak.expect b/pkg/front_end/testcases/general/issue46719.dart.weak.expect
index 17813ed..449b259 100644
--- a/pkg/front_end/testcases/general/issue46719.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue46719.dart.weak.expect
@@ -77,7 +77,7 @@
 static method m<X extends core::Object? = dynamic>(self::m::X% x) → core::List<self::m::X%>
   return <self::m::X%>[x];
 static method FunctionApplier|applyAndPrint(lowered final core::Function #this, core::List<core::Object?> positionalArguments) → void
-  return core::print(core::Function::apply(#this, positionalArguments, #C2));
+  return core::print(core::Function::apply(#this, positionalArguments, #C1));
 static method FunctionApplier|get#applyAndPrint(lowered final core::Function #this) → (core::List<core::Object?>) → void
   return (core::List<core::Object?> positionalArguments) → void => self::FunctionApplier|applyAndPrint(#this, positionalArguments);
 static method test() → dynamic {
@@ -100,8 +100,8 @@
   invalid-expression "pkg/front_end/testcases/general/issue46719.dart:32:18: Error: Couldn't find constructor 'm.applyAndPrint'.
   self.m<String>.applyAndPrint(['three']);
                  ^^^^^^^^^^^^^";
-  self::FunctionApplier|applyAndPrint(#C3, <core::Object?>[2]);
-  self::FunctionApplier|applyAndPrint(#C3, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C2, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C2, <core::Object?>["three"]);
   invalid-expression "pkg/front_end/testcases/general/issue46719.dart:35:5: Error: Member not found: 'named'.
   A.named.toString();
     ^^^^^".{core::Object::toString}(){() → core::String};
@@ -115,7 +115,6 @@
 static method main() → void {}
 
 constants  {
-  #C1 = <dynamic>[]
-  #C2 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C1}
-  #C3 = static-tearoff self::A::n
+  #C1 = <core::Symbol*, dynamic>{)
+  #C2 = static-tearoff self::A::n
 }
diff --git a/pkg/front_end/testcases/general/issue46719.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue46719.dart.weak.transformed.expect
index c09f829..68480b5 100644
--- a/pkg/front_end/testcases/general/issue46719.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue46719.dart.weak.transformed.expect
@@ -77,7 +77,7 @@
 static method m<X extends core::Object? = dynamic>(self::m::X% x) → core::List<self::m::X%>
   return core::_GrowableList::_literal1<self::m::X%>(x);
 static method FunctionApplier|applyAndPrint(lowered final core::Function #this, core::List<core::Object?> positionalArguments) → void
-  return core::print(core::Function::apply(#this, positionalArguments, #C2));
+  return core::print(core::Function::apply(#this, positionalArguments, #C1));
 static method FunctionApplier|get#applyAndPrint(lowered final core::Function #this) → (core::List<core::Object?>) → void
   return (core::List<core::Object?> positionalArguments) → void => self::FunctionApplier|applyAndPrint(#this, positionalArguments);
 static method test() → dynamic {
@@ -100,8 +100,8 @@
   invalid-expression "pkg/front_end/testcases/general/issue46719.dart:32:18: Error: Couldn't find constructor 'm.applyAndPrint'.
   self.m<String>.applyAndPrint(['three']);
                  ^^^^^^^^^^^^^";
-  self::FunctionApplier|applyAndPrint(#C3, core::_GrowableList::_literal1<core::Object?>(2));
-  self::FunctionApplier|applyAndPrint(#C3, core::_GrowableList::_literal1<core::Object?>("three"));
+  self::FunctionApplier|applyAndPrint(#C2, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C2, core::_GrowableList::_literal1<core::Object?>("three"));
   invalid-expression "pkg/front_end/testcases/general/issue46719.dart:35:5: Error: Member not found: 'named'.
   A.named.toString();
     ^^^^^".{core::Object::toString}(){() → core::String};
@@ -115,7 +115,6 @@
 static method main() → void {}
 
 constants  {
-  #C1 = <dynamic>[]
-  #C2 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C1}
-  #C3 = static-tearoff self::A::n
+  #C1 = <core::Symbol*, dynamic>{)
+  #C2 = static-tearoff self::A::n
 }
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.expect b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.expect
index e2b0f2d..2fd6b9d 100644
--- a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.expect
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.expect
@@ -53,6 +53,6 @@
   #C1 = #org-dartlang-testcase:///no_such_method_forwarder.dart::_foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #foo
 }
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.outline.expect b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.outline.expect
index 9be8c51..3f9946a 100644
--- a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.outline.expect
@@ -47,9 +47,9 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:6:8 -> SymbolConstant(#_foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:6:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:6:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:6:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:6:8 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:11:8 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:11:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:11:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:11:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:11:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 16, effectively constant: 8
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect
index 5ef478d..e545ab0 100644
--- a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect
@@ -80,6 +80,6 @@
   #C1 = #org-dartlang-testcase:///no_such_method_forwarder.dart::_foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #foo
 }
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.expect
index 6728bd2..180ea5a 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.expect
@@ -56,6 +56,6 @@
   #C1 = #org-dartlang-testcase:///no_such_method_private_setter.dart::_x
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #org-dartlang-testcase:///no_such_method_private_setter.dart::_x=
 }
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.outline.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.outline.expect
index d5c3d92..882f03b 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.outline.expect
@@ -53,8 +53,8 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method_private_setter_lib.dart:8:7 -> SymbolConstant(#_x)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_private_setter_lib.dart:8:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_private_setter_lib.dart:8:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_private_setter_lib.dart:8:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_private_setter_lib.dart:8:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method_private_setter_lib.dart:8:7 -> SymbolConstant(#_x=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_private_setter_lib.dart:8:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_private_setter_lib.dart:8:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_private_setter_lib.dart:8:7 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 19, effectively constant: 7
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.transformed.expect
index 79287b9..bc8c75f 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.transformed.expect
@@ -56,6 +56,6 @@
   #C1 = #org-dartlang-testcase:///no_such_method_private_setter.dart::_x
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #org-dartlang-testcase:///no_such_method_private_setter.dart::_x=
 }
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.expect
index 7f2d6c50..643964f 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.expect
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.expect
@@ -60,13 +60,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 class D4 extends core::Object implements nsm::B, nsm::A<core::int*> {
   synthetic constructor •() → self::D4*
@@ -85,13 +85,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
@@ -192,13 +192,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 class C4 extends core::Object implements nsm::B, nsm::A<core::int*> {
   synthetic constructor •() → nsm::C4*
@@ -217,13 +217,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 
 constants  {
@@ -231,9 +231,9 @@
   #C2 = core::_Override {}
   #C3 = #org-dartlang-testcase:///nsm_covariance.dart::_method1
   #C4 = <core::Type*>[]
-  #C5 = <dynamic>[]
-  #C6 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C5}
-  #C7 = #org-dartlang-testcase:///nsm_covariance.dart::_method2
+  #C5 = <core::Symbol*, dynamic>{)
+  #C6 = #org-dartlang-testcase:///nsm_covariance.dart::_method2
+  #C7 = <dynamic>[]
   #C8 = #a
   #C9 = #b
   #C10 = #c
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
index e07accc..1534134 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
@@ -222,7 +222,7 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///nsm_covariance.dart:14:4 -> InstanceConstant(const _Override{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> SymbolConstant(#_method1)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> SymbolConstant(#_method2)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> ListConstant(const <dynamic>[])
@@ -232,7 +232,7 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> SymbolConstant(#d)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> SymbolConstant(#_method3)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> SymbolConstant(#_method4)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> ListConstant(const <dynamic>[])
@@ -241,7 +241,7 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///nsm_covariance.dart:19:4 -> InstanceConstant(const _Override{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> SymbolConstant(#_method1)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> SymbolConstant(#_method2)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> ListConstant(const <dynamic>[])
@@ -251,7 +251,7 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> SymbolConstant(#d)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> SymbolConstant(#_method3)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> SymbolConstant(#_method4)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> ListConstant(const <dynamic>[])
@@ -260,7 +260,7 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///nsm_covariance_lib.dart:24:4 -> InstanceConstant(const _Override{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> SymbolConstant(#_method1)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> SymbolConstant(#_method2)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> ListConstant(const <dynamic>[])
@@ -270,7 +270,7 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> SymbolConstant(#d)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> SymbolConstant(#_method3)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> SymbolConstant(#_method4)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> ListConstant(const <dynamic>[])
@@ -279,7 +279,7 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///nsm_covariance_lib.dart:29:4 -> InstanceConstant(const _Override{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> SymbolConstant(#_method1)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> SymbolConstant(#_method2)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> ListConstant(const <dynamic>[])
@@ -289,7 +289,7 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> SymbolConstant(#d)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> SymbolConstant(#_method3)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> SymbolConstant(#_method4)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> ListConstant(const <dynamic>[])
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.transformed.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.transformed.expect
index e66febb..2afdeb8 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.transformed.expect
@@ -60,13 +60,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(a, b, c, d)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(a, b, c, d)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(a, b)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(a, b)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 class D4 extends core::Object implements nsm::B, nsm::A<core::int*> {
   synthetic constructor •() → self::D4*
@@ -85,13 +85,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(x, y, z, w)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(x, y, z, w)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(x, y)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(x, y)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
@@ -192,13 +192,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(a, b, c, d)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(a, b, c, d)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(a, b)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(a, b)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 class C4 extends core::Object implements nsm::B, nsm::A<core::int*> {
   synthetic constructor •() → nsm::C4*
@@ -217,13 +217,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(x, y, z, w)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(x, y, z, w)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(x, y)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(x, y)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 
 constants  {
@@ -231,9 +231,9 @@
   #C2 = core::_Override {}
   #C3 = #org-dartlang-testcase:///nsm_covariance.dart::_method1
   #C4 = <core::Type*>[]
-  #C5 = <dynamic>[]
-  #C6 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C5}
-  #C7 = #org-dartlang-testcase:///nsm_covariance.dart::_method2
+  #C5 = <core::Symbol*, dynamic>{)
+  #C6 = #org-dartlang-testcase:///nsm_covariance.dart::_method2
+  #C7 = <dynamic>[]
   #C8 = #a
   #C9 = #b
   #C10 = #c
diff --git a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.expect b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.expect
index 4ada913..ca1fea0 100644
--- a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.expect
+++ b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.expect
@@ -59,5 +59,5 @@
   #C1 = #org-dartlang-testcase:///private_method_tearoff.dart::_f
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.outline.expect b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.outline.expect
index 6cb829a..384c64d 100644
--- a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.outline.expect
@@ -56,5 +56,5 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///private_method_tearoff_lib.dart:8:8 -> SymbolConstant(#_f)
 Evaluated: ListLiteral @ org-dartlang-testcase:///private_method_tearoff_lib.dart:8:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///private_method_tearoff_lib.dart:8:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///private_method_tearoff_lib.dart:8:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///private_method_tearoff_lib.dart:8:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 8, effectively constant: 4
diff --git a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.transformed.expect b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.transformed.expect
index 4ada913..ca1fea0 100644
--- a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.transformed.expect
@@ -59,5 +59,5 @@
   #C1 = #org-dartlang-testcase:///private_method_tearoff.dart::_f
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.weak.expect b/pkg/front_end/testcases/general/super_nsm.dart.weak.expect
index 949ce24..671d437 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.weak.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.weak.expect
@@ -55,5 +55,5 @@
   #C1 = #interfaceMethod
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.weak.outline.expect b/pkg/front_end/testcases/general/super_nsm.dart.weak.outline.expect
index 8b77ef2..436dba3 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.weak.outline.expect
@@ -50,5 +50,5 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///super_nsm.dart:6:3 -> SymbolConstant(#interfaceMethod)
 Evaluated: ListLiteral @ org-dartlang-testcase:///super_nsm.dart:6:3 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///super_nsm.dart:6:3 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///super_nsm.dart:6:3 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///super_nsm.dart:6:3 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 9, effectively constant: 4
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.weak.transformed.expect b/pkg/front_end/testcases/general/super_nsm.dart.weak.transformed.expect
index 949ce24..671d437 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.weak.transformed.expect
@@ -55,5 +55,5 @@
   #C1 = #interfaceMethod
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/incremental/constant_set_literal.yaml.world.1.expect b/pkg/front_end/testcases/incremental/constant_set_literal.yaml.world.1.expect
index 98a923f..c6642dc 100644
--- a/pkg/front_end/testcases/incremental/constant_set_literal.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/constant_set_literal.yaml.world.1.expect
@@ -1,26 +1,21 @@
 main = main::main;
 library from "org-dartlang-test:///lib.dart" as lib {
 
-  static const field dart.core::Set<dart.core::String*>* bar = #C6;
+  static const field dart.core::Set<dart.core::String*>* bar = #C3;
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///lib.dart";
 
-  static const field dart.core::Set<dart.core::String*>* foo = #C9;
+  static const field dart.core::Set<dart.core::String*>* foo = #C4;
   static method main() → dynamic {
-    dart.core::print(#C9);
-    dart.core::print(#C6);
+    dart.core::print(#C4);
+    dart.core::print(#C3);
   }
 }
 constants  {
   #C1 = "hello"
-  #C2 = null
-  #C3 = "world"
-  #C4 = <dynamic>[#C1, #C2, #C3, #C2]
-  #C5 = dart.core::_ImmutableMap<dart.core::String*, Null> {_kvPairs:#C4}
-  #C6 = dart.collection::_UnmodifiableSet<dart.core::String*> {_map:#C5}
-  #C7 = <dynamic>[]
-  #C8 = dart.core::_ImmutableMap<dart.core::String*, Null> {_kvPairs:#C7}
-  #C9 = dart.collection::_UnmodifiableSet<dart.core::String*> {_map:#C8}
+  #C2 = "world"
+  #C3 = <dart.core::String*>{#C1, #C2}
+  #C4 = <dart.core::String*>{}
 }
diff --git a/pkg/front_end/testcases/incremental/constant_set_literal.yaml.world.2.expect b/pkg/front_end/testcases/incremental/constant_set_literal.yaml.world.2.expect
index 3e1ca84..e7dc08e 100644
--- a/pkg/front_end/testcases/incremental/constant_set_literal.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/constant_set_literal.yaml.world.2.expect
@@ -1,25 +1,20 @@
 main = main::main;
 library from "org-dartlang-test:///lib.dart" as lib {
 
-  static const field dart.core::Set<dart.core::int*>* bar = #C5;
+  static const field dart.core::Set<dart.core::int*>* bar = #C2;
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///lib.dart";
 
-  static const field dart.core::Set<dart.core::String*>* foo = #C8;
+  static const field dart.core::Set<dart.core::String*>* foo = #C3;
   static method main() → dynamic {
-    dart.core::print(#C8);
-    dart.core::print(#C5);
+    dart.core::print(#C3);
+    dart.core::print(#C2);
   }
 }
 constants  {
   #C1 = 42
-  #C2 = null
-  #C3 = <dynamic>[#C1, #C2]
-  #C4 = dart.core::_ImmutableMap<dart.core::int*, Null> {_kvPairs:#C3}
-  #C5 = dart.collection::_UnmodifiableSet<dart.core::int*> {_map:#C4}
-  #C6 = <dynamic>[]
-  #C7 = dart.core::_ImmutableMap<dart.core::String*, Null> {_kvPairs:#C6}
-  #C8 = dart.collection::_UnmodifiableSet<dart.core::String*> {_map:#C7}
+  #C2 = <dart.core::int*>{#C1}
+  #C3 = <dart.core::String*>{}
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.1.expect
index 9c81633..6f8c60d 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.1.expect
@@ -71,7 +71,7 @@
   #C1 = #getter
   #C2 = <dart.core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = dart.core::_ImmutableMap<dart.core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <dart.core::Symbol*, dynamic>{)
   #C5 = #method
   #C6 = #setter=
   #C7 = #field
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.2.expect
index b2fcdc2..546d558 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.2.expect
@@ -71,7 +71,7 @@
   #C1 = #getter
   #C2 = <dart.core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = dart.core::_ImmutableMap<dart.core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <dart.core::Symbol*, dynamic>{)
   #C5 = #method
   #C6 = #setter=
   #C7 = #field
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.expect
index 2126542..ab58333 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.expect
@@ -75,7 +75,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::Map<core::int*, core::String*>* m1 = #C4, core::Map<core::int*, core::String*>* m2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+static method foo([core::Map<core::int*, core::String*>* m1 = #C3, core::Map<core::int*, core::String*>* m2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
                                                                               ^"]) → void {}
 static method test() → void {
@@ -157,6 +157,5 @@
 constants  {
   #C1 = 1
   #C2 = "hello"
-  #C3 = <dynamic>[#C1, #C2]
-  #C4 = core::_ImmutableMap<core::int*, core::String*> {_kvPairs:#C3}
+  #C3 = <core::int*, core::String*>{#C1:#C2)
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.transformed.expect
index 2126542..ab58333 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.transformed.expect
@@ -75,7 +75,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::Map<core::int*, core::String*>* m1 = #C4, core::Map<core::int*, core::String*>* m2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+static method foo([core::Map<core::int*, core::String*>* m1 = #C3, core::Map<core::int*, core::String*>* m2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
                                                                               ^"]) → void {}
 static method test() → void {
@@ -157,6 +157,5 @@
 constants  {
   #C1 = 1
   #C2 = "hello"
-  #C3 = <dynamic>[#C1, #C2]
-  #C4 = core::_ImmutableMap<core::int*, core::String*> {_kvPairs:#C3}
+  #C3 = <core::int*, core::String*>{#C1:#C2)
 }
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.expect
index 43b73f6..79f586d 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -59,9 +59,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
index 29a6f55..fa70fa8 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
@@ -44,11 +44,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
index fb0fe5f..ebbb28f 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
@@ -27,9 +27,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -214,9 +214,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect
index 251ec40..8f3643d 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -59,9 +59,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
index 36ab6a8..3331b4b 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
@@ -44,11 +44,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
index 4713e78..15051a3 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
@@ -27,9 +27,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -214,9 +214,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect
index 7eca3d0..d9cb030 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -59,9 +59,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
index e35da6b..92505c9 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
@@ -44,11 +44,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
index 525da31..368ce6e 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
@@ -27,9 +27,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -214,9 +214,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect
index 37e0e62..c491abd 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -59,9 +59,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
index 5908716..0d4b044 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
@@ -44,11 +44,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
index 2f0c903..d176677 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
@@ -27,9 +27,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -214,9 +214,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect
index 1917e07..aa3d05d 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -59,9 +59,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
index b699b6c..cd0922d 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
@@ -44,11 +44,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
index c03423b..318e683 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
@@ -27,9 +27,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -214,9 +214,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect
index fa683c126..75d2f5d 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -59,9 +59,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
index d9c4871..6a4d2fb 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
@@ -44,11 +44,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
index ab76385..f4dfb05 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
@@ -27,9 +27,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -214,9 +214,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.expect
index 484270e..fb4378d 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -51,9 +51,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
index cfacce7..0a27a6a 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
@@ -44,11 +44,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
index 2c0fd45..5d7a1fe 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
@@ -27,9 +27,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -113,9 +113,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.expect
index 5052927..d864eac8 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -51,9 +51,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
index 7eb99be..27a58a7 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
@@ -44,11 +44,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
index ada0903..f202144 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
@@ -27,9 +27,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -113,9 +113,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.expect
index 01ac303..11b99b2 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -51,9 +51,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
index 3b812af..eaab4f9 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
@@ -44,11 +44,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
index 057adde..b438010 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
@@ -27,9 +27,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -113,9 +113,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.expect
index 9f0633d..83476f3 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -51,9 +51,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
index 2d775ff..813047c 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
@@ -44,11 +44,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
index fd4b819..82dc7e6 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
@@ -27,9 +27,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -113,9 +113,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.expect
index 41958f4..d4f206c 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -51,9 +51,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
index 3026114..61887ea 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
@@ -44,11 +44,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
index 6e05707..834a83a 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
@@ -27,9 +27,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -113,9 +113,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.expect
index 8446ce804..57630d1 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -51,9 +51,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
index cd341f3..d6ba05d 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
@@ -44,11 +44,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
index 1968cbf..d4996b3 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
@@ -27,9 +27,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -113,9 +113,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.expect
index da7400e..3a30b28 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -51,9 +51,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
index ffd3fdd..06ec4a9 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
@@ -44,11 +44,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
index 077bfa1..2813500 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
@@ -27,9 +27,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -114,9 +114,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect
index b63576e..869eafa 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect
@@ -35,9 +35,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -59,9 +59,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
index 64672a6..b978e12 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
@@ -44,11 +44,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect
index 8b4ba4e..7d2c4a1 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect
@@ -35,9 +35,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -59,9 +59,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect
index 0804da7..4df6e43 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect
@@ -34,9 +34,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -57,9 +57,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
index cc0154e..44a136e 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
@@ -44,11 +44,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect
index 88d7620..6d60a7f 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect
@@ -34,9 +34,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -57,9 +57,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect
index 4fe0984..6c6c9b4 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect
@@ -34,9 +34,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -58,9 +58,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
index 0108d81..7c4a996 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
@@ -46,11 +46,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect
index 9fc4067..b8c4c7b 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect
@@ -34,9 +34,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -58,9 +58,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.expect
index aacd7bb..fbdcf12 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -49,9 +49,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
index 2a73d70..0da1c68 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
@@ -48,11 +48,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
index 57fa2ef..0e7e9a1 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -122,9 +122,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.expect
index dbfb2e6..60b288f 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -49,9 +49,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
index 547c415..0756964 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
@@ -48,11 +48,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
index 64fb6a3..3a793fb 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -122,9 +122,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
index 93b6668..d5fb637 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
@@ -33,9 +33,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -58,9 +58,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
index 2a918af..e7977c8 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
@@ -49,11 +49,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
index ad8c05c..03222bb 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
@@ -33,9 +33,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -106,9 +106,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect
index 10efb8a..f725158 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -49,9 +49,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
index cf32cfb..0f19da5 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
@@ -49,11 +49,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
index d88b25c..e855582 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -97,9 +97,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
index f9bf75b..85616d6 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
@@ -33,9 +33,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -58,9 +58,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
index e4e19d0..d2c02c7 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
@@ -49,11 +49,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
index 0aabd95..b99e170 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
@@ -33,9 +33,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -106,9 +106,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect
index 4ab8890..0691134 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -49,9 +49,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
index 7a5d3d7..a75836f 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
@@ -49,11 +49,11 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> SymbolConstant(#onTimeout)
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
index efad60a..35fb5f2 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
@@ -26,9 +26,9 @@
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
@@ -97,9 +97,9 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
   #C9 = #timeout
   #C10 = #onTimeout
 }
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.expect b/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.expect
index beb0961..388292d 100644
--- a/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.expect
@@ -20,11 +20,11 @@
   get v6() → core::List<(self::Foo::T*) →* self::Foo::T*>*
     return #C6;
   get v7() → core::Map<self::Foo::T*, self::Foo::T*>*
-    return #C8;
+    return #C7;
   get v8() → core::Map<(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>*
-    return #C9;
+    return #C8;
   get v9() → core::Map<self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>*
-    return #C10;
+    return #C9;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -60,10 +60,9 @@
   #C4 = self::Bar<((Null) →* core::Object*) →* Null> {}
   #C5 = <Null>[]
   #C6 = <(core::Object*) →* Null>[]
-  #C7 = <dynamic>[]
-  #C8 = core::_ImmutableMap<Null, Null> {_kvPairs:#C7}
-  #C9 = core::_ImmutableMap<(core::Object*) →* Null, Null> {_kvPairs:#C7}
-  #C10 = core::_ImmutableMap<Null, (core::Object*) →* Null> {_kvPairs:#C7}
+  #C7 = <Null, Null>{)
+  #C8 = <(core::Object*) →* Null, Null>{)
+  #C9 = <Null, (core::Object*) →* Null>{)
 }
 
 
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.transformed.expect
index beb0961..388292d 100644
--- a/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.transformed.expect
@@ -20,11 +20,11 @@
   get v6() → core::List<(self::Foo::T*) →* self::Foo::T*>*
     return #C6;
   get v7() → core::Map<self::Foo::T*, self::Foo::T*>*
-    return #C8;
+    return #C7;
   get v8() → core::Map<(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>*
-    return #C9;
+    return #C8;
   get v9() → core::Map<self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>*
-    return #C10;
+    return #C9;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -60,10 +60,9 @@
   #C4 = self::Bar<((Null) →* core::Object*) →* Null> {}
   #C5 = <Null>[]
   #C6 = <(core::Object*) →* Null>[]
-  #C7 = <dynamic>[]
-  #C8 = core::_ImmutableMap<Null, Null> {_kvPairs:#C7}
-  #C9 = core::_ImmutableMap<(core::Object*) →* Null, Null> {_kvPairs:#C7}
-  #C10 = core::_ImmutableMap<Null, (core::Object*) →* Null> {_kvPairs:#C7}
+  #C7 = <Null, Null>{)
+  #C8 = <(core::Object*) →* Null, Null>{)
+  #C9 = <Null, (core::Object*) →* Null>{)
 }
 
 
diff --git a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.expect
index f4a96a9..de82c1f 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.expect
@@ -44,6 +44,6 @@
   #C1 = #org-dartlang-testcase:///issue41436c.dart::_#A#x
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #org-dartlang-testcase:///issue41436c.dart::_#A#x=
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.transformed.expect
index 2a07753..3487b8a 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.transformed.expect
@@ -44,6 +44,6 @@
   #C1 = #org-dartlang-testcase:///issue41436c.dart::_#A#x
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #org-dartlang-testcase:///issue41436c.dart::_#A#x=
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.expect
index 963d836..105770f 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.expect
@@ -51,7 +51,7 @@
   #C1 = #org-dartlang-testcase:///issue41436c.dart::_#A#x#isSet
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #org-dartlang-testcase:///issue41436c.dart::_#A#x
   #C6 = #org-dartlang-testcase:///issue41436c.dart::_#A#x#isSet=
   #C7 = #org-dartlang-testcase:///issue41436c.dart::_#A#x=
diff --git a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.outline.expect
index 4f3a9d5..d7ce4ef 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.outline.expect
@@ -43,15 +43,15 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> SymbolConstant(#_#A#x#isSet)
 Evaluated: ListLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> SymbolConstant(#_#A#x)
 Evaluated: ListLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> SymbolConstant(#_#A#x#isSet=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> SymbolConstant(#_#A#x=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 38, effectively constant: 14
diff --git a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.transformed.expect
index 3f54bd2..d06c920 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.transformed.expect
@@ -51,7 +51,7 @@
   #C1 = #org-dartlang-testcase:///issue41436c.dart::_#A#x#isSet
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #org-dartlang-testcase:///issue41436c.dart::_#A#x
   #C6 = #org-dartlang-testcase:///issue41436c.dart::_#A#x#isSet=
   #C7 = #org-dartlang-testcase:///issue41436c.dart::_#A#x=
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.strong.expect b/pkg/front_end/testcases/nnbd/constants.dart.strong.expect
index 70ed240..5ea885d 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.strong.expect
@@ -13,22 +13,22 @@
 static const field core::Type functionTypeLiteral = #C6;
 static const field core::Type genericFunctionTypeLiteral = #C7;
 static const field core::List<core::int> listLiteral = #C8;
-static const field core::Set<core::int> setLiteral = #C12;
-static const field core::Map<core::int, core::String> mapLiteral = #C15;
+static const field core::Set<core::int> setLiteral = #C9;
+static const field core::Map<core::int, core::String> mapLiteral = #C11;
 static const field core::List<core::int> listConcatenation = #C8;
-static const field core::Set<core::int> setConcatenation = #C12;
-static const field core::Map<core::int, core::String> mapConcatenation = #C15;
-static const field core::bool objectTypeLiteralIdentical = #C16;
-static const field core::bool partialInstantiationIdentical = #C16;
-static const field core::bool instanceIdentical = #C16;
-static const field core::bool functionTypeLiteralIdentical = #C16;
-static const field core::bool genericFunctionTypeLiteralIdentical = #C16;
-static const field core::bool listLiteralIdentical = #C16;
-static const field core::bool setLiteralIdentical = #C16;
-static const field core::bool mapLiteralIdentical = #C16;
-static const field core::bool listConcatenationIdentical = #C16;
-static const field core::bool setConcatenationIdentical = #C16;
-static const field core::bool mapConcatenationIdentical = #C16;
+static const field core::Set<core::int> setConcatenation = #C9;
+static const field core::Map<core::int, core::String> mapConcatenation = #C11;
+static const field core::bool objectTypeLiteralIdentical = #C12;
+static const field core::bool partialInstantiationIdentical = #C12;
+static const field core::bool instanceIdentical = #C12;
+static const field core::bool functionTypeLiteralIdentical = #C12;
+static const field core::bool genericFunctionTypeLiteralIdentical = #C12;
+static const field core::bool listLiteralIdentical = #C12;
+static const field core::bool setLiteralIdentical = #C12;
+static const field core::bool mapLiteralIdentical = #C12;
+static const field core::bool listConcatenationIdentical = #C12;
+static const field core::bool setConcatenationIdentical = #C12;
+static const field core::bool mapConcatenationIdentical = #C12;
 static method main() → dynamic {
   self::test(#C1, #C1);
   self::test(#C3, #C3);
@@ -36,22 +36,22 @@
   self::test(#C6, #C6);
   self::test(#C7, #C7);
   self::test(#C8, #C8);
-  self::test(#C12, #C12);
-  self::test(#C15, #C15);
+  self::test(#C9, #C9);
+  self::test(#C11, #C11);
   self::test(#C8, #C8);
-  self::test(#C12, #C12);
-  self::test(#C15, #C15);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
+  self::test(#C9, #C9);
+  self::test(#C11, #C11);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
 }
 static method test(dynamic expected, dynamic actual) → dynamic {
   core::print("test(${expected}, ${actual})");
@@ -73,17 +73,17 @@
     ;
 }
 static const field core::Type objectTypeLiteral = #C1;
-static const field (core::Object?, core::Object?) → core::bool c2 = #C17;
+static const field (core::Object?, core::Object?) → core::bool c2 = #C13;
 static const field (core::int) → core::int partialInstantiation = #C3;
 static const field con::Class<core::int> instance = #C5;
 static const field core::Type functionTypeLiteral = #C6;
 static const field core::Type genericFunctionTypeLiteral = #C7;
 static const field core::List<core::int> listLiteral = #C8;
-static const field core::Set<core::int> setLiteral = #C12;
-static const field core::Map<core::int, core::String> mapLiteral = #C15;
+static const field core::Set<core::int> setLiteral = #C9;
+static const field core::Map<core::int, core::String> mapLiteral = #C11;
 static const field core::List<core::int> listConcatenation = #C8;
-static const field core::Set<core::int> setConcatenation = #C12;
-static const field core::Map<core::int, core::String> mapConcatenation = #C15;
+static const field core::Set<core::int> setConcatenation = #C9;
+static const field core::Map<core::int, core::String> mapConcatenation = #C11;
 static method id<T extends core::Object? = dynamic>(con::id::T% t) → con::id::T%
   return t;
 
@@ -96,15 +96,11 @@
   #C6 = TypeLiteralConstant((dynamic) → dynamic)
   #C7 = TypeLiteralConstant(<T extends core::Object? = dynamic>(T%) → T%)
   #C8 = <core::int>[#C4]
-  #C9 = null
-  #C10 = <dynamic>[#C4, #C9]
-  #C11 = core::_ImmutableMap<core::int, Null> {_kvPairs:#C10}
-  #C12 = col::_UnmodifiableSet<core::int> {_map:#C11}
-  #C13 = "foo"
-  #C14 = <dynamic>[#C4, #C13]
-  #C15 = core::_ImmutableMap<core::int, core::String> {_kvPairs:#C14}
-  #C16 = true
-  #C17 = static-tearoff core::identical
+  #C9 = <core::int>{#C4}
+  #C10 = "foo"
+  #C11 = <core::int, core::String>{#C4:#C10)
+  #C12 = true
+  #C13 = static-tearoff core::identical
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect
index 70ed240..5ea885d 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect
@@ -13,22 +13,22 @@
 static const field core::Type functionTypeLiteral = #C6;
 static const field core::Type genericFunctionTypeLiteral = #C7;
 static const field core::List<core::int> listLiteral = #C8;
-static const field core::Set<core::int> setLiteral = #C12;
-static const field core::Map<core::int, core::String> mapLiteral = #C15;
+static const field core::Set<core::int> setLiteral = #C9;
+static const field core::Map<core::int, core::String> mapLiteral = #C11;
 static const field core::List<core::int> listConcatenation = #C8;
-static const field core::Set<core::int> setConcatenation = #C12;
-static const field core::Map<core::int, core::String> mapConcatenation = #C15;
-static const field core::bool objectTypeLiteralIdentical = #C16;
-static const field core::bool partialInstantiationIdentical = #C16;
-static const field core::bool instanceIdentical = #C16;
-static const field core::bool functionTypeLiteralIdentical = #C16;
-static const field core::bool genericFunctionTypeLiteralIdentical = #C16;
-static const field core::bool listLiteralIdentical = #C16;
-static const field core::bool setLiteralIdentical = #C16;
-static const field core::bool mapLiteralIdentical = #C16;
-static const field core::bool listConcatenationIdentical = #C16;
-static const field core::bool setConcatenationIdentical = #C16;
-static const field core::bool mapConcatenationIdentical = #C16;
+static const field core::Set<core::int> setConcatenation = #C9;
+static const field core::Map<core::int, core::String> mapConcatenation = #C11;
+static const field core::bool objectTypeLiteralIdentical = #C12;
+static const field core::bool partialInstantiationIdentical = #C12;
+static const field core::bool instanceIdentical = #C12;
+static const field core::bool functionTypeLiteralIdentical = #C12;
+static const field core::bool genericFunctionTypeLiteralIdentical = #C12;
+static const field core::bool listLiteralIdentical = #C12;
+static const field core::bool setLiteralIdentical = #C12;
+static const field core::bool mapLiteralIdentical = #C12;
+static const field core::bool listConcatenationIdentical = #C12;
+static const field core::bool setConcatenationIdentical = #C12;
+static const field core::bool mapConcatenationIdentical = #C12;
 static method main() → dynamic {
   self::test(#C1, #C1);
   self::test(#C3, #C3);
@@ -36,22 +36,22 @@
   self::test(#C6, #C6);
   self::test(#C7, #C7);
   self::test(#C8, #C8);
-  self::test(#C12, #C12);
-  self::test(#C15, #C15);
+  self::test(#C9, #C9);
+  self::test(#C11, #C11);
   self::test(#C8, #C8);
-  self::test(#C12, #C12);
-  self::test(#C15, #C15);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
+  self::test(#C9, #C9);
+  self::test(#C11, #C11);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
 }
 static method test(dynamic expected, dynamic actual) → dynamic {
   core::print("test(${expected}, ${actual})");
@@ -73,17 +73,17 @@
     ;
 }
 static const field core::Type objectTypeLiteral = #C1;
-static const field (core::Object?, core::Object?) → core::bool c2 = #C17;
+static const field (core::Object?, core::Object?) → core::bool c2 = #C13;
 static const field (core::int) → core::int partialInstantiation = #C3;
 static const field con::Class<core::int> instance = #C5;
 static const field core::Type functionTypeLiteral = #C6;
 static const field core::Type genericFunctionTypeLiteral = #C7;
 static const field core::List<core::int> listLiteral = #C8;
-static const field core::Set<core::int> setLiteral = #C12;
-static const field core::Map<core::int, core::String> mapLiteral = #C15;
+static const field core::Set<core::int> setLiteral = #C9;
+static const field core::Map<core::int, core::String> mapLiteral = #C11;
 static const field core::List<core::int> listConcatenation = #C8;
-static const field core::Set<core::int> setConcatenation = #C12;
-static const field core::Map<core::int, core::String> mapConcatenation = #C15;
+static const field core::Set<core::int> setConcatenation = #C9;
+static const field core::Map<core::int, core::String> mapConcatenation = #C11;
 static method id<T extends core::Object? = dynamic>(con::id::T% t) → con::id::T%
   return t;
 
@@ -96,15 +96,11 @@
   #C6 = TypeLiteralConstant((dynamic) → dynamic)
   #C7 = TypeLiteralConstant(<T extends core::Object? = dynamic>(T%) → T%)
   #C8 = <core::int>[#C4]
-  #C9 = null
-  #C10 = <dynamic>[#C4, #C9]
-  #C11 = core::_ImmutableMap<core::int, Null> {_kvPairs:#C10}
-  #C12 = col::_UnmodifiableSet<core::int> {_map:#C11}
-  #C13 = "foo"
-  #C14 = <dynamic>[#C4, #C13]
-  #C15 = core::_ImmutableMap<core::int, core::String> {_kvPairs:#C14}
-  #C16 = true
-  #C17 = static-tearoff core::identical
+  #C9 = <core::int>{#C4}
+  #C10 = "foo"
+  #C11 = <core::int, core::String>{#C4:#C10)
+  #C12 = true
+  #C13 = static-tearoff core::identical
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.weak.expect b/pkg/front_end/testcases/nnbd/constants.dart.weak.expect
index b26ca6d..17a63c7 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.weak.expect
@@ -13,22 +13,22 @@
 static const field core::Type functionTypeLiteral = #C6;
 static const field core::Type genericFunctionTypeLiteral = #C7;
 static const field core::List<core::int> listLiteral = #C8;
-static const field core::Set<core::int> setLiteral = #C12;
-static const field core::Map<core::int, core::String> mapLiteral = #C15;
+static const field core::Set<core::int> setLiteral = #C9;
+static const field core::Map<core::int, core::String> mapLiteral = #C11;
 static const field core::List<core::int> listConcatenation = #C8;
-static const field core::Set<core::int> setConcatenation = #C12;
-static const field core::Map<core::int, core::String> mapConcatenation = #C15;
-static const field core::bool objectTypeLiteralIdentical = #C16;
-static const field core::bool partialInstantiationIdentical = #C16;
-static const field core::bool instanceIdentical = #C16;
-static const field core::bool functionTypeLiteralIdentical = #C16;
-static const field core::bool genericFunctionTypeLiteralIdentical = #C16;
-static const field core::bool listLiteralIdentical = #C16;
-static const field core::bool setLiteralIdentical = #C16;
-static const field core::bool mapLiteralIdentical = #C16;
-static const field core::bool listConcatenationIdentical = #C16;
-static const field core::bool setConcatenationIdentical = #C16;
-static const field core::bool mapConcatenationIdentical = #C16;
+static const field core::Set<core::int> setConcatenation = #C9;
+static const field core::Map<core::int, core::String> mapConcatenation = #C11;
+static const field core::bool objectTypeLiteralIdentical = #C12;
+static const field core::bool partialInstantiationIdentical = #C12;
+static const field core::bool instanceIdentical = #C12;
+static const field core::bool functionTypeLiteralIdentical = #C12;
+static const field core::bool genericFunctionTypeLiteralIdentical = #C12;
+static const field core::bool listLiteralIdentical = #C12;
+static const field core::bool setLiteralIdentical = #C12;
+static const field core::bool mapLiteralIdentical = #C12;
+static const field core::bool listConcatenationIdentical = #C12;
+static const field core::bool setConcatenationIdentical = #C12;
+static const field core::bool mapConcatenationIdentical = #C12;
 static method main() → dynamic {
   self::test(#C1, #C1);
   self::test(#C3, #C3);
@@ -36,22 +36,22 @@
   self::test(#C6, #C6);
   self::test(#C7, #C7);
   self::test(#C8, #C8);
-  self::test(#C12, #C12);
-  self::test(#C15, #C15);
+  self::test(#C9, #C9);
+  self::test(#C11, #C11);
   self::test(#C8, #C8);
-  self::test(#C12, #C12);
-  self::test(#C15, #C15);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
+  self::test(#C9, #C9);
+  self::test(#C11, #C11);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
 }
 static method test(dynamic expected, dynamic actual) → dynamic {
   core::print("test(${expected}, ${actual})");
@@ -73,17 +73,17 @@
     ;
 }
 static const field core::Type objectTypeLiteral = #C1;
-static const field (core::Object?, core::Object?) → core::bool c2 = #C17;
+static const field (core::Object?, core::Object?) → core::bool c2 = #C13;
 static const field (core::int) → core::int partialInstantiation = #C3;
 static const field con::Class<core::int> instance = #C5;
 static const field core::Type functionTypeLiteral = #C6;
 static const field core::Type genericFunctionTypeLiteral = #C7;
 static const field core::List<core::int> listLiteral = #C8;
-static const field core::Set<core::int> setLiteral = #C12;
-static const field core::Map<core::int, core::String> mapLiteral = #C15;
+static const field core::Set<core::int> setLiteral = #C9;
+static const field core::Map<core::int, core::String> mapLiteral = #C11;
 static const field core::List<core::int> listConcatenation = #C8;
-static const field core::Set<core::int> setConcatenation = #C12;
-static const field core::Map<core::int, core::String> mapConcatenation = #C15;
+static const field core::Set<core::int> setConcatenation = #C9;
+static const field core::Map<core::int, core::String> mapConcatenation = #C11;
 static method id<T extends core::Object? = dynamic>(con::id::T% t) → con::id::T%
   return t;
 
@@ -96,15 +96,11 @@
   #C6 = TypeLiteralConstant((dynamic) →* dynamic)
   #C7 = TypeLiteralConstant(<T extends core::Object? = dynamic>(T*) →* T*)
   #C8 = <core::int*>[#C4]
-  #C9 = null
-  #C10 = <dynamic>[#C4, #C9]
-  #C11 = core::_ImmutableMap<core::int*, Null> {_kvPairs:#C10}
-  #C12 = col::_UnmodifiableSet<core::int*> {_map:#C11}
-  #C13 = "foo"
-  #C14 = <dynamic>[#C4, #C13]
-  #C15 = core::_ImmutableMap<core::int*, core::String*> {_kvPairs:#C14}
-  #C16 = true
-  #C17 = static-tearoff core::identical
+  #C9 = <core::int*>{#C4}
+  #C10 = "foo"
+  #C11 = <core::int*, core::String*>{#C4:#C10)
+  #C12 = true
+  #C13 = static-tearoff core::identical
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/constants.dart.weak.outline.expect
index 1d425f6..5c642d9 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.weak.outline.expect
@@ -69,11 +69,11 @@
 Evaluated: TypeLiteral @ org-dartlang-testcase:///constants.dart:13:29 -> TypeLiteralConstant(dynamic Function(dynamic)*)
 Evaluated: TypeLiteral @ org-dartlang-testcase:///constants.dart:14:36 -> TypeLiteralConstant(T* Function<T>(T*)*)
 Evaluated: ListLiteral @ org-dartlang-testcase:///constants.dart:15:26 -> ListConstant(const <int*>[0])
-Evaluated: SetLiteral @ org-dartlang-testcase:///constants.dart:16:25 -> InstanceConstant(const _UnmodifiableSet<int*>{_UnmodifiableSet._map: const _ImmutableMap<int*, Null>{_ImmutableMap._kvPairs: const <dynamic>[0, null]}})
-Evaluated: MapLiteral @ org-dartlang-testcase:///constants.dart:17:33 -> InstanceConstant(const _ImmutableMap<int*, String*>{_ImmutableMap._kvPairs: const <dynamic>[0, "foo"]})
+Evaluated: SetLiteral @ org-dartlang-testcase:///constants.dart:16:25 -> SetConstant(const <int*>{0})
+Evaluated: MapLiteral @ org-dartlang-testcase:///constants.dart:17:33 -> MapConstant(const <int*, String*>{0: "foo"})
 Evaluated: ListConcatenation @ org-dartlang-testcase:///constants.dart:18:32 -> ListConstant(const <int*>[0])
-Evaluated: SetConcatenation @ org-dartlang-testcase:///constants.dart:19:31 -> InstanceConstant(const _UnmodifiableSet<int*>{_UnmodifiableSet._map: const _ImmutableMap<int*, Null>{_ImmutableMap._kvPairs: const <dynamic>[0, null]}})
-Evaluated: MapConcatenation @ org-dartlang-testcase:///constants.dart:20:7 -> InstanceConstant(const _ImmutableMap<int*, String*>{_ImmutableMap._kvPairs: const <dynamic>[0, "foo"]})
+Evaluated: SetConcatenation @ org-dartlang-testcase:///constants.dart:19:31 -> SetConstant(const <int*>{0})
+Evaluated: MapConcatenation @ org-dartlang-testcase:///constants.dart:20:7 -> MapConstant(const <int*, String*>{0: "foo"})
 Evaluated: StaticInvocation @ org-dartlang-testcase:///constants.dart:23:5 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///constants.dart:25:5 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///constants.dart:26:27 -> BoolConstant(true)
@@ -92,9 +92,9 @@
 Evaluated: TypeLiteral @ org-dartlang-testcase:///constants_lib.dart:20:29 -> TypeLiteralConstant(dynamic Function(dynamic)*)
 Evaluated: TypeLiteral @ org-dartlang-testcase:///constants_lib.dart:21:36 -> TypeLiteralConstant(T* Function<T>(T*)*)
 Evaluated: ListLiteral @ org-dartlang-testcase:///constants_lib.dart:22:26 -> ListConstant(const <int*>[0])
-Evaluated: SetLiteral @ org-dartlang-testcase:///constants_lib.dart:23:25 -> InstanceConstant(const _UnmodifiableSet<int*>{_UnmodifiableSet._map: const _ImmutableMap<int*, Null>{_ImmutableMap._kvPairs: const <dynamic>[0, null]}})
-Evaluated: MapLiteral @ org-dartlang-testcase:///constants_lib.dart:24:33 -> InstanceConstant(const _ImmutableMap<int*, String*>{_ImmutableMap._kvPairs: const <dynamic>[0, "foo"]})
+Evaluated: SetLiteral @ org-dartlang-testcase:///constants_lib.dart:23:25 -> SetConstant(const <int*>{0})
+Evaluated: MapLiteral @ org-dartlang-testcase:///constants_lib.dart:24:33 -> MapConstant(const <int*, String*>{0: "foo"})
 Evaluated: ListConcatenation @ org-dartlang-testcase:///constants_lib.dart:25:32 -> ListConstant(const <int*>[0])
-Evaluated: SetConcatenation @ org-dartlang-testcase:///constants_lib.dart:26:31 -> InstanceConstant(const _UnmodifiableSet<int*>{_UnmodifiableSet._map: const _ImmutableMap<int*, Null>{_ImmutableMap._kvPairs: const <dynamic>[0, null]}})
-Evaluated: MapConcatenation @ org-dartlang-testcase:///constants_lib.dart:27:7 -> InstanceConstant(const _ImmutableMap<int*, String*>{_ImmutableMap._kvPairs: const <dynamic>[0, "foo"]})
+Evaluated: SetConcatenation @ org-dartlang-testcase:///constants_lib.dart:26:31 -> SetConstant(const <int*>{0})
+Evaluated: MapConcatenation @ org-dartlang-testcase:///constants_lib.dart:27:7 -> MapConstant(const <int*, String*>{0: "foo"})
 Extra constant evaluation: evaluated: 35, effectively constant: 34
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect
index b26ca6d..17a63c7 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect
@@ -13,22 +13,22 @@
 static const field core::Type functionTypeLiteral = #C6;
 static const field core::Type genericFunctionTypeLiteral = #C7;
 static const field core::List<core::int> listLiteral = #C8;
-static const field core::Set<core::int> setLiteral = #C12;
-static const field core::Map<core::int, core::String> mapLiteral = #C15;
+static const field core::Set<core::int> setLiteral = #C9;
+static const field core::Map<core::int, core::String> mapLiteral = #C11;
 static const field core::List<core::int> listConcatenation = #C8;
-static const field core::Set<core::int> setConcatenation = #C12;
-static const field core::Map<core::int, core::String> mapConcatenation = #C15;
-static const field core::bool objectTypeLiteralIdentical = #C16;
-static const field core::bool partialInstantiationIdentical = #C16;
-static const field core::bool instanceIdentical = #C16;
-static const field core::bool functionTypeLiteralIdentical = #C16;
-static const field core::bool genericFunctionTypeLiteralIdentical = #C16;
-static const field core::bool listLiteralIdentical = #C16;
-static const field core::bool setLiteralIdentical = #C16;
-static const field core::bool mapLiteralIdentical = #C16;
-static const field core::bool listConcatenationIdentical = #C16;
-static const field core::bool setConcatenationIdentical = #C16;
-static const field core::bool mapConcatenationIdentical = #C16;
+static const field core::Set<core::int> setConcatenation = #C9;
+static const field core::Map<core::int, core::String> mapConcatenation = #C11;
+static const field core::bool objectTypeLiteralIdentical = #C12;
+static const field core::bool partialInstantiationIdentical = #C12;
+static const field core::bool instanceIdentical = #C12;
+static const field core::bool functionTypeLiteralIdentical = #C12;
+static const field core::bool genericFunctionTypeLiteralIdentical = #C12;
+static const field core::bool listLiteralIdentical = #C12;
+static const field core::bool setLiteralIdentical = #C12;
+static const field core::bool mapLiteralIdentical = #C12;
+static const field core::bool listConcatenationIdentical = #C12;
+static const field core::bool setConcatenationIdentical = #C12;
+static const field core::bool mapConcatenationIdentical = #C12;
 static method main() → dynamic {
   self::test(#C1, #C1);
   self::test(#C3, #C3);
@@ -36,22 +36,22 @@
   self::test(#C6, #C6);
   self::test(#C7, #C7);
   self::test(#C8, #C8);
-  self::test(#C12, #C12);
-  self::test(#C15, #C15);
+  self::test(#C9, #C9);
+  self::test(#C11, #C11);
   self::test(#C8, #C8);
-  self::test(#C12, #C12);
-  self::test(#C15, #C15);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
-  self::test(true, #C16);
+  self::test(#C9, #C9);
+  self::test(#C11, #C11);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
 }
 static method test(dynamic expected, dynamic actual) → dynamic {
   core::print("test(${expected}, ${actual})");
@@ -73,17 +73,17 @@
     ;
 }
 static const field core::Type objectTypeLiteral = #C1;
-static const field (core::Object?, core::Object?) → core::bool c2 = #C17;
+static const field (core::Object?, core::Object?) → core::bool c2 = #C13;
 static const field (core::int) → core::int partialInstantiation = #C3;
 static const field con::Class<core::int> instance = #C5;
 static const field core::Type functionTypeLiteral = #C6;
 static const field core::Type genericFunctionTypeLiteral = #C7;
 static const field core::List<core::int> listLiteral = #C8;
-static const field core::Set<core::int> setLiteral = #C12;
-static const field core::Map<core::int, core::String> mapLiteral = #C15;
+static const field core::Set<core::int> setLiteral = #C9;
+static const field core::Map<core::int, core::String> mapLiteral = #C11;
 static const field core::List<core::int> listConcatenation = #C8;
-static const field core::Set<core::int> setConcatenation = #C12;
-static const field core::Map<core::int, core::String> mapConcatenation = #C15;
+static const field core::Set<core::int> setConcatenation = #C9;
+static const field core::Map<core::int, core::String> mapConcatenation = #C11;
 static method id<T extends core::Object? = dynamic>(con::id::T% t) → con::id::T%
   return t;
 
@@ -96,15 +96,11 @@
   #C6 = TypeLiteralConstant((dynamic) →* dynamic)
   #C7 = TypeLiteralConstant(<T extends core::Object? = dynamic>(T*) →* T*)
   #C8 = <core::int*>[#C4]
-  #C9 = null
-  #C10 = <dynamic>[#C4, #C9]
-  #C11 = core::_ImmutableMap<core::int*, Null> {_kvPairs:#C10}
-  #C12 = col::_UnmodifiableSet<core::int*> {_map:#C11}
-  #C13 = "foo"
-  #C14 = <dynamic>[#C4, #C13]
-  #C15 = core::_ImmutableMap<core::int*, core::String*> {_kvPairs:#C14}
-  #C16 = true
-  #C17 = static-tearoff core::identical
+  #C9 = <core::int*>{#C4}
+  #C10 = "foo"
+  #C11 = <core::int*, core::String*>{#C4:#C10)
+  #C12 = true
+  #C13 = static-tearoff core::identical
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.strong.expect b/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.strong.expect
index e114f63..ffeac59 100644
--- a/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.strong.expect
@@ -5,8 +5,8 @@
 import "org-dartlang-testcase:///from_agnostic_lib.dart";
 
 static const field core::bool c1 = #C1;
-static const field core::Map<core::List<core::int?>, core::int> c2 = #C7;
-static const field core::Set<core::List<core::int?>> c3 = #C11;
+static const field core::Map<core::List<core::int?>, core::int> c2 = #C6;
+static const field core::Set<core::List<core::int?>> c3 = #C7;
 static const field core::List<core::int> c4 = #C2;
 static const field core::List<core::int?> c5 = #C4;
 static method main() → dynamic {
@@ -27,10 +27,6 @@
   #C3 = 0
   #C4 = <core::int?>[]
   #C5 = 1
-  #C6 = <dynamic>[#C2, #C3, #C4, #C5]
-  #C7 = core::_ImmutableMap<core::List<core::int?>, core::int> {_kvPairs:#C6}
-  #C8 = null
-  #C9 = <dynamic>[#C2, #C8, #C4, #C8]
-  #C10 = core::_ImmutableMap<core::List<core::int?>, Null> {_kvPairs:#C9}
-  #C11 = col::_UnmodifiableSet<core::List<core::int?>> {_map:#C10}
+  #C6 = <core::List<core::int?>, core::int>{#C2:#C3, #C4:#C5)
+  #C7 = <core::List<core::int?>>{#C2, #C4}
 }
diff --git a/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.strong.transformed.expect
index e114f63..ffeac59 100644
--- a/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.strong.transformed.expect
@@ -5,8 +5,8 @@
 import "org-dartlang-testcase:///from_agnostic_lib.dart";
 
 static const field core::bool c1 = #C1;
-static const field core::Map<core::List<core::int?>, core::int> c2 = #C7;
-static const field core::Set<core::List<core::int?>> c3 = #C11;
+static const field core::Map<core::List<core::int?>, core::int> c2 = #C6;
+static const field core::Set<core::List<core::int?>> c3 = #C7;
 static const field core::List<core::int> c4 = #C2;
 static const field core::List<core::int?> c5 = #C4;
 static method main() → dynamic {
@@ -27,10 +27,6 @@
   #C3 = 0
   #C4 = <core::int?>[]
   #C5 = 1
-  #C6 = <dynamic>[#C2, #C3, #C4, #C5]
-  #C7 = core::_ImmutableMap<core::List<core::int?>, core::int> {_kvPairs:#C6}
-  #C8 = null
-  #C9 = <dynamic>[#C2, #C8, #C4, #C8]
-  #C10 = core::_ImmutableMap<core::List<core::int?>, Null> {_kvPairs:#C9}
-  #C11 = col::_UnmodifiableSet<core::List<core::int?>> {_map:#C10}
+  #C6 = <core::List<core::int?>, core::int>{#C2:#C3, #C4:#C5)
+  #C7 = <core::List<core::int?>>{#C2, #C4}
 }
diff --git a/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.weak.expect b/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.weak.expect
index f526302..0c2cc88 100644
--- a/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.weak.expect
@@ -5,8 +5,8 @@
 import "org-dartlang-testcase:///from_agnostic_lib.dart";
 
 static const field core::bool c1 = #C1;
-static const field core::Map<core::List<core::int?>, core::int> c2 = #C7;
-static const field core::Set<core::List<core::int?>> c3 = #C11;
+static const field core::Map<core::List<core::int?>, core::int> c2 = #C6;
+static const field core::Set<core::List<core::int?>> c3 = #C7;
 static const field core::List<core::int> c4 = #C2;
 static const field core::List<core::int?> c5 = #C4;
 static method main() → dynamic {
@@ -18,7 +18,7 @@
 import self as self2;
 import "dart:core" as core;
 
-static const field core::List<core::int> a = #C12;
+static const field core::List<core::int> a = #C8;
 static const field core::List<core::int?> b = #C4;
 
 constants  {
@@ -27,11 +27,7 @@
   #C3 = 0
   #C4 = <core::int?>[]
   #C5 = 1
-  #C6 = <dynamic>[#C2, #C3, #C4, #C5]
-  #C7 = core::_ImmutableMap<core::List<core::int?>*, core::int*> {_kvPairs:#C6}
-  #C8 = null
-  #C9 = <dynamic>[#C2, #C8, #C4, #C8]
-  #C10 = core::_ImmutableMap<core::List<core::int?>*, Null> {_kvPairs:#C9}
-  #C11 = col::_UnmodifiableSet<core::List<core::int?>*> {_map:#C10}
-  #C12 = <core::int>[]
+  #C6 = <core::List<core::int?>*, core::int*>{#C2:#C3, #C4:#C5)
+  #C7 = <core::List<core::int?>*>{#C2, #C4}
+  #C8 = <core::int>[]
 }
diff --git a/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.weak.outline.expect
index afae808..6d9444e 100644
--- a/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.weak.outline.expect
@@ -27,8 +27,8 @@
 
 Extra constant evaluation status:
 Evaluated: StaticInvocation @ org-dartlang-testcase:///from_agnostic.dart:7:12 -> BoolConstant(false)
-Evaluated: MapLiteral @ org-dartlang-testcase:///from_agnostic.dart:8:12 -> InstanceConstant(const _ImmutableMap<List<int?>*, int*>{_ImmutableMap._kvPairs: const <dynamic>[const <int*>[], 0, const <int?>[], 1]})
-Evaluated: SetLiteral @ org-dartlang-testcase:///from_agnostic.dart:9:12 -> InstanceConstant(const _UnmodifiableSet<List<int?>*>{_UnmodifiableSet._map: const _ImmutableMap<List<int?>*, Null>{_ImmutableMap._kvPairs: const <dynamic>[const <int*>[], null, const <int?>[], null]}})
+Evaluated: MapLiteral @ org-dartlang-testcase:///from_agnostic.dart:8:12 -> MapConstant(const <List<int?>*, int*>{const <int*>[]: 0, const <int?>[]: 1})
+Evaluated: SetLiteral @ org-dartlang-testcase:///from_agnostic.dart:9:12 -> SetConstant(const <List<int?>*>{const <int*>[], const <int?>[]})
 Evaluated: StaticGet @ org-dartlang-testcase:///from_agnostic.dart:10:12 -> ListConstant(const <int*>[])
 Evaluated: StaticGet @ org-dartlang-testcase:///from_agnostic.dart:11:12 -> ListConstant(const <int?>[])
 Extra constant evaluation: evaluated: 5, effectively constant: 5
diff --git a/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.weak.transformed.expect
index f526302..0c2cc88 100644
--- a/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.weak.transformed.expect
@@ -5,8 +5,8 @@
 import "org-dartlang-testcase:///from_agnostic_lib.dart";
 
 static const field core::bool c1 = #C1;
-static const field core::Map<core::List<core::int?>, core::int> c2 = #C7;
-static const field core::Set<core::List<core::int?>> c3 = #C11;
+static const field core::Map<core::List<core::int?>, core::int> c2 = #C6;
+static const field core::Set<core::List<core::int?>> c3 = #C7;
 static const field core::List<core::int> c4 = #C2;
 static const field core::List<core::int?> c5 = #C4;
 static method main() → dynamic {
@@ -18,7 +18,7 @@
 import self as self2;
 import "dart:core" as core;
 
-static const field core::List<core::int> a = #C12;
+static const field core::List<core::int> a = #C8;
 static const field core::List<core::int?> b = #C4;
 
 constants  {
@@ -27,11 +27,7 @@
   #C3 = 0
   #C4 = <core::int?>[]
   #C5 = 1
-  #C6 = <dynamic>[#C2, #C3, #C4, #C5]
-  #C7 = core::_ImmutableMap<core::List<core::int?>*, core::int*> {_kvPairs:#C6}
-  #C8 = null
-  #C9 = <dynamic>[#C2, #C8, #C4, #C8]
-  #C10 = core::_ImmutableMap<core::List<core::int?>*, Null> {_kvPairs:#C9}
-  #C11 = col::_UnmodifiableSet<core::List<core::int?>*> {_map:#C10}
-  #C12 = <core::int>[]
+  #C6 = <core::List<core::int?>*, core::int*>{#C2:#C3, #C4:#C5)
+  #C7 = <core::List<core::int?>*>{#C2, #C4}
+  #C8 = <core::int>[]
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
index 8c2a328..2538d7e 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
@@ -29,13 +29,13 @@
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, core::List::unmodifiable<core::Type*>(<core::Type*>[self::Divergent::then::R%]), core::List::unmodifiable<dynamic>(<dynamic>[onValue]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C11: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, core::List::unmodifiable<core::Type*>(<core::Type*>[self::Divergent::then::R%]), core::List::unmodifiable<dynamic>(<dynamic>[onValue]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 0, #C3, #C12, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
 }
 static method test() → dynamic async {
   asy::Future<self::Divergent<self::Divergent<core::int>>> x = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
@@ -56,11 +56,11 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #timeout
-  #C9 = #onTimeout
-  #C10 = #then
-  #C11 = #onError
-  #C12 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #then
+  #C10 = #onError
+  #C11 = #asStream
+  #C12 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
index 204fd46..7003dff 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
@@ -29,13 +29,13 @@
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, core::List::unmodifiable<core::Type*>(core::_GrowableList::_literal1<core::Type*>(self::Divergent::then::R%)), core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onValue)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C11: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, core::List::unmodifiable<core::Type*>(core::_GrowableList::_literal1<core::Type*>(self::Divergent::then::R%)), core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onValue)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 0, #C3, #C12, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
 }
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
@@ -105,11 +105,11 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #timeout
-  #C9 = #onTimeout
-  #C10 = #then
-  #C11 = #onError
-  #C12 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #then
+  #C10 = #onError
+  #C11 = #asStream
+  #C12 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
index 8c2a328..2538d7e 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
@@ -29,13 +29,13 @@
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, core::List::unmodifiable<core::Type*>(<core::Type*>[self::Divergent::then::R%]), core::List::unmodifiable<dynamic>(<dynamic>[onValue]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C11: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, core::List::unmodifiable<core::Type*>(<core::Type*>[self::Divergent::then::R%]), core::List::unmodifiable<dynamic>(<dynamic>[onValue]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 0, #C3, #C12, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
 }
 static method test() → dynamic async {
   asy::Future<self::Divergent<self::Divergent<core::int>>> x = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
@@ -56,11 +56,11 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #timeout
-  #C9 = #onTimeout
-  #C10 = #then
-  #C11 = #onError
-  #C12 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #then
+  #C10 = #onError
+  #C11 = #asStream
+  #C12 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect
index dd671d9..9c67937 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect
@@ -33,7 +33,7 @@
 Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:639:13 -> SymbolConstant(#test)
 Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:675:13 -> SymbolConstant(#whenComplete)
 Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:675:13 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:675:13 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:675:13 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:698:13 -> SymbolConstant(#timeout)
 Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:698:13 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:698:13 -> SymbolConstant(#onTimeout)
@@ -42,5 +42,5 @@
 Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:684:13 -> SymbolConstant(#asStream)
 Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:684:13 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:684:13 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:684:13 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:684:13 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 61, effectively constant: 15
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
index 204fd46..7003dff 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
@@ -29,13 +29,13 @@
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, core::List::unmodifiable<core::Type*>(core::_GrowableList::_literal1<core::Type*>(self::Divergent::then::R%)), core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onValue)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C11: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, core::List::unmodifiable<core::Type*>(core::_GrowableList::_literal1<core::Type*>(self::Divergent::then::R%)), core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onValue)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 0, #C3, #C12, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
 }
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
@@ -105,11 +105,11 @@
   #C3 = <core::Type*>[]
   #C4 = #test
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #timeout
-  #C9 = #onTimeout
-  #C10 = #then
-  #C11 = #onError
-  #C12 = #asStream
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #then
+  #C10 = #onError
+  #C11 = #asStream
+  #C12 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.expect
index fc18272..b504950 100644
--- a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.expect
@@ -8,36 +8,36 @@
 static const field (core::int) → core::int partialInstantiation = #C2;
 static const field con::Class<core::int> instance = #C4;
 static const field core::List<core::int> listLiteral = #C5;
-static const field core::Set<core::int> setLiteral = #C9;
-static const field core::Map<core::int, core::String> mapLiteral = #C12;
+static const field core::Set<core::int> setLiteral = #C6;
+static const field core::Map<core::int, core::String> mapLiteral = #C8;
 static const field core::List<core::int> listConcatenation = #C5;
-static const field core::Set<core::int> setConcatenation = #C9;
-static const field core::Map<core::int, core::String> mapConcatenation = #C12;
-static const field core::bool partialInstantiationIdentical = #C13;
-static const field core::bool instanceIdentical = #C13;
-static const field core::bool listLiteralIdentical = #C13;
-static const field core::bool setLiteralIdentical = #C13;
-static const field core::bool mapLiteralIdentical = #C13;
-static const field core::bool listConcatenationIdentical = #C13;
-static const field core::bool setConcatenationIdentical = #C13;
-static const field core::bool mapConcatenationIdentical = #C13;
+static const field core::Set<core::int> setConcatenation = #C6;
+static const field core::Map<core::int, core::String> mapConcatenation = #C8;
+static const field core::bool partialInstantiationIdentical = #C9;
+static const field core::bool instanceIdentical = #C9;
+static const field core::bool listLiteralIdentical = #C9;
+static const field core::bool setLiteralIdentical = #C9;
+static const field core::bool mapLiteralIdentical = #C9;
+static const field core::bool listConcatenationIdentical = #C9;
+static const field core::bool setConcatenationIdentical = #C9;
+static const field core::bool mapConcatenationIdentical = #C9;
 static method main() → dynamic {
   self::test(#C2, #C2);
   self::test(#C4, #C4);
   self::test(#C5, #C5);
-  self::test(#C9, #C9);
-  self::test(#C12, #C12);
+  self::test(#C6, #C6);
+  self::test(#C8, #C8);
   self::test(#C5, #C5);
-  self::test(#C9, #C9);
-  self::test(#C12, #C12);
-  self::test(true, #C13);
-  self::test(true, #C13);
-  self::test(true, #C13);
-  self::test(true, #C13);
-  self::test(true, #C13);
-  self::test(true, #C13);
-  self::test(true, #C13);
-  self::test(true, #C13);
+  self::test(#C6, #C6);
+  self::test(#C8, #C8);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
 }
 static method test(dynamic expected, dynamic actual) → dynamic {
   core::print("test(${expected}, ${actual})");
@@ -68,15 +68,15 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field (core::Object*, core::Object*) →* core::bool* c2 = #C14;
+static const field (core::Object*, core::Object*) →* core::bool* c2 = #C10;
 static const field (core::int*) →* core::int* partialInstantiation = #C2;
 static const field con::Class<core::int*>* instance = #C4;
 static const field core::List<core::int*>* listLiteral = #C5;
-static const field core::Set<core::int*>* setLiteral = #C9;
-static const field core::Map<core::int*, core::String*>* mapLiteral = #C12;
+static const field core::Set<core::int*>* setLiteral = #C6;
+static const field core::Map<core::int*, core::String*>* mapLiteral = #C8;
 static const field core::List<core::int*>* listConcatenation = #C5;
-static const field core::Set<core::int*>* setConcatenation = #C9;
-static const field core::Map<core::int*, core::String*>* mapConcatenation = #C12;
+static const field core::Set<core::int*>* setConcatenation = #C6;
+static const field core::Map<core::int*, core::String*>* mapConcatenation = #C8;
 static method id<T extends core::Object* = dynamic>(con::id::T* t) → con::id::T*
   return t;
 
@@ -86,15 +86,11 @@
   #C3 = 0
   #C4 = con::Class<core::int*> {field:#C3}
   #C5 = <core::int*>[#C3]
-  #C6 = null
-  #C7 = <dynamic>[#C3, #C6]
-  #C8 = core::_ImmutableMap<core::int*, Null> {_kvPairs:#C7}
-  #C9 = col::_UnmodifiableSet<core::int*> {_map:#C8}
-  #C10 = "foo"
-  #C11 = <dynamic>[#C3, #C10]
-  #C12 = core::_ImmutableMap<core::int*, core::String*> {_kvPairs:#C11}
-  #C13 = true
-  #C14 = static-tearoff core::identical
+  #C6 = <core::int*>{#C3}
+  #C7 = "foo"
+  #C8 = <core::int*, core::String*>{#C3:#C7)
+  #C9 = true
+  #C10 = static-tearoff core::identical
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.outline.expect
index 6e8783d..9db53e6 100644
--- a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.outline.expect
@@ -65,11 +65,11 @@
 Evaluated: Instantiation @ org-dartlang-testcase:///constants.dart:7:52 -> InstantiationConstant(id<int*>)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constants.dart:8:24 -> InstanceConstant(const Class<int*>{Class.field: 0})
 Evaluated: ListLiteral @ org-dartlang-testcase:///constants.dart:9:26 -> ListConstant(const <int*>[0])
-Evaluated: SetLiteral @ org-dartlang-testcase:///constants.dart:10:25 -> InstanceConstant(const _UnmodifiableSet<int*>{_UnmodifiableSet._map: const _ImmutableMap<int*, Null>{_ImmutableMap._kvPairs: const <dynamic>[0, null]}})
-Evaluated: MapLiteral @ org-dartlang-testcase:///constants.dart:11:33 -> InstanceConstant(const _ImmutableMap<int*, String*>{_ImmutableMap._kvPairs: const <dynamic>[0, "foo"]})
+Evaluated: SetLiteral @ org-dartlang-testcase:///constants.dart:10:25 -> SetConstant(const <int*>{0})
+Evaluated: MapLiteral @ org-dartlang-testcase:///constants.dart:11:33 -> MapConstant(const <int*, String*>{0: "foo"})
 Evaluated: ListConcatenation @ org-dartlang-testcase:///constants.dart:12:32 -> ListConstant(const <int*>[0])
-Evaluated: SetConcatenation @ org-dartlang-testcase:///constants.dart:13:31 -> InstanceConstant(const _UnmodifiableSet<int*>{_UnmodifiableSet._map: const _ImmutableMap<int*, Null>{_ImmutableMap._kvPairs: const <dynamic>[0, null]}})
-Evaluated: MapConcatenation @ org-dartlang-testcase:///constants.dart:14:7 -> InstanceConstant(const _ImmutableMap<int*, String*>{_ImmutableMap._kvPairs: const <dynamic>[0, "foo"]})
+Evaluated: SetConcatenation @ org-dartlang-testcase:///constants.dart:13:31 -> SetConstant(const <int*>{0})
+Evaluated: MapConcatenation @ org-dartlang-testcase:///constants.dart:14:7 -> MapConstant(const <int*, String*>{0: "foo"})
 Evaluated: StaticInvocation @ org-dartlang-testcase:///constants.dart:17:5 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///constants.dart:18:27 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///constants.dart:19:30 -> BoolConstant(true)
@@ -82,9 +82,9 @@
 Evaluated: Instantiation @ org-dartlang-testcase:///constants_lib.dart:19:48 -> InstantiationConstant(id<int*>)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constants_lib.dart:20:24 -> InstanceConstant(const Class<int*>{Class.field: 0})
 Evaluated: ListLiteral @ org-dartlang-testcase:///constants_lib.dart:21:26 -> ListConstant(const <int*>[0])
-Evaluated: SetLiteral @ org-dartlang-testcase:///constants_lib.dart:22:25 -> InstanceConstant(const _UnmodifiableSet<int*>{_UnmodifiableSet._map: const _ImmutableMap<int*, Null>{_ImmutableMap._kvPairs: const <dynamic>[0, null]}})
-Evaluated: MapLiteral @ org-dartlang-testcase:///constants_lib.dart:23:33 -> InstanceConstant(const _ImmutableMap<int*, String*>{_ImmutableMap._kvPairs: const <dynamic>[0, "foo"]})
+Evaluated: SetLiteral @ org-dartlang-testcase:///constants_lib.dart:22:25 -> SetConstant(const <int*>{0})
+Evaluated: MapLiteral @ org-dartlang-testcase:///constants_lib.dart:23:33 -> MapConstant(const <int*, String*>{0: "foo"})
 Evaluated: ListConcatenation @ org-dartlang-testcase:///constants_lib.dart:24:32 -> ListConstant(const <int*>[0])
-Evaluated: SetConcatenation @ org-dartlang-testcase:///constants_lib.dart:25:31 -> InstanceConstant(const _UnmodifiableSet<int*>{_UnmodifiableSet._map: const _ImmutableMap<int*, Null>{_ImmutableMap._kvPairs: const <dynamic>[0, null]}})
-Evaluated: MapConcatenation @ org-dartlang-testcase:///constants_lib.dart:26:7 -> InstanceConstant(const _ImmutableMap<int*, String*>{_ImmutableMap._kvPairs: const <dynamic>[0, "foo"]})
+Evaluated: SetConcatenation @ org-dartlang-testcase:///constants_lib.dart:25:31 -> SetConstant(const <int*>{0})
+Evaluated: MapConcatenation @ org-dartlang-testcase:///constants_lib.dart:26:7 -> MapConstant(const <int*, String*>{0: "foo"})
 Extra constant evaluation: evaluated: 26, effectively constant: 25
diff --git a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.transformed.expect
index fc18272..b504950 100644
--- a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.transformed.expect
@@ -8,36 +8,36 @@
 static const field (core::int) → core::int partialInstantiation = #C2;
 static const field con::Class<core::int> instance = #C4;
 static const field core::List<core::int> listLiteral = #C5;
-static const field core::Set<core::int> setLiteral = #C9;
-static const field core::Map<core::int, core::String> mapLiteral = #C12;
+static const field core::Set<core::int> setLiteral = #C6;
+static const field core::Map<core::int, core::String> mapLiteral = #C8;
 static const field core::List<core::int> listConcatenation = #C5;
-static const field core::Set<core::int> setConcatenation = #C9;
-static const field core::Map<core::int, core::String> mapConcatenation = #C12;
-static const field core::bool partialInstantiationIdentical = #C13;
-static const field core::bool instanceIdentical = #C13;
-static const field core::bool listLiteralIdentical = #C13;
-static const field core::bool setLiteralIdentical = #C13;
-static const field core::bool mapLiteralIdentical = #C13;
-static const field core::bool listConcatenationIdentical = #C13;
-static const field core::bool setConcatenationIdentical = #C13;
-static const field core::bool mapConcatenationIdentical = #C13;
+static const field core::Set<core::int> setConcatenation = #C6;
+static const field core::Map<core::int, core::String> mapConcatenation = #C8;
+static const field core::bool partialInstantiationIdentical = #C9;
+static const field core::bool instanceIdentical = #C9;
+static const field core::bool listLiteralIdentical = #C9;
+static const field core::bool setLiteralIdentical = #C9;
+static const field core::bool mapLiteralIdentical = #C9;
+static const field core::bool listConcatenationIdentical = #C9;
+static const field core::bool setConcatenationIdentical = #C9;
+static const field core::bool mapConcatenationIdentical = #C9;
 static method main() → dynamic {
   self::test(#C2, #C2);
   self::test(#C4, #C4);
   self::test(#C5, #C5);
-  self::test(#C9, #C9);
-  self::test(#C12, #C12);
+  self::test(#C6, #C6);
+  self::test(#C8, #C8);
   self::test(#C5, #C5);
-  self::test(#C9, #C9);
-  self::test(#C12, #C12);
-  self::test(true, #C13);
-  self::test(true, #C13);
-  self::test(true, #C13);
-  self::test(true, #C13);
-  self::test(true, #C13);
-  self::test(true, #C13);
-  self::test(true, #C13);
-  self::test(true, #C13);
+  self::test(#C6, #C6);
+  self::test(#C8, #C8);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
 }
 static method test(dynamic expected, dynamic actual) → dynamic {
   core::print("test(${expected}, ${actual})");
@@ -68,15 +68,15 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field (core::Object*, core::Object*) →* core::bool* c2 = #C14;
+static const field (core::Object*, core::Object*) →* core::bool* c2 = #C10;
 static const field (core::int*) →* core::int* partialInstantiation = #C2;
 static const field con::Class<core::int*>* instance = #C4;
 static const field core::List<core::int*>* listLiteral = #C5;
-static const field core::Set<core::int*>* setLiteral = #C9;
-static const field core::Map<core::int*, core::String*>* mapLiteral = #C12;
+static const field core::Set<core::int*>* setLiteral = #C6;
+static const field core::Map<core::int*, core::String*>* mapLiteral = #C8;
 static const field core::List<core::int*>* listConcatenation = #C5;
-static const field core::Set<core::int*>* setConcatenation = #C9;
-static const field core::Map<core::int*, core::String*>* mapConcatenation = #C12;
+static const field core::Set<core::int*>* setConcatenation = #C6;
+static const field core::Map<core::int*, core::String*>* mapConcatenation = #C8;
 static method id<T extends core::Object* = dynamic>(con::id::T* t) → con::id::T*
   return t;
 
@@ -86,15 +86,11 @@
   #C3 = 0
   #C4 = con::Class<core::int*> {field:#C3}
   #C5 = <core::int*>[#C3]
-  #C6 = null
-  #C7 = <dynamic>[#C3, #C6]
-  #C8 = core::_ImmutableMap<core::int*, Null> {_kvPairs:#C7}
-  #C9 = col::_UnmodifiableSet<core::int*> {_map:#C8}
-  #C10 = "foo"
-  #C11 = <dynamic>[#C3, #C10]
-  #C12 = core::_ImmutableMap<core::int*, core::String*> {_kvPairs:#C11}
-  #C13 = true
-  #C14 = static-tearoff core::identical
+  #C6 = <core::int*>{#C3}
+  #C7 = "foo"
+  #C8 = <core::int*, core::String*>{#C3:#C7)
+  #C9 = true
+  #C10 = static-tearoff core::identical
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.expect
index 1604316..eeb8541 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.expect
@@ -260,6 +260,6 @@
   #C2 = #mixedInMethod
   #C3 = <core::Type*>[]
   #C4 = <dynamic>[]
-  #C5 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C4}
+  #C5 = <core::Symbol*, dynamic>{)
   #C6 = #extendedMethod
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.outline.expect
index a127912..645b335 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.outline.expect
@@ -248,19 +248,19 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///inherited_implements.dart:20:7 -> SymbolConstant(#mixedInMethod)
 Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_implements.dart:20:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_implements.dart:20:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///inherited_implements.dart:20:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///inherited_implements.dart:20:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///inherited_implements.dart:19:7 -> SymbolConstant(#extendedMethod)
 Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_implements.dart:19:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_implements.dart:19:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///inherited_implements.dart:19:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///inherited_implements.dart:19:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: StaticGet @ org-dartlang-testcase:///inherited_implements.dart:49:4 -> InstanceConstant(const _Override{})
 Evaluated: StaticGet @ org-dartlang-testcase:///inherited_implements.dart:59:4 -> InstanceConstant(const _Override{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///inherited_implements.dart:64:7 -> SymbolConstant(#extendedMethod)
 Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_implements.dart:64:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_implements.dart:64:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///inherited_implements.dart:64:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///inherited_implements.dart:64:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///inherited_implements.dart:65:7 -> SymbolConstant(#mixedInMethod)
 Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_implements.dart:65:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_implements.dart:65:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///inherited_implements.dart:65:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///inherited_implements.dart:65:7 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 45, effectively constant: 20
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.transformed.expect
index b9dfa96..f0de54f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.transformed.expect
@@ -260,6 +260,6 @@
   #C2 = #mixedInMethod
   #C3 = <core::Type*>[]
   #C4 = <dynamic>[]
-  #C5 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C4}
+  #C5 = <core::Symbol*, dynamic>{)
   #C6 = #extendedMethod
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.expect
index 73a2b06..980d6fe 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.expect
@@ -197,6 +197,6 @@
   #C1 = #org-dartlang-testcase:///opt_in_lib2.dart::_privateGetter
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #org-dartlang-testcase:///opt_in_lib2.dart::_privateSetter=
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.outline.expect
index 1ec283b..e5c1602 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.outline.expect
@@ -145,6 +145,6 @@
   #C1 = #org-dartlang-testcase:///opt_in_lib2.dart::_privateGetter
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #org-dartlang-testcase:///opt_in_lib2.dart::_privateSetter=
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.transformed.expect
index f9dd954..be4c652 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.transformed.expect
@@ -197,6 +197,6 @@
   #C1 = #org-dartlang-testcase:///opt_in_lib2.dart::_privateGetter
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #org-dartlang-testcase:///opt_in_lib2.dart::_privateSetter=
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.expect
index 7914b57..524ceff 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.expect
@@ -361,7 +361,7 @@
   #C2 = #getter
   #C3 = <core::Type*>[]
   #C4 = <dynamic>[]
-  #C5 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C4}
+  #C5 = <core::Symbol*, dynamic>{)
   #C6 = #field
   #C7 = #method
   #C8 = #finalField
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.outline.expect
index 87ecfb3..bb3b265 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.outline.expect
@@ -333,114 +333,114 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> SymbolConstant(#getter)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> SymbolConstant(#field)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> SymbolConstant(#method)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> SymbolConstant(#finalField)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> SymbolConstant(#setter=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> SymbolConstant(#field=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> SymbolConstant(#getter)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> SymbolConstant(#field)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> SymbolConstant(#method)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> SymbolConstant(#finalField)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> SymbolConstant(#setter=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> SymbolConstant(#field=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: StaticGet @ org-dartlang-testcase:///no_such_method.dart:38:4 -> InstanceConstant(const _Override{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> SymbolConstant(#getter)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> SymbolConstant(#field)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> SymbolConstant(#method)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> SymbolConstant(#finalField)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> SymbolConstant(#setter=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> SymbolConstant(#field=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> SymbolConstant(#getter)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> SymbolConstant(#field)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> SymbolConstant(#method)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> SymbolConstant(#finalField)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> SymbolConstant(#setter=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> SymbolConstant(#field=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: StaticGet @ org-dartlang-testcase:///no_such_method.dart:57:4 -> InstanceConstant(const _Override{})
 Evaluated: StaticGet @ org-dartlang-testcase:///no_such_method.dart:70:4 -> InstanceConstant(const _Override{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> SymbolConstant(#getter)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:7:11 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> SymbolConstant(#field)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> SymbolConstant(#method)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:6:8 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> SymbolConstant(#finalField)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:10:13 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> SymbolConstant(#setter=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:8:12 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> SymbolConstant(#field=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method.dart:9:7 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 283, effectively constant: 114
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.transformed.expect
index c4bae58..c8f6ab8 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.transformed.expect
@@ -365,7 +365,7 @@
   #C2 = #getter
   #C3 = <core::Type*>[]
   #C4 = <dynamic>[]
-  #C5 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C4}
+  #C5 = <core::Symbol*, dynamic>{)
   #C6 = #field
   #C7 = #method
   #C8 = #finalField
diff --git a/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.expect
index ffde2b7..740dfc6 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.expect
@@ -86,7 +86,7 @@
   #C1 = #date
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #date=
   #C6 = #expires
   #C7 = #expires=
diff --git a/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.outline.expect
index 4e5f43d..4ba2007 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.outline.expect
@@ -86,72 +86,72 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#date)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#date=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#expires)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#expires=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#ifModifiedSince)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#ifModifiedSince=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#host)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#host=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#port)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#port=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#contentType)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#contentType=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#contentLength)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#contentLength=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#persistentConnection)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#persistentConnection=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#chunkedTransferEncoding)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#chunkedTransferEncoding=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#value)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#add)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#preserveHeaderCase)
@@ -160,18 +160,18 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#preserveHeaderCase)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#remove)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#removeAll)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#forEach)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#noFolding)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/_http/http.dart:782:8 -> SymbolConstant(#clear)
 Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/_http/http.dart:782:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/_http/http.dart:782:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/_http/http.dart:782:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/_http/http.dart:782:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 268, effectively constant: 91
diff --git a/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.transformed.expect
index a1fdb15..e753783 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.transformed.expect
@@ -86,7 +86,7 @@
   #C1 = #date
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #date=
   #C6 = #expires
   #C7 = #expires=
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.expect
index 7f113e8..8a70236 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.expect
@@ -61,6 +61,6 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #foo=
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.outline.expect
index 7186093..155b834 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.outline.expect
@@ -50,8 +50,8 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_accessors_from_field.dart:18:7 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_accessors_from_field.dart:18:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_accessors_from_field.dart:18:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_accessors_from_field.dart:18:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_accessors_from_field.dart:18:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_accessors_from_field.dart:18:7 -> SymbolConstant(#foo=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_accessors_from_field.dart:18:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_accessors_from_field.dart:18:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_accessors_from_field.dart:18:7 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 19, effectively constant: 7
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.transformed.expect
index df2d4d7..b0155f6 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.transformed.expect
@@ -61,6 +61,6 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #foo=
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.expect
index 61e3a07..c5739de 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.expect
@@ -80,6 +80,6 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #foo=
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.outline.expect
index 2893e4f..7bead7e 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.outline.expect
@@ -69,8 +69,8 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_arent_mixed_in.dart:12:7 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_arent_mixed_in.dart:12:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_arent_mixed_in.dart:12:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_arent_mixed_in.dart:12:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_arent_mixed_in.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_arent_mixed_in.dart:12:7 -> SymbolConstant(#foo=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_arent_mixed_in.dart:12:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_arent_mixed_in.dart:12:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_arent_mixed_in.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 21, effectively constant: 7
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.transformed.expect
index 3e76d00..b013048 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.transformed.expect
@@ -82,6 +82,6 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #foo=
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.expect
index 6a99e7d..49adc6d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.expect
@@ -41,7 +41,7 @@
     : super self::B::•()
     ;
   no-such-method-forwarder set foo(core::int* value) → void
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
 }
 abstract class D extends core::Object implements self::A {
   synthetic constructor •() → self::D*
@@ -65,7 +65,7 @@
     : super self::D::•()
     ;
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C4, 1, #C2, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method expectTypeError(() →* dynamic callback) → void {
   try {
@@ -85,7 +85,7 @@
 constants  {
   #C1 = #foo=
   #C2 = <core::Type*>[]
-  #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
-  #C5 = #foo
+  #C3 = <core::Symbol*, dynamic>{)
+  #C4 = #foo
+  #C5 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.outline.expect
index 1dc0f42..90f26d3 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.outline.expect
@@ -72,9 +72,9 @@
 Extra constant evaluation status:
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_one_defined.dart:17:7 -> SymbolConstant(#foo=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_one_defined.dart:17:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_one_defined.dart:17:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_one_defined.dart:17:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_one_defined.dart:17:7 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_one_defined.dart:17:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_one_defined.dart:17:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_one_defined.dart:17:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_one_defined.dart:17:7 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 19, effectively constant: 7
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.transformed.expect
index c260566..c864fe9 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.transformed.expect
@@ -41,7 +41,7 @@
     : super self::B::•()
     ;
   no-such-method-forwarder set foo(core::int* value) → void
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
 }
 abstract class D extends core::Object implements self::A {
   synthetic constructor •() → self::D*
@@ -65,7 +65,7 @@
     : super self::D::•()
     ;
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C4, 1, #C2, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method expectTypeError(() →* dynamic callback) → void {
   try {
@@ -85,7 +85,7 @@
 constants  {
   #C1 = #foo=
   #C2 = <core::Type*>[]
-  #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
-  #C5 = #foo
+  #C3 = <core::Symbol*, dynamic>{)
+  #C4 = #foo
+  #C5 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.expect
index bd14f88..6d0707e 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.expect
@@ -56,6 +56,6 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #foo=
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.outline.expect
index 34e2e03..a927c80 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.outline.expect
@@ -46,8 +46,8 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_with_substitution.dart:18:11 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_with_substitution.dart:18:11 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_with_substitution.dart:18:11 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_with_substitution.dart:18:11 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_with_substitution.dart:18:11 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_with_substitution.dart:18:11 -> SymbolConstant(#foo=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_with_substitution.dart:18:11 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_with_substitution.dart:18:11 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_accessors_from_field_with_substitution.dart:18:11 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 19, effectively constant: 7
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.transformed.expect
index f79ed2b..4daa123 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.transformed.expect
@@ -56,6 +56,6 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #foo=
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.expect
index f520300..06dbd87 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.expect
@@ -48,5 +48,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.outline.expect
index 63fd5b6..d735754 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.outline.expect
@@ -46,5 +46,5 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_interface_nsm_inherited.dart:16:8 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_interface_nsm_inherited.dart:16:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_interface_nsm_inherited.dart:16:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_interface_nsm_inherited.dart:16:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_interface_nsm_inherited.dart:16:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 8, effectively constant: 4
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.transformed.expect
index f520300..06dbd87 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.transformed.expect
@@ -48,5 +48,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.expect
index dc49492..bfd7e08 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.expect
@@ -7,9 +7,9 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder set push(core::int* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set float(covariant core::int* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C4, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
   method noSuchMethod(core::Invocation* i) → dynamic
     return core::print("${this.{self::Base::runtimeType}{core::Type*}}: ${i.{core::Invocation::positionalArguments}{core::List<dynamic>*}.{core::List::[]}(0){(core::int*) →* dynamic}}");
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -32,9 +32,9 @@
     : super self::Base::•()
     ;
   no-such-method-forwarder set push(core::num* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set float(covariant core::num* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C4, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {
   core::List<self::Base*>* list = <self::Base*>[new self::Me::•(), new self::You::•()];
@@ -65,7 +65,6 @@
 constants  {
   #C1 = #push=
   #C2 = <core::Type*>[]
-  #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
-  #C5 = #float=
+  #C3 = <core::Symbol*, dynamic>{)
+  #C4 = #float=
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.outline.expect
index f455c15..c19ff967 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.outline.expect
@@ -40,14 +40,14 @@
 Extra constant evaluation status:
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_override_abstract_different_type.dart:8:7 -> SymbolConstant(#push=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_override_abstract_different_type.dart:8:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_override_abstract_different_type.dart:8:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_override_abstract_different_type.dart:8:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_override_abstract_different_type.dart:9:7 -> SymbolConstant(#float=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_override_abstract_different_type.dart:9:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_override_abstract_different_type.dart:9:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_override_abstract_different_type.dart:9:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_override_abstract_different_type.dart:16:7 -> SymbolConstant(#push=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_override_abstract_different_type.dart:16:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_override_abstract_different_type.dart:16:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_override_abstract_different_type.dart:16:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_override_abstract_different_type.dart:17:7 -> SymbolConstant(#float=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_override_abstract_different_type.dart:17:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_override_abstract_different_type.dart:17:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_override_abstract_different_type.dart:17:7 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 40, effectively constant: 12
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.transformed.expect
index 8560742..b578f00 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.transformed.expect
@@ -7,9 +7,9 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder set push(core::int* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set float(covariant core::int* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C4, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
   method noSuchMethod(core::Invocation* i) → dynamic
     return core::print("${this.{self::Base::runtimeType}{core::Type*}}: ${i.{core::Invocation::positionalArguments}{core::List<dynamic>*}.{core::List::[]}(0){(core::int*) →* dynamic}}");
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -32,9 +32,9 @@
     : super self::Base::•()
     ;
   no-such-method-forwarder set push(core::num* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set float(covariant core::num* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C4, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {
   core::List<self::Base*>* list = core::_GrowableList::_literal2<self::Base*>(new self::Me::•(), new self::You::•());
@@ -71,7 +71,6 @@
 constants  {
   #C1 = #push=
   #C2 = <core::Type*>[]
-  #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
-  #C5 = #float=
+  #C3 = <core::Symbol*, dynamic>{)
+  #C4 = #float=
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.expect
index 0cf425b..819fb97 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.expect
@@ -37,7 +37,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method eatFood(core::String* food) → core::bool*
-    return this.{self::MockCat::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
+    return this.{self::MockCat::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
 }
 class MockCat2 extends self::MockCat {
   synthetic constructor •() → self::MockCat2*
@@ -49,21 +49,21 @@
   synthetic constructor •() → self::MockCat3*
     : super self::MockCat2::•()
     ;
-  no-such-method-forwarder method eatFood(core::String* food, {core::double* amount = #C5}) → core::bool*
-    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C6: amount}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
+  no-such-method-forwarder method eatFood(core::String* food, {core::double* amount = #C4}) → core::bool*
+    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C5: amount}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
 }
 class MockCat4 extends self::MockCat2 implements self::HungryCat {
   synthetic constructor •() → self::MockCat4*
     : super self::MockCat2::•()
     ;
-  no-such-method-forwarder method eatFood(core::String* food, {core::double* amount = #C5, core::double* yetAnother = #C5}) → core::bool*
-    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C6: amount, #C7: yetAnother}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
+  no-such-method-forwarder method eatFood(core::String* food, {core::double* amount = #C4, core::double* yetAnother = #C4}) → core::bool*
+    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C5: amount, #C6: yetAnother}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
 }
 abstract class HungryCat extends core::Object {
   synthetic constructor •() → self::HungryCat*
     : super core::Object::•()
     ;
-  abstract method eatFood(core::String* food, {core::double* amount = #C5, core::double* yetAnother = #C5}) → core::bool*;
+  abstract method eatFood(core::String* food, {core::double* amount = #C4, core::double* yetAnother = #C4}) → core::bool*;
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -80,9 +80,8 @@
 constants  {
   #C1 = #eatFood
   #C2 = <core::Type*>[]
-  #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
-  #C5 = null
-  #C6 = #amount
-  #C7 = #yetAnother
+  #C3 = <core::Symbol*, dynamic>{)
+  #C4 = null
+  #C5 = #amount
+  #C6 = #yetAnother
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.outline.expect
index 70cdbd7..d7affcd 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.outline.expect
@@ -74,7 +74,7 @@
 Extra constant evaluation status:
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_override_with_different_signature.dart:8:8 -> SymbolConstant(#eatFood)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_override_with_different_signature.dart:8:8 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_override_with_different_signature.dart:8:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_override_with_different_signature.dart:8:8 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_override_with_different_signature.dart:23:8 -> SymbolConstant(#eatFood)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_override_with_different_signature.dart:23:8 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_override_with_different_signature.dart:23:8 -> SymbolConstant(#amount)
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.transformed.expect
index 708efab..04f0e46 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.transformed.expect
@@ -37,7 +37,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method eatFood(core::String* food) → core::bool*
-    return this.{self::MockCat::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(food)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
+    return this.{self::MockCat::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(food)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
 }
 class MockCat2 extends self::MockCat {
   synthetic constructor •() → self::MockCat2*
@@ -49,21 +49,21 @@
   synthetic constructor •() → self::MockCat3*
     : super self::MockCat2::•()
     ;
-  no-such-method-forwarder method eatFood(core::String* food, {core::double* amount = #C5}) → core::bool*
-    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(food)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C6: amount}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
+  no-such-method-forwarder method eatFood(core::String* food, {core::double* amount = #C4}) → core::bool*
+    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(food)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C5: amount}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
 }
 class MockCat4 extends self::MockCat2 implements self::HungryCat {
   synthetic constructor •() → self::MockCat4*
     : super self::MockCat2::•()
     ;
-  no-such-method-forwarder method eatFood(core::String* food, {core::double* amount = #C5, core::double* yetAnother = #C5}) → core::bool*
-    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(food)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C6: amount, #C7: yetAnother}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
+  no-such-method-forwarder method eatFood(core::String* food, {core::double* amount = #C4, core::double* yetAnother = #C4}) → core::bool*
+    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(food)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C5: amount, #C6: yetAnother}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
 }
 abstract class HungryCat extends core::Object {
   synthetic constructor •() → self::HungryCat*
     : super core::Object::•()
     ;
-  abstract method eatFood(core::String* food, {core::double* amount = #C5, core::double* yetAnother = #C5}) → core::bool*;
+  abstract method eatFood(core::String* food, {core::double* amount = #C4, core::double* yetAnother = #C4}) → core::bool*;
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -80,9 +80,8 @@
 constants  {
   #C1 = #eatFood
   #C2 = <core::Type*>[]
-  #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
-  #C5 = null
-  #C6 = #amount
-  #C7 = #yetAnother
+  #C3 = <core::Symbol*, dynamic>{)
+  #C4 = null
+  #C5 = #amount
+  #C6 = #yetAnother
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.expect
index 5ca82cf..701d4d2 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.expect
@@ -70,5 +70,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.outline.expect
index d512245..ada8b9c 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.outline.expect
@@ -69,5 +69,5 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///concrete_method_over_forwarder_in_mixin_application.dart:10:3 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///concrete_method_over_forwarder_in_mixin_application.dart:10:3 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///concrete_method_over_forwarder_in_mixin_application.dart:10:3 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///concrete_method_over_forwarder_in_mixin_application.dart:10:3 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///concrete_method_over_forwarder_in_mixin_application.dart:10:3 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 11, effectively constant: 4
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.transformed.expect
index a104017..84b3825 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.transformed.expect
@@ -70,5 +70,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.expect
index daa0b7e..34d38f0 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.expect
@@ -56,5 +56,5 @@
   #C5 = 42
   #C6 = <core::Type*>[]
   #C7 = <dynamic>[]
-  #C8 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C7}
+  #C8 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.outline.expect
index 8b928ae..846c39a 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.outline.expect
@@ -38,5 +38,5 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///default_argument_values.dart:21:10 -> SymbolConstant(#bar)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///default_argument_values.dart:22:7 -> SymbolConstant(#hest)
 Evaluated: ListLiteral @ org-dartlang-testcase:///default_argument_values.dart:22:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///default_argument_values.dart:22:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///default_argument_values.dart:22:7 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 22, effectively constant: 7
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.transformed.expect
index 8ad93c0..07b72f5 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.transformed.expect
@@ -56,5 +56,5 @@
   #C5 = 42
   #C6 = <core::Type*>[]
   #C7 = <dynamic>[]
-  #C8 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C7}
+  #C8 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.expect
index 3633d99..d8b80bb 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.expect
@@ -58,5 +58,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.outline.expect
index 84fb848..6ceff7c 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.outline.expect
@@ -57,5 +57,5 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///duplicated_abstract_method.dart:10:8 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_abstract_method.dart:10:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_abstract_method.dart:10:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///duplicated_abstract_method.dart:10:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///duplicated_abstract_method.dart:10:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 8, effectively constant: 4
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.transformed.expect
index 3633d99..d8b80bb 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.transformed.expect
@@ -58,5 +58,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.expect
index d34e31b..9966f87 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.expect
@@ -110,7 +110,7 @@
   #C2 = #bar
   #C3 = <core::Type*>[]
   #C4 = <dynamic>[]
-  #C5 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C4}
+  #C5 = <core::Symbol*, dynamic>{)
   #C6 = #baz
   #C7 = #y
   #C8 = #z
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.outline.expect
index 094b3e6..595f2f9 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.outline.expect
@@ -106,30 +106,30 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///forwarder_propagation.dart:12:11 -> SymbolConstant(#bar)
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarder_propagation.dart:12:11 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarder_propagation.dart:12:11 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///forwarder_propagation.dart:12:11 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///forwarder_propagation.dart:12:11 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///forwarder_propagation.dart:13:8 -> SymbolConstant(#baz)
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarder_propagation.dart:13:8 -> ListConstant(const <Type*>[])
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///forwarder_propagation.dart:13:8 -> SymbolConstant(#y)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///forwarder_propagation.dart:13:8 -> SymbolConstant(#z)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///forwarder_propagation.dart:11:12 -> SymbolConstant(#foo=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarder_propagation.dart:11:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///forwarder_propagation.dart:11:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///forwarder_propagation.dart:11:12 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:7:11 -> SymbolConstant(#_privateGetter)
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:7:11 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:7:11 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:7:11 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:7:11 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:6:7 -> SymbolConstant(#_privateField)
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:6:7 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:6:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:6:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:6:7 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:9:8 -> SymbolConstant(#_privateMethod)
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:9:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:9:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:9:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:9:8 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:8:12 -> SymbolConstant(#_privateSetter=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:8:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:8:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:8:12 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:6:7 -> SymbolConstant(#_privateField=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:6:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:6:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///forwarder_propagation_lib.dart:6:7 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 79, effectively constant: 29
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.transformed.expect
index a9d34c1..184900a 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.transformed.expect
@@ -110,7 +110,7 @@
   #C2 = #bar
   #C3 = <core::Type*>[]
   #C4 = <dynamic>[]
-  #C5 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C4}
+  #C5 = <core::Symbol*, dynamic>{)
   #C6 = #baz
   #C7 = #y
   #C8 = #z
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.expect
index d1335fe..ae8492b 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.expect
@@ -65,5 +65,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.outline.expect
index 50e7958..59617d9 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.outline.expect
@@ -64,9 +64,9 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///forwarders_not_assumed_from_mixin.dart:10:8 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarders_not_assumed_from_mixin.dart:10:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarders_not_assumed_from_mixin.dart:10:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///forwarders_not_assumed_from_mixin.dart:10:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///forwarders_not_assumed_from_mixin.dart:10:8 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///forwarders_not_assumed_from_mixin.dart:10:8 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarders_not_assumed_from_mixin.dart:10:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///forwarders_not_assumed_from_mixin.dart:10:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///forwarders_not_assumed_from_mixin.dart:10:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///forwarders_not_assumed_from_mixin.dart:10:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 18, effectively constant: 8
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.transformed.expect
index 34cb10d..3500cab 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.transformed.expect
@@ -65,5 +65,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.expect
index c296d8d..fc7e726 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.expect
@@ -48,5 +48,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.outline.expect
index a80f440..ee28386 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.outline.expect
@@ -47,5 +47,5 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///interface_with_concrete.dart:16:8 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///interface_with_concrete.dart:16:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///interface_with_concrete.dart:16:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///interface_with_concrete.dart:16:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///interface_with_concrete.dart:16:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 8, effectively constant: 4
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.transformed.expect
index c296d8d..fc7e726 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.transformed.expect
@@ -48,5 +48,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.expect
index 11b038f..6d19094 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.expect
@@ -88,5 +88,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.outline.expect
index 1e32f6d..a3f5875 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.outline.expect
@@ -86,13 +86,13 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///interface_with_nsm.dart:15:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 28, effectively constant: 12
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.transformed.expect
index f59813d..2f2d023 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.transformed.expect
@@ -88,5 +88,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.expect
index dabbcd8..8c67697 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.expect
@@ -82,6 +82,6 @@
   #C1 = #bar
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #foo=
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.outline.expect
index fd16e8c42..18495ea 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.outline.expect
@@ -83,8 +83,8 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///multiple_abstract_setters.dart:17:12 -> SymbolConstant(#bar)
 Evaluated: ListLiteral @ org-dartlang-testcase:///multiple_abstract_setters.dart:17:12 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///multiple_abstract_setters.dart:17:12 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///multiple_abstract_setters.dart:17:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///multiple_abstract_setters.dart:17:12 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///multiple_abstract_setters.dart:16:12 -> SymbolConstant(#foo=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///multiple_abstract_setters.dart:16:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///multiple_abstract_setters.dart:16:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///multiple_abstract_setters.dart:16:12 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 19, effectively constant: 7
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.transformed.expect
index 6b924bd..b44b511 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.transformed.expect
@@ -82,6 +82,6 @@
   #C1 = #bar
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #foo=
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.expect
index 70c94e6..d2fa4dd 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.expect
@@ -32,5 +32,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.outline.expect
index 19eb325..3a87a23 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.outline.expect
@@ -32,5 +32,5 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_forwarders_for_abstract_classes.dart:13:8 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_forwarders_for_abstract_classes.dart:13:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_forwarders_for_abstract_classes.dart:13:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_forwarders_for_abstract_classes.dart:13:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_forwarders_for_abstract_classes.dart:13:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 8, effectively constant: 4
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.transformed.expect
index 70c94e6..d2fa4dd 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.transformed.expect
@@ -32,5 +32,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.expect
index 3d97e3b..c2f527e 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.expect
@@ -42,5 +42,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.outline.expect
index dfa0b76..d402380 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.outline.expect
@@ -40,5 +40,5 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_forwarders_for_abstract_classes_chain.dart:14:8 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_forwarders_for_abstract_classes_chain.dart:14:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///no_forwarders_for_abstract_classes_chain.dart:14:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_forwarders_for_abstract_classes_chain.dart:14:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_forwarders_for_abstract_classes_chain.dart:14:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 8, effectively constant: 4
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.transformed.expect
index 3d97e3b..c2f527e 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.transformed.expect
@@ -42,5 +42,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.expect
index 10936ab..fadd73d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.expect
@@ -23,13 +23,12 @@
     : super self::M::•()
     ;
   no-such-method-forwarder method call(core::String* s) → void
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[s]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[s]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
 constants  {
   #C1 = #call
   #C2 = <core::Type*>[]
-  #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C3 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.outline.expect
index 568adcd..7d0e3bc 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.outline.expect
@@ -30,5 +30,5 @@
 Extra constant evaluation status:
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_inherited.dart:13:8 -> SymbolConstant(#call)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_inherited.dart:13:8 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_inherited.dart:13:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_inherited.dart:13:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 10, effectively constant: 3
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.transformed.expect
index 1562403..2d67bde 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.transformed.expect
@@ -23,13 +23,12 @@
     : super self::M::•()
     ;
   no-such-method-forwarder method call(core::String* s) → void
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(s)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(s)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
 constants  {
   #C1 = #call
   #C2 = <core::Type*>[]
-  #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C3 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.expect
index 6c574dd..a59d331 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.expect
@@ -48,5 +48,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.outline.expect
index 7e408bc..e712ddfd 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.outline.expect
@@ -47,5 +47,5 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_mixed_in.dart:15:8 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_mixed_in.dart:15:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_mixed_in.dart:15:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_mixed_in.dart:15:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_mixed_in.dart:15:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 10, effectively constant: 4
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.transformed.expect
index 2b5bfe3..cb0867c 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.transformed.expect
@@ -49,5 +49,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.expect
index fe2544d..00429c3 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.expect
@@ -65,5 +65,5 @@
   #C1 = #org-dartlang-testcase:///private.dart::_hest
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.outline.expect
index 0808248..f92373e 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.outline.expect
@@ -64,9 +64,9 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///private_module.dart:11:8 -> SymbolConstant(#_hest)
 Evaluated: ListLiteral @ org-dartlang-testcase:///private_module.dart:11:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///private_module.dart:11:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///private_module.dart:11:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///private_module.dart:11:8 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///private_module.dart:11:8 -> SymbolConstant(#_hest)
 Evaluated: ListLiteral @ org-dartlang-testcase:///private_module.dart:11:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///private_module.dart:11:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///private_module.dart:11:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///private_module.dart:11:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 16, effectively constant: 8
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.transformed.expect
index fe2544d..00429c3 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.transformed.expect
@@ -65,5 +65,5 @@
   #C1 = #org-dartlang-testcase:///private.dart::_hest
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.expect
index ed53431..3a2ae93 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.expect
@@ -33,5 +33,5 @@
   #C1 = #org-dartlang-testcase:///private_same.dart::_foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.outline.expect
index 0dd40c8..29e4137 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.outline.expect
@@ -33,5 +33,5 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///private_same.dart:10:8 -> SymbolConstant(#_foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///private_same.dart:10:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///private_same.dart:10:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///private_same.dart:10:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///private_same.dart:10:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 8, effectively constant: 4
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.transformed.expect
index ed53431..3a2ae93 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.transformed.expect
@@ -33,5 +33,5 @@
   #C1 = #org-dartlang-testcase:///private_same.dart::_foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.expect
index 864895d..51c933a 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.expect
@@ -27,5 +27,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.outline.expect
index 98fba7e..e2c2872 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.outline.expect
@@ -27,5 +27,5 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///same.dart:14:8 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///same.dart:14:8 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///same.dart:14:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///same.dart:14:8 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///same.dart:14:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 8, effectively constant: 4
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.transformed.expect
index 864895d..51c933a 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.transformed.expect
@@ -27,5 +27,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.expect
index 938f3bd..8a8122f 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.expect
@@ -18,7 +18,7 @@
     ;
   method foo(core::int* x) → void {}
   no-such-method-forwarder set foo(core::int* x) → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
   method noSuchMethod(core::Invocation* i) → dynamic
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -36,6 +36,5 @@
 constants  {
   #C1 = #foo=
   #C2 = <core::Type*>[]
-  #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C3 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.outline.expect
index 5bae423..c7f32f0 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.outline.expect
@@ -38,5 +38,5 @@
 Extra constant evaluation status:
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///setter_not_shadowed_by_method.dart:12:12 -> SymbolConstant(#foo=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///setter_not_shadowed_by_method.dart:12:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///setter_not_shadowed_by_method.dart:12:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///setter_not_shadowed_by_method.dart:12:12 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 10, effectively constant: 3
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.transformed.expect
index 20c7622..a9f095f 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
     ;
   method foo(core::int* x) → void {}
   no-such-method-forwarder set foo(core::int* x) → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
   method noSuchMethod(core::Invocation* i) → dynamic
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -36,6 +36,5 @@
 constants  {
   #C1 = #foo=
   #C2 = <core::Type*>[]
-  #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C3 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.expect
index 24d4686..8314ecf 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.expect
@@ -64,5 +64,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.outline.expect
index ca3cde3..037de6a 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.outline.expect
@@ -62,5 +62,5 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///subst_on_forwarder.dart:10:5 -> SymbolConstant(#foo)
 Evaluated: ListLiteral @ org-dartlang-testcase:///subst_on_forwarder.dart:10:5 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///subst_on_forwarder.dart:10:5 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///subst_on_forwarder.dart:10:5 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///subst_on_forwarder.dart:10:5 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 11, effectively constant: 4
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.transformed.expect
index d830d60..cc8da4c 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.transformed.expect
@@ -65,5 +65,5 @@
   #C1 = #foo
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
 }
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.expect
index e7ce2ad..cb41c43 100644
--- a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.expect
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.expect
@@ -121,7 +121,7 @@
   #C2 = #x
   #C3 = <core::Type*>[]
   #C4 = <dynamic>[]
-  #C5 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C4}
+  #C5 = <core::Symbol*, dynamic>{)
   #C6 = #method
   #C7 = #y=
   #C8 = #x=
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect
index ae0d389..dc78628 100644
--- a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect
@@ -91,14 +91,14 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///generic_covariance_sound_variance.dart:22:6 -> SymbolConstant(#x)
 Evaluated: ListLiteral @ org-dartlang-testcase:///generic_covariance_sound_variance.dart:22:6 -> ListConstant(const <Type*>[])
 Evaluated: ListLiteral @ org-dartlang-testcase:///generic_covariance_sound_variance.dart:22:6 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///generic_covariance_sound_variance.dart:22:6 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///generic_covariance_sound_variance.dart:22:6 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///generic_covariance_sound_variance.dart:23:5 -> SymbolConstant(#method)
 Evaluated: ListLiteral @ org-dartlang-testcase:///generic_covariance_sound_variance.dart:23:5 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///generic_covariance_sound_variance.dart:23:5 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///generic_covariance_sound_variance.dart:23:5 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///generic_covariance_sound_variance.dart:24:12 -> SymbolConstant(#y=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///generic_covariance_sound_variance.dart:24:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///generic_covariance_sound_variance.dart:24:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///generic_covariance_sound_variance.dart:24:12 -> MapConstant(const <Symbol*, dynamic>{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///generic_covariance_sound_variance.dart:22:6 -> SymbolConstant(#x=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///generic_covariance_sound_variance.dart:22:6 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///generic_covariance_sound_variance.dart:22:6 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: MapLiteral @ org-dartlang-testcase:///generic_covariance_sound_variance.dart:22:6 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 42, effectively constant: 13
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.transformed.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.transformed.expect
index 5346fee6..3b09c95 100644
--- a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.transformed.expect
@@ -121,7 +121,7 @@
   #C2 = #x
   #C3 = <core::Type*>[]
   #C4 = <dynamic>[]
-  #C5 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C4}
+  #C5 = <core::Symbol*, dynamic>{)
   #C6 = #method
   #C7 = #y=
   #C8 = #x=
diff --git a/pkg/kernel/lib/target/targets.dart b/pkg/kernel/lib/target/targets.dart
index 479f222..82718b5 100644
--- a/pkg/kernel/lib/target/targets.dart
+++ b/pkg/kernel/lib/target/targets.dart
@@ -438,6 +438,8 @@
 
   Class? concreteMapLiteralClass(CoreTypes coreTypes) => null;
   Class? concreteConstMapLiteralClass(CoreTypes coreTypes) => null;
+  Class? concreteSetLiteralClass(CoreTypes coreTypes) => null;
+  Class? concreteConstSetLiteralClass(CoreTypes coreTypes) => null;
 
   Class? concreteIntLiteralClass(CoreTypes coreTypes, int value) => null;
   Class? concreteDoubleLiteralClass(CoreTypes coreTypes, double value) => null;
diff --git a/pkg/kernel/lib/vm/constants_native_effects.dart b/pkg/kernel/lib/vm/constants_native_effects.dart
deleted file mode 100644
index 911f2cc..0000000
--- a/pkg/kernel/lib/vm/constants_native_effects.dart
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library vm.constants_native_effects;
-
-import '../ast.dart';
-import '../target/targets.dart';
-import '../core_types.dart';
-
-class VmConstantsBackend extends ConstantsBackend {
-  final Class immutableMapClass;
-  final Class unmodifiableSetClass;
-  final Field unmodifiableSetMap;
-
-  VmConstantsBackend._(this.immutableMapClass, this.unmodifiableSetMap,
-      this.unmodifiableSetClass);
-
-  /// If [defines] is not `null` it will be used for handling
-  /// `const {bool,...}.fromEnvironment()` otherwise the current VM's values
-  /// will be used.
-  factory VmConstantsBackend(CoreTypes coreTypes) {
-    final Library coreLibrary = coreTypes.coreLibrary;
-    final Class immutableMapClass = coreLibrary.classes
-        .firstWhere((Class klass) => klass.name == '_ImmutableMap');
-    // ignore: unnecessary_null_comparison
-    assert(immutableMapClass != null);
-    Field unmodifiableSetMap =
-        coreTypes.index.getField('dart:collection', '_UnmodifiableSet', '_map');
-
-    return new VmConstantsBackend._(immutableMapClass, unmodifiableSetMap,
-        unmodifiableSetMap.enclosingClass!);
-  }
-
-  @override
-  Constant lowerMapConstant(MapConstant constant) {
-    // The _ImmutableMap class is implemented via one field pointing to a list
-    // of key/value pairs -- see runtime/lib/immutable_map.dart!
-    final List<Constant> kvListPairs =
-        new List<Constant>.generate(2 * constant.entries.length, (int i) {
-      final int index = i ~/ 2;
-      final ConstantMapEntry entry = constant.entries[index];
-      return i % 2 == 0 ? entry.key : entry.value;
-    });
-    // This is a bit fishy, since we merge the key and the value type by
-    // putting both into the same list.
-    final ListConstant kvListConstant =
-        new ListConstant(const DynamicType(), kvListPairs);
-    assert(immutableMapClass.fields.length == 1);
-    final Field kvPairListField = immutableMapClass.fields[0];
-    return new InstanceConstant(immutableMapClass.reference, <DartType>[
-      constant.keyType,
-      constant.valueType,
-    ], <Reference, Constant>{
-      // We use getterReference as we refer to the field itself.
-      kvPairListField.getterReference: kvListConstant,
-    });
-  }
-
-  @override
-  bool isLoweredMapConstant(Constant constant) {
-    return constant is InstanceConstant &&
-        constant.classNode == immutableMapClass;
-  }
-
-  @override
-  void forEachLoweredMapConstantEntry(
-      Constant constant, void Function(Constant key, Constant value) f) {
-    assert(isLoweredMapConstant(constant));
-    final InstanceConstant instance = constant as InstanceConstant;
-    assert(immutableMapClass.fields.length == 1);
-    final Field kvPairListField = immutableMapClass.fields[0];
-    final ListConstant kvListConstant =
-        instance.fieldValues[kvPairListField.getterReference] as ListConstant;
-    assert(kvListConstant.entries.length % 2 == 0);
-    for (int index = 0; index < kvListConstant.entries.length; index += 2) {
-      f(kvListConstant.entries[index], kvListConstant.entries[index + 1]);
-    }
-  }
-
-  @override
-  Constant lowerSetConstant(SetConstant constant) {
-    final DartType elementType = constant.typeArgument;
-    final List<Constant> entries = constant.entries;
-    final List<ConstantMapEntry> mapEntries =
-        new List<ConstantMapEntry>.generate(entries.length, (int index) {
-      return new ConstantMapEntry(entries[index], new NullConstant());
-    });
-    Constant map = lowerMapConstant(
-        new MapConstant(elementType, const NullType(), mapEntries));
-    return new InstanceConstant(unmodifiableSetClass.reference, [elementType],
-        <Reference, Constant>{unmodifiableSetMap.getterReference: map});
-  }
-
-  @override
-  bool isLoweredSetConstant(Constant constant) {
-    if (constant is InstanceConstant &&
-        constant.classNode == unmodifiableSetClass) {
-      InstanceConstant instance = constant;
-      return isLoweredMapConstant(
-          instance.fieldValues[unmodifiableSetMap.getterReference]!);
-    }
-    return false;
-  }
-
-  @override
-  void forEachLoweredSetConstantElement(
-      Constant constant, void Function(Constant element) f) {
-    assert(isLoweredSetConstant(constant));
-    final InstanceConstant instance = constant as InstanceConstant;
-    final Constant mapConstant =
-        instance.fieldValues[unmodifiableSetMap.getterReference]!;
-    forEachLoweredMapConstantEntry(mapConstant, (Constant key, Constant value) {
-      f(key);
-    });
-  }
-}
diff --git a/pkg/vm/lib/target/vm.dart b/pkg/vm/lib/target/vm.dart
index 5847891..079aca9 100644
--- a/pkg/vm/lib/target/vm.dart
+++ b/pkg/vm/lib/target/vm.dart
@@ -14,8 +14,6 @@
 import 'package:kernel/transformations/continuation.dart' as transformAsync
     show transformLibraries, transformProcedure;
 import 'package:kernel/type_environment.dart';
-import 'package:kernel/vm/constants_native_effects.dart'
-    show VmConstantsBackend;
 
 import '../transformations/call_site_annotator.dart' as callSiteAnnotator;
 import '../transformations/lowering.dart' as lowering
@@ -34,8 +32,10 @@
 
   Class? _growableList;
   Class? _immutableList;
+  Class? _internalImmutableLinkedHashMap;
+  Class? _internalImmutableLinkedHashSet;
   Class? _internalLinkedHashMap;
-  Class? _immutableMap;
+  Class? _internalLinkedHashSet;
   Class? _oneByteString;
   Class? _twoByteString;
   Class? _smi;
@@ -439,8 +439,20 @@
 
   @override
   Class concreteConstMapLiteralClass(CoreTypes coreTypes) {
-    return _immutableMap ??=
-        coreTypes.index.getClass('dart:core', '_ImmutableMap');
+    return _internalImmutableLinkedHashMap ??= coreTypes.index
+        .getClass('dart:collection', '_InternalImmutableLinkedHashMap');
+  }
+
+  @override
+  Class concreteSetLiteralClass(CoreTypes coreTypes) {
+    return _internalLinkedHashSet ??=
+        coreTypes.index.getClass('dart:collection', '_CompactLinkedHashSet');
+  }
+
+  @override
+  Class concreteConstSetLiteralClass(CoreTypes coreTypes) {
+    return _internalImmutableLinkedHashSet ??= coreTypes.index
+        .getClass('dart:collection', '_CompactImmutableLinkedHashSet');
   }
 
   @override
@@ -476,8 +488,7 @@
   }
 
   @override
-  ConstantsBackend constantsBackend(CoreTypes coreTypes) =>
-      new VmConstantsBackend(coreTypes);
+  ConstantsBackend constantsBackend(CoreTypes coreTypes) => ConstantsBackend();
 
   @override
   Map<String, String> updateEnvironmentDefines(Map<String, String> map) {
diff --git a/pkg/vm/lib/transformations/type_flow/summary_collector.dart b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
index de63cee..49ce917 100644
--- a/pkg/vm/lib/transformations/type_flow/summary_collector.dart
+++ b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
@@ -1584,6 +1584,21 @@
   }
 
   @override
+  TypeExpr visitSetLiteral(SetLiteral node) {
+    for (var expression in node.expressions) {
+      _visit(expression);
+    }
+    Class? concreteClass =
+        target.concreteSetLiteralClass(_environment.coreTypes);
+    if (concreteClass != null) {
+      return _translator.instantiateConcreteType(
+          _entryPointsListener.addAllocatedClass(concreteClass),
+          [node.typeArgument]);
+    }
+    return _staticType(node);
+  }
+
+  @override
   TypeExpr visitInstanceInvocation(InstanceInvocation node) {
     final receiverNode = node.receiver;
     final receiver = _visit(receiverNode);
@@ -2443,11 +2458,6 @@
   }
 
   @override
-  Type visitMapConstant(MapConstant node) {
-    throw 'The kernel2kernel constants transformation desugars const maps!';
-  }
-
-  @override
   Type visitListConstant(ListConstant constant) {
     for (final Constant entry in constant.entries) {
       typeFor(entry);
@@ -2466,6 +2476,43 @@
   }
 
   @override
+  Type visitMapConstant(MapConstant constant) {
+    for (final entry in constant.entries) {
+      typeFor(entry.key);
+      typeFor(entry.value);
+    }
+    final Class? concreteClass = summaryCollector.target
+        .concreteConstMapLiteralClass(summaryCollector._environment.coreTypes);
+    if (concreteClass != null) {
+      return new ConcreteType(
+          summaryCollector._entryPointsListener
+              .addAllocatedClass(concreteClass)
+              .cls,
+          null,
+          constant);
+    }
+    return _getStaticType(constant);
+  }
+
+  @override
+  Type visitSetConstant(SetConstant constant) {
+    for (final entry in constant.entries) {
+      typeFor(entry);
+    }
+    final Class? concreteClass = summaryCollector.target
+        .concreteConstSetLiteralClass(summaryCollector._environment.coreTypes);
+    if (concreteClass != null) {
+      return new ConcreteType(
+          summaryCollector._entryPointsListener
+              .addAllocatedClass(concreteClass)
+              .cls,
+          null,
+          constant);
+    }
+    return _getStaticType(constant);
+  }
+
+  @override
   Type visitInstanceConstant(InstanceConstant constant) {
     final resultClass = summaryCollector._entryPointsListener
         .addAllocatedClass(constant.classNode);
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index 5634a76..2ed3a8e 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -1906,6 +1906,13 @@
   visitDoubleConstant(DoubleConstant constant) {}
 
   @override
+  visitSetConstant(SetConstant constant) {
+    for (final entry in constant.entries) {
+      analyzeConstant(entry);
+    }
+  }
+
+  @override
   visitStringConstant(StringConstant constant) {}
 
   @override
@@ -1914,8 +1921,11 @@
   }
 
   @override
-  visitMapConstant(MapConstant node) {
-    throw 'The kernel2kernel constants transformation desugars const maps!';
+  visitMapConstant(MapConstant constant) {
+    for (final entry in constant.entries) {
+      analyzeConstant(entry.key);
+      analyzeConstant(entry.value);
+    }
   }
 
   @override
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_map.dart b/pkg/vm/testcases/transformations/type_flow/transformer/const_map.dart
new file mode 100644
index 0000000..88695c5
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_map.dart
@@ -0,0 +1,33 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This test verifies correct type assignment of type to const maps.
+
+enum _AttributeName {
+  name,
+  sibling,
+}
+
+const _attributeNames = <int, _AttributeName>{
+  0x01: _AttributeName.sibling,
+  0x03: _AttributeName.name,
+};
+
+class _Attribute {
+  final _AttributeName name;
+
+  // This should not be thrown away by TFA.
+  _Attribute._(this.name);
+
+  static _Attribute fromReader(int nameInt) {
+    final name = _attributeNames[nameInt]!;
+    return _Attribute._(name);
+  }
+}
+
+void main() {
+  final result = _Attribute.fromReader(1);
+
+  print(result);
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_map.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/const_map.dart.expect
new file mode 100644
index 0000000..d8e86e2
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_map.dart.expect
@@ -0,0 +1,33 @@
+library #lib /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class _AttributeName extends core::Object implements core::Enum /*isEnum*/  {
+[@vm.inferred-type.metadata=dart.core::_Smi] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] [@vm.unboxing-info.metadata=()->i]  final field core::int index;
+[@vm.inferred-type.metadata=dart.core::_OneByteString] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2]  final field core::String _name;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method toString() → core::String
+    return [@vm.direct-call.metadata=#lib::_AttributeName._name] [@vm.inferred-type.metadata=dart.core::_OneByteString] this.{self::_AttributeName::_name}{core::String};
+}
+class _Attribute extends core::Object {
+  constructor _() → self::_Attribute
+    : super core::Object::•()
+    ;
+  static method fromReader() → self::_Attribute {
+    final self::_AttributeName name = [@vm.direct-call.metadata=dart.collection::_InternalImmutableLinkedHashMap.[]] [@vm.inferred-type.metadata=#lib::_AttributeName? (skip check)](#C8).{core::Map::[]}(#C1){(core::Object?) → self::_AttributeName?}!;
+    return new self::_Attribute::_();
+  }
+}
+static method main() → void {
+  final self::_Attribute result = [@vm.inferred-type.metadata=#lib::_Attribute] self::_Attribute::fromReader();
+  core::print(result);
+}
+constants  {
+  #C1 = 1
+  #C2 = "_AttributeName.sibling"
+  #C3 = self::_AttributeName {index:#C1, _name:#C2}
+  #C4 = 3
+  #C5 = 0
+  #C6 = "_AttributeName.name"
+  #C7 = self::_AttributeName {index:#C5, _name:#C6}
+  #C8 = <core::int*, self::_AttributeName*>{#C1:#C3, #C4:#C7)
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_set.dart b/pkg/vm/testcases/transformations/type_flow/transformer/const_set.dart
new file mode 100644
index 0000000..e0771ee
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_set.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This test verifies correct type assignment of type to const sets.
+
+enum _AttributeName {
+  name,
+  sibling,
+}
+
+const _attributeNames = <int>{
+  0x00,
+  0x01,
+};
+
+class _Attribute {
+  final _AttributeName name;
+
+  // This should not be thrown away by TFA.
+  _Attribute._(this.name);
+
+  static _Attribute fromReader(int nameInt) {
+    final name = _attributeNames.contains(nameInt);
+
+    // This should not be transformed into
+    // "Attempt to execute code removed by Dart AOT compiler".
+    return _Attribute._(_AttributeName.values[nameInt]);
+  }
+}
+
+void main() {
+  final result = _Attribute.fromReader(1);
+
+  print(result);
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_set.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/const_set.dart.expect
new file mode 100644
index 0000000..650c3cc
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_set.dart.expect
@@ -0,0 +1,33 @@
+library #lib /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class _AttributeName extends core::Object implements core::Enum /*isEnum*/  {
+[@vm.inferred-type.metadata=dart.core::_Smi] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] [@vm.unboxing-info.metadata=()->i]  final field core::int index;
+[@vm.inferred-type.metadata=dart.core::_OneByteString] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2]  final field core::String _name;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method toString() → core::String
+    return [@vm.direct-call.metadata=#lib::_AttributeName._name] [@vm.inferred-type.metadata=dart.core::_OneByteString] this.{self::_AttributeName::_name}{core::String};
+}
+class _Attribute extends core::Object {
+  constructor _() → self::_Attribute
+    : super core::Object::•()
+    ;
+  static method fromReader() → self::_Attribute {
+    final core::bool name = [@vm.direct-call.metadata=dart.collection::_CompactImmutableLinkedHashSet.contains] [@vm.inferred-type.metadata=!? (skip check)](#C3).{core::Set::contains}(#C2){(core::Object?) → core::bool};
+    return let final self::_AttributeName #t1 = (#C8).{core::List::[]}(#C2){(core::int) → self::_AttributeName} in new self::_Attribute::_();
+  }
+}
+static method main() → void {
+  final self::_Attribute result = [@vm.inferred-type.metadata=#lib::_Attribute] self::_Attribute::fromReader();
+  core::print(result);
+}
+constants  {
+  #C1 = 0
+  #C2 = 1
+  #C3 = <core::int*>{#C1, #C2}
+  #C4 = "_AttributeName.name"
+  #C5 = self::_AttributeName {index:#C1, _name:#C4}
+  #C6 = "_AttributeName.sibling"
+  #C7 = self::_AttributeName {index:#C2, _name:#C6}
+  #C8 = <self::_AttributeName*>[#C5, #C7]
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
index 657e7ba..1212909 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
@@ -138,7 +138,7 @@
   #C1 = #bar
   #C2 = <core::Type*>[]
   #C3 = <dynamic>[]
-  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
+  #C4 = <core::Symbol*, dynamic>{)
   #C5 = #foo
   #C6 = #bazz
   #C7 = null
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/pragmas.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/pragmas.dart.expect
index 9578649..ba58887 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/pragmas.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/pragmas.dart.expect
@@ -16,9 +16,9 @@
   synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5]  @#C13
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5]  @#C12
   method bar() → void {
-    @#C17
+    @#C16
     function bazz() → void {}
     bazz(){() → void};
   }
@@ -37,11 +37,10 @@
   #C8 = self::B {y:#C7}
   #C9 = 4
   #C10 = "hey"
-  #C11 = <dynamic>[#C6, #C8, #C9, #C10]
-  #C12 = core::_ImmutableMap<core::int*, core::Object*> {_kvPairs:#C11}
-  #C13 = core::pragma {name:#C5, options:#C12}
-  #C14 = "test3"
-  #C15 = 12
-  #C16 = self::C {z:#C15}
-  #C17 = core::pragma {name:#C14, options:#C16}
+  #C11 = <core::int*, core::Object*>{#C6:#C8, #C9:#C10)
+  #C12 = core::pragma {name:#C5, options:#C11}
+  #C13 = "test3"
+  #C14 = 12
+  #C15 = self::C {z:#C14}
+  #C16 = core::pragma {name:#C13, options:#C15}
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter81068.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter81068.dart.expect
index 37b6a68..4c3106f 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter81068.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter81068.dart.expect
@@ -19,9 +19,9 @@
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError) → asy::Future<self::B::T%>
     return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(onError)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C3: #C4}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::B::T%>;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::B::T%>
-    return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(action)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::B::T%>;
+    return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(action)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::B::T%>;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::B::T%) → FutureOr<self::B::then::R%>onValue, {core::Function? onError = #C4}) → asy::Future<self::B::then::R%>
-    return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, core::List::unmodifiable<core::Type*>([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::Type*>] core::_GrowableList::_literal1<core::Type*>(self::B::then::R%)), core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(onValue)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::B::then::R%>;
+    return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, core::List::unmodifiable<core::Type*>([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::Type*>] core::_GrowableList::_literal1<core::Type*>(self::B::then::R%)), core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(onValue)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::B::then::R%>;
 }
 static method createB<T extends core::Object? = dynamic>() → self::B<dynamic>
   return new self::B::•<self::createB::T%>();
@@ -34,8 +34,7 @@
   #C3 = #test
   #C4 = null
   #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #then
-  #C9 = #onError
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #then
+  #C8 = #onError
 }
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index c858051..d4a768d 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -266,8 +266,12 @@
   ASSERT_EQUAL(WeakProperty::InstanceSize(), cls.host_instance_size());
   cls = object_store->linked_hash_map_class();
   ASSERT_EQUAL(LinkedHashMap::InstanceSize(), cls.host_instance_size());
-  cls = object_store->linked_hash_set_class();
+  cls = object_store->immutable_linked_hash_map_class();
   ASSERT_EQUAL(LinkedHashMap::InstanceSize(), cls.host_instance_size());
+  cls = object_store->linked_hash_set_class();
+  ASSERT_EQUAL(LinkedHashSet::InstanceSize(), cls.host_instance_size());
+  cls = object_store->immutable_linked_hash_set_class();
+  ASSERT_EQUAL(LinkedHashSet::InstanceSize(), cls.host_instance_size());
 #endif  // defined(DEBUG)
 
   // Remember the currently pending classes.
diff --git a/runtime/vm/class_id.h b/runtime/vm/class_id.h
index e7f7cbc..ad9f6b0 100644
--- a/runtime/vm/class_id.h
+++ b/runtime/vm/class_id.h
@@ -101,11 +101,13 @@
 #define CLASS_LIST_NO_OBJECT_NOR_STRING_NOR_ARRAY_NOR_MAP(V)                   \
   CLASS_LIST_INTERNAL_ONLY(V) CLASS_LIST_INSTANCE_SINGLETONS(V)
 
-// TODO(http://dartbug.com/45908): Add ImmutableLinkedHashMap.
-#define CLASS_LIST_MAPS(V) V(LinkedHashMap)
+#define CLASS_LIST_MAPS(V)                                                     \
+  V(LinkedHashMap)                                                             \
+  V(ImmutableLinkedHashMap)
 
-// TODO(http://dartbug.com/45908): Add ImmutableLinkedHashSet.
-#define CLASS_LIST_SETS(V) V(LinkedHashSet)
+#define CLASS_LIST_SETS(V)                                                     \
+  V(LinkedHashSet)                                                             \
+  V(ImmutableLinkedHashSet)
 
 #define CLASS_LIST_FIXED_LENGTH_ARRAYS(V)                                      \
   V(Array)                                                                     \
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index 40b0a98..cf5473e 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -3581,7 +3581,7 @@
       intptr_t offset = Instance::NextFieldOffset();
       while (offset < next_field_offset) {
         if (unboxed_fields_bitmap.Get(offset / kCompressedWordSize)) {
-          // Writes 32 bits of the unboxed value at a time
+          // Writes 32 bits of the unboxed value at a time.
           const compressed_uword value = *reinterpret_cast<compressed_uword*>(
               reinterpret_cast<uword>(instance->untag()) + offset);
           s->WriteWordWith32BitWrites(value);
@@ -5006,14 +5006,18 @@
 #if !defined(DART_PRECOMPILED_RUNTIME)
 class LinkedHashMapSerializationCluster : public SerializationCluster {
  public:
-  LinkedHashMapSerializationCluster()
+  LinkedHashMapSerializationCluster(bool is_canonical, intptr_t cid)
       : SerializationCluster("LinkedHashMap",
-                             kLinkedHashMapCid,
-                             compiler::target::LinkedHashMap::InstanceSize()) {}
+                             cid,
+                             compiler::target::LinkedHashMap::InstanceSize(),
+                             is_canonical) {}
   ~LinkedHashMapSerializationCluster() {}
 
   void Trace(Serializer* s, ObjectPtr object) {
     LinkedHashMapPtr map = LinkedHashMap::RawCast(object);
+    // We never have mutable hashmaps in snapshots.
+    ASSERT(map->untag()->IsCanonical());
+    ASSERT_EQUAL(map.GetClassId(), kImmutableLinkedHashMapCid);
     objects_.Add(map);
     PushFromTo(map);
   }
@@ -5044,8 +5048,9 @@
 class LinkedHashMapDeserializationCluster
     : public AbstractInstanceDeserializationCluster {
  public:
-  explicit LinkedHashMapDeserializationCluster(bool is_canonical)
-      : AbstractInstanceDeserializationCluster("LinkedHashMap", is_canonical) {}
+  explicit LinkedHashMapDeserializationCluster(bool is_canonical, intptr_t cid)
+      : AbstractInstanceDeserializationCluster("LinkedHashMap", is_canonical),
+        cid_(cid) {}
   ~LinkedHashMapDeserializationCluster() {}
 
   void ReadAlloc(Deserializer* d) {
@@ -5055,12 +5060,81 @@
   void ReadFill(Deserializer* d, bool primary) {
     for (intptr_t id = start_index_; id < stop_index_; id++) {
       LinkedHashMapPtr map = static_cast<LinkedHashMapPtr>(d->Ref(id));
-      Deserializer::InitializeHeader(map, kLinkedHashMapCid,
-                                     LinkedHashMap::InstanceSize(),
+      Deserializer::InitializeHeader(map, cid_, LinkedHashMap::InstanceSize(),
                                      primary && is_canonical());
       ReadFromTo(map);
     }
   }
+
+ private:
+  const intptr_t cid_;
+};
+
+#if !defined(DART_PRECOMPILED_RUNTIME)
+class LinkedHashSetSerializationCluster : public SerializationCluster {
+ public:
+  LinkedHashSetSerializationCluster(bool is_canonical, intptr_t cid)
+      : SerializationCluster("LinkedHashSet",
+                             cid,
+                             compiler::target::LinkedHashSet::InstanceSize(),
+                             is_canonical) {}
+  ~LinkedHashSetSerializationCluster() {}
+
+  void Trace(Serializer* s, ObjectPtr object) {
+    LinkedHashSetPtr set = LinkedHashSet::RawCast(object);
+    // We never have mutable hashsets in snapshots.
+    ASSERT(set->untag()->IsCanonical());
+    ASSERT_EQUAL(set.GetClassId(), kImmutableLinkedHashSetCid);
+    objects_.Add(set);
+    PushFromTo(set);
+  }
+
+  void WriteAlloc(Serializer* s) {
+    const intptr_t count = objects_.length();
+    s->WriteUnsigned(count);
+    for (intptr_t i = 0; i < count; i++) {
+      LinkedHashSetPtr set = objects_[i];
+      s->AssignRef(set);
+    }
+  }
+
+  void WriteFill(Serializer* s) {
+    const intptr_t count = objects_.length();
+    for (intptr_t i = 0; i < count; i++) {
+      LinkedHashSetPtr set = objects_[i];
+      AutoTraceObject(set);
+      WriteFromTo(set);
+    }
+  }
+
+ private:
+  GrowableArray<LinkedHashSetPtr> objects_;
+};
+#endif  // !DART_PRECOMPILED_RUNTIME
+
+class LinkedHashSetDeserializationCluster
+    : public AbstractInstanceDeserializationCluster {
+ public:
+  explicit LinkedHashSetDeserializationCluster(bool is_canonical, intptr_t cid)
+      : AbstractInstanceDeserializationCluster("LinkedHashSet", is_canonical),
+        cid_(cid) {}
+  ~LinkedHashSetDeserializationCluster() {}
+
+  void ReadAlloc(Deserializer* d) {
+    ReadAllocFixedSize(d, LinkedHashSet::InstanceSize());
+  }
+
+  void ReadFill(Deserializer* d, bool primary) {
+    for (intptr_t id = start_index_; id < stop_index_; id++) {
+      LinkedHashSetPtr set = static_cast<LinkedHashSetPtr>(d->Ref(id));
+      Deserializer::InitializeHeader(set, cid_, LinkedHashSet::InstanceSize(),
+                                     primary && is_canonical());
+      ReadFromTo(set);
+    }
+  }
+
+ private:
+  const intptr_t cid_;
 };
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
@@ -6410,9 +6484,15 @@
     case kLinkedHashMapCid:
       // We do not have mutable hash maps in snapshots.
       UNREACHABLE();
+    case kImmutableLinkedHashMapCid:
+      return new (Z) LinkedHashMapSerializationCluster(
+          is_canonical, kImmutableLinkedHashMapCid);
     case kLinkedHashSetCid:
       // We do not have mutable hash sets in snapshots.
       UNREACHABLE();
+    case kImmutableLinkedHashSetCid:
+      return new (Z) LinkedHashSetSerializationCluster(
+          is_canonical, kImmutableLinkedHashSetCid);
     case kArrayCid:
       return new (Z) ArraySerializationCluster(is_canonical, kArrayCid);
     case kImmutableArrayCid:
@@ -7321,9 +7401,15 @@
     case kLinkedHashMapCid:
       // We do not have mutable hash maps in snapshots.
       UNREACHABLE();
+    case kImmutableLinkedHashMapCid:
+      return new (Z) LinkedHashMapDeserializationCluster(
+          is_canonical, kImmutableLinkedHashMapCid);
     case kLinkedHashSetCid:
       // We do not have mutable hash sets in snapshots.
       UNREACHABLE();
+    case kImmutableLinkedHashSetCid:
+      return new (Z) LinkedHashSetDeserializationCluster(
+          is_canonical, kImmutableLinkedHashSetCid);
     case kArrayCid:
       return new (Z) ArrayDeserializationCluster(is_canonical, kArrayCid);
     case kImmutableArrayCid:
diff --git a/runtime/vm/compiler/assembler/assembler_arm.cc b/runtime/vm/compiler/assembler/assembler_arm.cc
index d285792..163403a 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm.cc
@@ -1766,7 +1766,8 @@
 void Assembler::StoreIntoObject(Register object,
                                 const Address& dest,
                                 Register value,
-                                CanBeSmi can_be_smi) {
+                                CanBeSmi can_be_smi,
+                                MemoryOrder memory_order) {
   // x.slot = x. Barrier should have be removed at the IL level.
   ASSERT(object != value);
   ASSERT(object != LINK_REGISTER);
@@ -1774,7 +1775,11 @@
   ASSERT(object != TMP);
   ASSERT(value != TMP);
 
-  str(value, dest);
+  if (memory_order == kRelease) {
+    StoreRelease(value, dest);
+  } else {
+    str(value, dest);
+  }
 
   // In parallel, test whether
   //  - object is old and not remembered and value is new, or
@@ -1889,22 +1894,28 @@
 void Assembler::StoreIntoObjectOffset(Register object,
                                       int32_t offset,
                                       Register value,
-                                      CanBeSmi can_value_be_smi) {
+                                      CanBeSmi can_value_be_smi,
+                                      MemoryOrder memory_order) {
   int32_t ignored = 0;
   if (Address::CanHoldStoreOffset(kFourBytes, offset - kHeapObjectTag,
                                   &ignored)) {
     StoreIntoObject(object, FieldAddress(object, offset), value,
-                    can_value_be_smi);
+                    can_value_be_smi, memory_order);
   } else {
     AddImmediate(IP, object, offset - kHeapObjectTag);
-    StoreIntoObject(object, Address(IP), value, can_value_be_smi);
+    StoreIntoObject(object, Address(IP), value, can_value_be_smi, memory_order);
   }
 }
 
 void Assembler::StoreIntoObjectNoBarrier(Register object,
                                          const Address& dest,
-                                         Register value) {
-  str(value, dest);
+                                         Register value,
+                                         MemoryOrder memory_order) {
+  if (memory_order == kRelease) {
+    StoreRelease(value, dest);
+  } else {
+    str(value, dest);
+  }
 #if defined(DEBUG)
   Label done;
   StoreIntoObjectFilter(object, value, &done, kValueCanBeSmi, kJumpToNoUpdate);
@@ -1921,43 +1932,52 @@
 
 void Assembler::StoreIntoObjectNoBarrier(Register object,
                                          const Address& dest,
-                                         const Object& value) {
+                                         const Object& value,
+                                         MemoryOrder memory_order) {
   ASSERT(IsOriginalObject(value));
   ASSERT(IsNotTemporaryScopedHandle(value));
   // No store buffer update.
   LoadObject(IP, value);
-  str(IP, dest);
+  if (memory_order == kRelease) {
+    StoreRelease(IP, dest);
+  } else {
+    str(IP, dest);
+  }
 }
 
 void Assembler::StoreIntoObjectNoBarrierOffset(Register object,
                                                int32_t offset,
-                                               Register value) {
+                                               Register value,
+                                               MemoryOrder memory_order) {
   int32_t ignored = 0;
   if (Address::CanHoldStoreOffset(kFourBytes, offset - kHeapObjectTag,
                                   &ignored)) {
-    StoreIntoObjectNoBarrier(object, FieldAddress(object, offset), value);
+    StoreIntoObjectNoBarrier(object, FieldAddress(object, offset), value,
+                             memory_order);
   } else {
     Register base = object == R9 ? R8 : R9;
     Push(base);
     AddImmediate(base, object, offset - kHeapObjectTag);
-    StoreIntoObjectNoBarrier(object, Address(base), value);
+    StoreIntoObjectNoBarrier(object, Address(base), value, memory_order);
     Pop(base);
   }
 }
 
 void Assembler::StoreIntoObjectNoBarrierOffset(Register object,
                                                int32_t offset,
-                                               const Object& value) {
+                                               const Object& value,
+                                               MemoryOrder memory_order) {
   ASSERT(IsOriginalObject(value));
   int32_t ignored = 0;
   if (Address::CanHoldStoreOffset(kFourBytes, offset - kHeapObjectTag,
                                   &ignored)) {
-    StoreIntoObjectNoBarrier(object, FieldAddress(object, offset), value);
+    StoreIntoObjectNoBarrier(object, FieldAddress(object, offset), value,
+                             memory_order);
   } else {
     Register base = object == R9 ? R8 : R9;
     Push(base);
     AddImmediate(base, object, offset - kHeapObjectTag);
-    StoreIntoObjectNoBarrier(object, Address(base), value);
+    StoreIntoObjectNoBarrier(object, Address(base), value, memory_order);
     Pop(base);
   }
 }
diff --git a/runtime/vm/compiler/assembler/assembler_arm.h b/runtime/vm/compiler/assembler/assembler_arm.h
index abb82a1..636d030 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.h
+++ b/runtime/vm/compiler/assembler/assembler_arm.h
@@ -402,9 +402,16 @@
     ldr(dst, Address(address, offset));
     dmb();
   }
-  void StoreRelease(Register src, Register address, int32_t offset = 0) {
+  void StoreRelease(Register src,
+                    Register address,
+                    int32_t offset = 0) override {
+    StoreRelease(src, Address(address, offset));
+  }
+  void StoreRelease(Register src, Address dest) {
     dmb();
-    str(src, Address(address, offset));
+    str(src, dest);
+
+    // We don't run TSAN bots on 32 bit.
   }
 
   void CompareWithFieldValue(Register value, FieldAddress address) {
@@ -877,7 +884,8 @@
   void StoreIntoObject(Register object,      // Object we are storing into.
                        const Address& dest,  // Where we are storing into.
                        Register value,       // Value we are storing.
-                       CanBeSmi can_value_be_smi = kValueCanBeSmi) override;
+                       CanBeSmi can_value_be_smi = kValueCanBeSmi,
+                       MemoryOrder memory_order = kRelaxedNonAtomic) override;
   void StoreIntoArray(Register object,
                       Register slot,
                       Register value,
@@ -885,20 +893,28 @@
   void StoreIntoObjectOffset(Register object,
                              int32_t offset,
                              Register value,
-                             CanBeSmi can_value_be_smi = kValueCanBeSmi);
+                             CanBeSmi can_value_be_smi = kValueCanBeSmi,
+                             MemoryOrder memory_order = kRelaxedNonAtomic);
 
+  void StoreIntoObjectNoBarrier(
+      Register object,
+      const Address& dest,
+      Register value,
+      MemoryOrder memory_order = kRelaxedNonAtomic) override;
   void StoreIntoObjectNoBarrier(Register object,
                                 const Address& dest,
-                                Register value) override;
-  void StoreIntoObjectNoBarrier(Register object,
-                                const Address& dest,
-                                const Object& value);
-  void StoreIntoObjectNoBarrierOffset(Register object,
-                                      int32_t offset,
-                                      Register value);
-  void StoreIntoObjectNoBarrierOffset(Register object,
-                                      int32_t offset,
-                                      const Object& value);
+                                const Object& value,
+                                MemoryOrder memory_order = kRelaxedNonAtomic);
+  void StoreIntoObjectNoBarrierOffset(
+      Register object,
+      int32_t offset,
+      Register value,
+      MemoryOrder memory_order = kRelaxedNonAtomic);
+  void StoreIntoObjectNoBarrierOffset(
+      Register object,
+      int32_t offset,
+      const Object& value,
+      MemoryOrder memory_order = kRelaxedNonAtomic);
 
   // Stores a non-tagged value into a heap object.
   void StoreInternalPointer(Register object,
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index 3502a6e..d15a27a 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -1092,33 +1092,42 @@
 void Assembler::StoreIntoObjectOffset(Register object,
                                       int32_t offset,
                                       Register value,
-                                      CanBeSmi value_can_be_smi) {
-  if (Address::CanHoldOffset(offset - kHeapObjectTag)) {
-    StoreIntoObject(object, FieldAddress(object, offset), value,
-                    value_can_be_smi);
+                                      CanBeSmi value_can_be_smi,
+                                      MemoryOrder memory_order) {
+  if (memory_order == kRelease) {
+    StoreRelease(value, object, offset);
+  } else if (FieldAddress::CanHoldOffset(offset)) {
+    str(value, FieldAddress(object, offset));
   } else {
     AddImmediate(TMP, object, offset - kHeapObjectTag);
-    StoreIntoObject(object, Address(TMP), value, value_can_be_smi);
+    str(value, Address(TMP));
   }
+  StoreBarrier(object, value, value_can_be_smi);
 }
 
 void Assembler::StoreCompressedIntoObjectOffset(Register object,
                                                 int32_t offset,
                                                 Register value,
-                                                CanBeSmi value_can_be_smi) {
-  if (Address::CanHoldOffset(offset - kHeapObjectTag)) {
-    StoreCompressedIntoObject(object, FieldAddress(object, offset), value,
-                              value_can_be_smi);
+                                                CanBeSmi value_can_be_smi,
+                                                MemoryOrder memory_order) {
+  if (memory_order == kRelease) {
+    StoreReleaseCompressed(value, object, offset);
+  } else if (FieldAddress::CanHoldOffset(offset)) {
+    str(value, FieldAddress(object, offset), kObjectBytes);
   } else {
     AddImmediate(TMP, object, offset - kHeapObjectTag);
-    StoreCompressedIntoObject(object, Address(TMP), value, value_can_be_smi);
+    str(value, Address(TMP), kObjectBytes);
   }
+  StoreBarrier(object, value, value_can_be_smi);
 }
 
 void Assembler::StoreIntoObject(Register object,
                                 const Address& dest,
                                 Register value,
-                                CanBeSmi can_be_smi) {
+                                CanBeSmi can_be_smi,
+                                MemoryOrder memory_order) {
+  // stlr does not feature an address operand.
+  ASSERT(memory_order == kRelaxedNonAtomic);
   str(value, dest);
   StoreBarrier(object, value, can_be_smi);
 }
@@ -1126,7 +1135,10 @@
 void Assembler::StoreCompressedIntoObject(Register object,
                                           const Address& dest,
                                           Register value,
-                                          CanBeSmi can_be_smi) {
+                                          CanBeSmi can_be_smi,
+                                          MemoryOrder memory_order) {
+  // stlr does not feature an address operand.
+  ASSERT(memory_order == kRelaxedNonAtomic);
   str(value, dest, kObjectBytes);
   StoreBarrier(object, value, can_be_smi);
 }
@@ -1264,7 +1276,10 @@
 
 void Assembler::StoreIntoObjectNoBarrier(Register object,
                                          const Address& dest,
-                                         Register value) {
+                                         Register value,
+                                         MemoryOrder memory_order) {
+  // stlr does not feature an address operand.
+  ASSERT(memory_order == kRelaxedNonAtomic);
   str(value, dest);
 #if defined(DEBUG)
   Label done;
@@ -1283,7 +1298,10 @@
 
 void Assembler::StoreCompressedIntoObjectNoBarrier(Register object,
                                                    const Address& dest,
-                                                   Register value) {
+                                                   Register value,
+                                                   MemoryOrder memory_order) {
+  // stlr does not feature an address operand.
+  ASSERT(memory_order == kRelaxedNonAtomic);
   str(value, dest, kObjectBytes);
 #if defined(DEBUG)
   Label done;
@@ -1302,8 +1320,11 @@
 
 void Assembler::StoreIntoObjectOffsetNoBarrier(Register object,
                                                int32_t offset,
-                                               Register value) {
-  if (Address::CanHoldOffset(offset - kHeapObjectTag)) {
+                                               Register value,
+                                               MemoryOrder memory_order) {
+  if (memory_order == kRelease) {
+    StoreRelease(value, object, offset);
+  } else if (FieldAddress::CanHoldOffset(offset)) {
     StoreIntoObjectNoBarrier(object, FieldAddress(object, offset), value);
   } else {
     AddImmediate(TMP, object, offset - kHeapObjectTag);
@@ -1311,10 +1332,14 @@
   }
 }
 
-void Assembler::StoreCompressedIntoObjectOffsetNoBarrier(Register object,
-                                                         int32_t offset,
-                                                         Register value) {
-  if (Address::CanHoldOffset(offset - kHeapObjectTag)) {
+void Assembler::StoreCompressedIntoObjectOffsetNoBarrier(
+    Register object,
+    int32_t offset,
+    Register value,
+    MemoryOrder memory_order) {
+  if (memory_order == kRelease) {
+    StoreReleaseCompressed(value, object, offset);
+  } else if (FieldAddress::CanHoldOffset(offset)) {
     StoreCompressedIntoObjectNoBarrier(object, FieldAddress(object, offset),
                                        value);
   } else {
@@ -1339,7 +1364,10 @@
 
 void Assembler::StoreCompressedIntoObjectNoBarrier(Register object,
                                                    const Address& dest,
-                                                   const Object& value) {
+                                                   const Object& value,
+                                                   MemoryOrder memory_order) {
+  // stlr does not feature an address operand.
+  ASSERT(memory_order == kRelaxedNonAtomic);
   ASSERT(IsOriginalObject(value));
   ASSERT(IsNotTemporaryScopedHandle(value));
   // No store buffer update.
@@ -1353,8 +1381,17 @@
 
 void Assembler::StoreIntoObjectOffsetNoBarrier(Register object,
                                                int32_t offset,
-                                               const Object& value) {
-  if (Address::CanHoldOffset(offset - kHeapObjectTag)) {
+                                               const Object& value,
+                                               MemoryOrder memory_order) {
+  if (memory_order == kRelease) {
+    Register value_reg = TMP2;
+    if (IsSameObject(compiler::NullObject(), value)) {
+      value_reg = NULL_REG;
+    } else {
+      LoadObject(value_reg, value);
+    }
+    StoreIntoObjectOffsetNoBarrier(object, offset, value_reg, memory_order);
+  } else if (FieldAddress::CanHoldOffset(offset)) {
     StoreIntoObjectNoBarrier(object, FieldAddress(object, offset), value);
   } else {
     AddImmediate(TMP, object, offset - kHeapObjectTag);
@@ -1362,10 +1399,21 @@
   }
 }
 
-void Assembler::StoreCompressedIntoObjectOffsetNoBarrier(Register object,
-                                                         int32_t offset,
-                                                         const Object& value) {
-  if (Address::CanHoldOffset(offset - kHeapObjectTag)) {
+void Assembler::StoreCompressedIntoObjectOffsetNoBarrier(
+    Register object,
+    int32_t offset,
+    const Object& value,
+    MemoryOrder memory_order) {
+  Register value_reg = TMP2;
+  if (memory_order == kRelease) {
+    if (IsSameObject(compiler::NullObject(), value)) {
+      value_reg = NULL_REG;
+    } else {
+      LoadObject(value_reg, value);
+    }
+    StoreCompressedIntoObjectOffsetNoBarrier(object, offset, value_reg,
+                                             memory_order);
+  } else if (FieldAddress::CanHoldOffset(offset)) {
     StoreCompressedIntoObjectNoBarrier(object, FieldAddress(object, offset),
                                        value);
   } else {
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h
index 3826473..ff4af61 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.h
+++ b/runtime/vm/compiler/assembler/assembler_arm64.h
@@ -370,6 +370,12 @@
 
 class FieldAddress : public Address {
  public:
+  static bool CanHoldOffset(int32_t offset,
+                            AddressType at = Offset,
+                            OperandSize sz = kEightBytes) {
+    return Address::CanHoldOffset(offset - kHeapObjectTag, at, sz);
+  }
+
   FieldAddress(Register base, int32_t disp, OperandSize sz = kEightBytes)
       : Address(base, disp - kHeapObjectTag, Offset, sz) {}
 
@@ -595,19 +601,32 @@
     }
   }
 
-  void StoreRelease(Register dst, Register address, int32_t offset = 0) {
+  void StoreRelease(Register src,
+                    Register address,
+                    int32_t offset = 0) override {
+    Register kDestReg = address;
     if (offset != 0) {
-      AddImmediate(TMP2, address, offset);
-      stlr(dst, TMP2);
-#if defined(USING_THREAD_SANITIZER)
-      TsanStoreRelease(TMP2);
-#endif
-    } else {
-      stlr(dst, address);
-#if defined(USING_THREAD_SANITIZER)
-      TsanStoreRelease(address);
-#endif
+      kDestReg = TMP;
+      AddImmediate(kDestReg, address, offset);
     }
+    stlr(src, kDestReg);
+#if defined(USING_THREAD_SANITIZER)
+    TsanStoreRelease(kDestReg);
+#endif
+  }
+
+  void StoreReleaseCompressed(Register src,
+                              Register address,
+                              int32_t offset = 0) {
+    Register kResultReg = address;
+    if (offset != 0) {
+      kResultReg = TMP;
+      AddImmediate(kResultReg, address, offset);
+    }
+    stlr(src, kResultReg, kObjectBytes);
+#if defined(USING_THREAD_SANITIZER)
+    TsanStoreRelease(kResultReg);
+#endif
   }
 
   void CompareWithFieldValue(Register value, FieldAddress address) {
@@ -1696,7 +1715,8 @@
   // Macros accepting a pp Register argument may attempt to load values from
   // the object pool when possible. Unless you are sure that the untagged object
   // pool pointer is in another register, or that it is not available at all,
-  // PP should be passed for pp. `dest` can be TMP2, `rn` cannot.
+  // PP should be passed for pp. `dest` can be TMP2, `rn` cannot. `dest` can be
+  // TMP.
   void AddImmediate(Register dest,
                     Register rn,
                     int64_t imm,
@@ -1835,12 +1855,14 @@
   void StoreIntoObject(Register object,
                        const Address& dest,
                        Register value,
-                       CanBeSmi can_value_be_smi = kValueCanBeSmi) override;
+                       CanBeSmi can_value_be_smi = kValueCanBeSmi,
+                       MemoryOrder memory_order = kRelaxedNonAtomic) override;
   void StoreCompressedIntoObject(
       Register object,
       const Address& dest,
       Register value,
-      CanBeSmi can_value_be_smi = kValueCanBeSmi) override;
+      CanBeSmi can_value_be_smi = kValueCanBeSmi,
+      MemoryOrder memory_order = kRelaxedNonAtomic) override;
   void StoreBarrier(Register object, Register value, CanBeSmi can_value_be_smi);
   void StoreIntoArray(Register object,
                       Register slot,
@@ -1858,36 +1880,52 @@
   void StoreIntoObjectOffset(Register object,
                              int32_t offset,
                              Register value,
-                             CanBeSmi can_value_be_smi = kValueCanBeSmi);
+                             CanBeSmi can_value_be_smi = kValueCanBeSmi,
+                             MemoryOrder memory_order = kRelaxedNonAtomic);
   void StoreCompressedIntoObjectOffset(
       Register object,
       int32_t offset,
       Register value,
-      CanBeSmi can_value_be_smi = kValueCanBeSmi);
-  void StoreIntoObjectNoBarrier(Register object,
-                                const Address& dest,
-                                Register value) override;
-  void StoreCompressedIntoObjectNoBarrier(Register object,
-                                          const Address& dest,
-                                          Register value) override;
-  void StoreIntoObjectOffsetNoBarrier(Register object,
-                                      int32_t offset,
-                                      Register value);
-  void StoreCompressedIntoObjectOffsetNoBarrier(Register object,
-                                                int32_t offset,
-                                                Register value);
+      CanBeSmi can_value_be_smi = kValueCanBeSmi,
+      MemoryOrder memory_order = kRelaxedNonAtomic);
+  void StoreIntoObjectNoBarrier(
+      Register object,
+      const Address& dest,
+      Register value,
+      MemoryOrder memory_order = kRelaxedNonAtomic) override;
+  void StoreCompressedIntoObjectNoBarrier(
+      Register object,
+      const Address& dest,
+      Register value,
+      MemoryOrder memory_order = kRelaxedNonAtomic) override;
+  void StoreIntoObjectOffsetNoBarrier(
+      Register object,
+      int32_t offset,
+      Register value,
+      MemoryOrder memory_order = kRelaxedNonAtomic);
+  void StoreCompressedIntoObjectOffsetNoBarrier(
+      Register object,
+      int32_t offset,
+      Register value,
+      MemoryOrder memory_order = kRelaxedNonAtomic);
   void StoreIntoObjectNoBarrier(Register object,
                                 const Address& dest,
                                 const Object& value);
-  void StoreCompressedIntoObjectNoBarrier(Register object,
-                                          const Address& dest,
-                                          const Object& value);
-  void StoreIntoObjectOffsetNoBarrier(Register object,
-                                      int32_t offset,
-                                      const Object& value);
-  void StoreCompressedIntoObjectOffsetNoBarrier(Register object,
-                                                int32_t offset,
-                                                const Object& value);
+  void StoreCompressedIntoObjectNoBarrier(
+      Register object,
+      const Address& dest,
+      const Object& value,
+      MemoryOrder memory_order = kRelaxedNonAtomic);
+  void StoreIntoObjectOffsetNoBarrier(
+      Register object,
+      int32_t offset,
+      const Object& value,
+      MemoryOrder memory_order = kRelaxedNonAtomic);
+  void StoreCompressedIntoObjectOffsetNoBarrier(
+      Register object,
+      int32_t offset,
+      const Object& value,
+      MemoryOrder memory_order = kRelaxedNonAtomic);
 
   // Stores a non-tagged value into a heap object.
   void StoreInternalPointer(Register object,
diff --git a/runtime/vm/compiler/assembler/assembler_base.h b/runtime/vm/compiler/assembler/assembler_base.h
index 1f22998..9ef00e4 100644
--- a/runtime/vm/compiler/assembler/assembler_base.h
+++ b/runtime/vm/compiler/assembler/assembler_base.h
@@ -635,6 +635,16 @@
     kValueIsNotSmi,
   };
 
+  enum MemoryOrder {
+    // All previous writes to memory in this thread must be visible to other
+    // threads. Currently, only used for lazily populating hash indices in
+    // shared const maps and sets.
+    kRelease,
+
+    // All other stores.
+    kRelaxedNonAtomic,
+  };
+
   virtual void LoadField(Register dst, const FieldAddress& address) = 0;
   virtual void LoadFieldFromOffset(Register reg,
                                    Register base,
@@ -646,11 +656,13 @@
       Register object,      // Object we are storing into.
       const Address& dest,  // Where we are storing into.
       Register value,       // Value we are storing.
-      CanBeSmi can_be_smi = kValueCanBeSmi) = 0;
+      CanBeSmi can_be_smi = kValueCanBeSmi,
+      MemoryOrder memory_order = kRelaxedNonAtomic) = 0;
   virtual void StoreIntoObjectNoBarrier(
       Register object,      // Object we are storing into.
       const Address& dest,  // Where we are storing into.
-      Register value) = 0;  // Value we are storing.
+      Register value,       // Value we are storing.
+      MemoryOrder memory_order = kRelaxedNonAtomic) = 0;
   // For native unboxed slots, both methods are the same, as no write barrier
   // is needed.
   void StoreToSlot(Register src, Register base, const Slot& slot);
@@ -669,11 +681,13 @@
       Register object,      // Object we are storing into.
       const Address& dest,  // Where we are storing into.
       Register value,       // Value we are storing.
-      CanBeSmi can_be_smi = kValueCanBeSmi) = 0;
+      CanBeSmi can_be_smi = kValueCanBeSmi,
+      MemoryOrder memory_order = kRelaxedNonAtomic) = 0;
   virtual void StoreCompressedIntoObjectNoBarrier(
       Register object,      // Object we are storing into.
       const Address& dest,  // Where we are storing into.
-      Register value) = 0;  // Value we are storing.
+      Register value,       // Value we are storing.
+      MemoryOrder memory_order = kRelaxedNonAtomic) = 0;
 #else
   virtual void LoadCompressedField(Register dst, const FieldAddress& address) {
     LoadField(dst, address);
@@ -687,17 +701,23 @@
       Register object,      // Object we are storing into.
       const Address& dest,  // Where we are storing into.
       Register value,       // Value we are storing.
-      CanBeSmi can_be_smi = kValueCanBeSmi) {
+      CanBeSmi can_be_smi = kValueCanBeSmi,
+      MemoryOrder memory_order = kRelaxedNonAtomic) {
     StoreIntoObject(object, dest, value, can_be_smi);
   }
   virtual void StoreCompressedIntoObjectNoBarrier(
       Register object,      // Object we are storing into.
       const Address& dest,  // Where we are storing into.
-      Register value) {     // Value we are storing.
+      Register value,       // Value we are storing.
+      MemoryOrder memory_order = kRelaxedNonAtomic) {
     StoreIntoObjectNoBarrier(object, dest, value);
   }
 #endif  // defined(DART_COMPRESSED_POINTERS)
 
+  virtual void StoreRelease(Register src,
+                            Register address,
+                            int32_t offset = 0) = 0;
+
   virtual void EnsureHasClassIdInDEBUG(intptr_t cid,
                                        Register src,
                                        Register scratch,
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.cc b/runtime/vm/compiler/assembler/assembler_ia32.cc
index 05b6d4b..459cbf2 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.cc
+++ b/runtime/vm/compiler/assembler/assembler_ia32.cc
@@ -2024,11 +2024,16 @@
 void Assembler::StoreIntoObject(Register object,
                                 const Address& dest,
                                 Register value,
-                                CanBeSmi can_be_smi) {
+                                CanBeSmi can_be_smi,
+                                MemoryOrder memory_order) {
   // x.slot = x. Barrier should have be removed at the IL level.
   ASSERT(object != value);
 
-  movl(dest, value);
+  if (memory_order == kRelease) {
+    StoreRelease(value, dest.base(), dest.disp32());
+  } else {
+    movl(dest, value);
+  }
   Label done;
   StoreIntoObjectFilter(object, value, &done, can_be_smi, kJumpToNoUpdate);
   // A store buffer update is required.
@@ -2047,8 +2052,13 @@
 
 void Assembler::StoreIntoObjectNoBarrier(Register object,
                                          const Address& dest,
-                                         Register value) {
-  movl(dest, value);
+                                         Register value,
+                                         MemoryOrder memory_order) {
+  if (memory_order == kRelease) {
+    StoreRelease(value, dest.base(), dest.disp32());
+  } else {
+    movl(dest, value);
+  }
 #if defined(DEBUG)
   Label done;
   pushl(value);
@@ -2109,8 +2119,20 @@
 
 void Assembler::StoreIntoObjectNoBarrier(Register object,
                                          const Address& dest,
-                                         const Object& value) {
+                                         const Object& value,
+                                         MemoryOrder memory_order) {
   ASSERT(IsOriginalObject(value));
+  // Ignoring memory_order.
+  // On intel stores have store-release behavior (i.e. stores are not
+  // re-ordered with other stores).
+  // We don't run TSAN on 32 bit systems.
+  // Don't call StoreRelease here because we would have to load the immediate
+  // into a temp register which causes spilling.
+#if defined(USING_THREAD_SANITIZER)
+  if (memory_order == kRelease) {
+    UNIMPLEMENTED();
+  }
+#endif
   if (target::CanEmbedAsRawPointerInGeneratedCode(value)) {
     Immediate imm_value(target::ToRawPointer(value));
     movl(dest, imm_value);
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.h b/runtime/vm/compiler/assembler/assembler_ia32.h
index 091b2a1..da68e52 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.h
+++ b/runtime/vm/compiler/assembler/assembler_ia32.h
@@ -672,10 +672,14 @@
     // with other loads).
     movl(dst, Address(address, offset));
   }
-  void StoreRelease(Register src, Register address, int32_t offset = 0) {
+  void StoreRelease(Register src,
+                    Register address,
+                    int32_t offset = 0) override {
     // On intel stores have store-release behavior (i.e. stores are not
     // re-ordered with other stores).
     movl(Address(address, offset), src);
+
+    // We don't run TSAN on 32 bit systems.
   }
 
   void ExtendValue(Register to, Register from, OperandSize sz) override;
@@ -741,17 +745,21 @@
   void StoreIntoObject(Register object,      // Object we are storing into.
                        const Address& dest,  // Where we are storing into.
                        Register value,       // Value we are storing.
-                       CanBeSmi can_value_be_smi = kValueCanBeSmi) override;
+                       CanBeSmi can_value_be_smi = kValueCanBeSmi,
+                       MemoryOrder memory_order = kRelaxedNonAtomic) override;
   void StoreIntoArray(Register object,  // Object we are storing into.
                       Register slot,    // Where we are storing into.
                       Register value,   // Value we are storing.
                       CanBeSmi can_value_be_smi = kValueCanBeSmi);
+  void StoreIntoObjectNoBarrier(
+      Register object,
+      const Address& dest,
+      Register value,
+      MemoryOrder memory_order = kRelaxedNonAtomic) override;
   void StoreIntoObjectNoBarrier(Register object,
                                 const Address& dest,
-                                Register value) override;
-  void StoreIntoObjectNoBarrier(Register object,
-                                const Address& dest,
-                                const Object& value);
+                                const Object& value,
+                                MemoryOrder memory_order = kRelaxedNonAtomic);
 
   // Stores a non-tagged value into a heap object.
   void StoreInternalPointer(Register object,
diff --git a/runtime/vm/compiler/assembler/assembler_x64.cc b/runtime/vm/compiler/assembler/assembler_x64.cc
index 22b6673..7042a44 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64.cc
@@ -1440,16 +1440,26 @@
 void Assembler::StoreIntoObject(Register object,
                                 const Address& dest,
                                 Register value,
-                                CanBeSmi can_be_smi) {
-  movq(dest, value);
+                                CanBeSmi can_be_smi,
+                                MemoryOrder memory_order) {
+  if (memory_order == kRelease) {
+    StoreRelease(value, dest.base(), dest.disp32());
+  } else {
+    movq(dest, value);
+  }
   StoreBarrier(object, value, can_be_smi);
 }
 
 void Assembler::StoreCompressedIntoObject(Register object,
                                           const Address& dest,
                                           Register value,
-                                          CanBeSmi can_be_smi) {
-  OBJ(mov)(dest, value);
+                                          CanBeSmi can_be_smi,
+                                          MemoryOrder memory_order) {
+  if (memory_order == kRelease) {
+    StoreReleaseCompressed(value, dest.base(), dest.disp8());
+  } else {
+    OBJ(mov)(dest, value);
+  }
   StoreBarrier(object, value, can_be_smi);
 }
 
@@ -1560,8 +1570,13 @@
 
 void Assembler::StoreIntoObjectNoBarrier(Register object,
                                          const Address& dest,
-                                         Register value) {
-  movq(dest, value);
+                                         Register value,
+                                         MemoryOrder memory_order) {
+  if (memory_order == kRelease) {
+    StoreRelease(value, dest.base(), dest.disp32());
+  } else {
+    movq(dest, value);
+  }
 #if defined(DEBUG)
   Label done;
   pushq(value);
@@ -1580,8 +1595,13 @@
 
 void Assembler::StoreCompressedIntoObjectNoBarrier(Register object,
                                                    const Address& dest,
-                                                   Register value) {
-  OBJ(mov)(dest, value);
+                                                   Register value,
+                                                   MemoryOrder memory_order) {
+  if (memory_order == kRelease) {
+    StoreReleaseCompressed(value, dest.base(), dest.disp8());
+  } else {
+    OBJ(mov)(dest, value);
+  }
 #if defined(DEBUG)
   Label done;
   pushq(value);
@@ -1600,15 +1620,22 @@
 
 void Assembler::StoreIntoObjectNoBarrier(Register object,
                                          const Address& dest,
-                                         const Object& value) {
-  StoreObject(dest, value);
+                                         const Object& value,
+                                         MemoryOrder memory_order) {
+  if (memory_order == kRelease) {
+    LoadObject(TMP, value);
+    StoreIntoObjectNoBarrier(object, dest, TMP, memory_order);
+  } else {
+    StoreObject(dest, value);
+  }
 }
 
 void Assembler::StoreCompressedIntoObjectNoBarrier(Register object,
                                                    const Address& dest,
-                                                   const Object& value) {
+                                                   const Object& value,
+                                                   MemoryOrder memory_order) {
   LoadObject(TMP, value);
-  StoreCompressedIntoObjectNoBarrier(object, dest, TMP);
+  StoreCompressedIntoObjectNoBarrier(object, dest, TMP, memory_order);
 }
 
 void Assembler::StoreInternalPointer(Register object,
diff --git a/runtime/vm/compiler/assembler/assembler_x64.h b/runtime/vm/compiler/assembler/assembler_x64.h
index e32a0a4..32646c9 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.h
+++ b/runtime/vm/compiler/assembler/assembler_x64.h
@@ -789,12 +789,14 @@
   void StoreIntoObject(Register object,      // Object we are storing into.
                        const Address& dest,  // Where we are storing into.
                        Register value,       // Value we are storing.
-                       CanBeSmi can_be_smi = kValueCanBeSmi) override;
+                       CanBeSmi can_be_smi = kValueCanBeSmi,
+                       MemoryOrder memory_order = kRelaxedNonAtomic) override;
   void StoreCompressedIntoObject(
       Register object,      // Object we are storing into.
       const Address& dest,  // Where we are storing into.
       Register value,       // Value we are storing.
-      CanBeSmi can_be_smi = kValueCanBeSmi) override;
+      CanBeSmi can_be_smi = kValueCanBeSmi,
+      MemoryOrder memory_order = kRelaxedNonAtomic) override;
   void StoreBarrier(Register object,  // Object we are storing into.
                     Register value,   // Value we are storing.
                     CanBeSmi can_be_smi);
@@ -807,18 +809,25 @@
                                 Register value,   // Value we are storing.
                                 CanBeSmi can_be_smi = kValueCanBeSmi);
 
+  void StoreIntoObjectNoBarrier(
+      Register object,
+      const Address& dest,
+      Register value,
+      MemoryOrder memory_order = kRelaxedNonAtomic) override;
+  void StoreCompressedIntoObjectNoBarrier(
+      Register object,
+      const Address& dest,
+      Register value,
+      MemoryOrder memory_order = kRelaxedNonAtomic) override;
   void StoreIntoObjectNoBarrier(Register object,
                                 const Address& dest,
-                                Register value) override;
-  void StoreCompressedIntoObjectNoBarrier(Register object,
-                                          const Address& dest,
-                                          Register value) override;
-  void StoreIntoObjectNoBarrier(Register object,
-                                const Address& dest,
-                                const Object& value);
-  void StoreCompressedIntoObjectNoBarrier(Register object,
-                                          const Address& dest,
-                                          const Object& value);
+                                const Object& value,
+                                MemoryOrder memory_order = kRelaxedNonAtomic);
+  void StoreCompressedIntoObjectNoBarrier(
+      Register object,
+      const Address& dest,
+      const Object& value,
+      MemoryOrder memory_order = kRelaxedNonAtomic);
 
   // Stores a non-tagged value into a heap object.
   void StoreInternalPointer(Register object,
@@ -1063,7 +1072,9 @@
     TsanLoadAcquire(Address(address, offset));
 #endif
   }
-  void StoreRelease(Register src, Register address, int32_t offset = 0) {
+  void StoreRelease(Register src,
+                    Register address,
+                    int32_t offset = 0) override {
     // On intel stores have store-release behavior (i.e. stores are not
     // re-ordered with other stores).
     movq(Address(address, offset), src);
@@ -1071,6 +1082,16 @@
     TsanStoreRelease(Address(address, offset));
 #endif
   }
+  void StoreReleaseCompressed(Register src,
+                              Register address,
+                              int32_t offset = 0) {
+    // On intel stores have store-release behavior (i.e. stores are not
+    // re-ordered with other stores).
+    OBJ(mov)(Address(address, offset), src);
+#if defined(USING_THREAD_SANITIZER)
+    TsanStoreRelease(Address(address, offset));
+#endif
+  }
 
   void CompareWithFieldValue(Register value, FieldAddress address) {
     cmpq(value, address);
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index d15f357..215b0cc 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -2825,6 +2825,7 @@
       switch (call->function().recognized_kind()) {
         case MethodRecognizer::kByteDataFactory:
         case MethodRecognizer::kLinkedHashBase_getData:
+        case MethodRecognizer::kImmutableLinkedHashBase_getData:
           return flow_graph->constant_null();
         default:
           break;
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index f28d741..38823bd 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -5354,10 +5354,13 @@
                           Value* value,
                           StoreBarrierType emit_store_barrier,
                           const InstructionSource& source,
-                          Kind kind = Kind::kOther)
+                          Kind kind = Kind::kOther,
+                          compiler::Assembler::MemoryOrder memory_order =
+                              compiler::Assembler::kRelaxedNonAtomic)
       : TemplateInstruction(source),
         slot_(slot),
         emit_store_barrier_(emit_store_barrier),
+        memory_order_(memory_order),
         token_pos_(source.token_pos),
         is_initialization_(kind == Kind::kInitializing) {
     SetInputAt(kInstancePos, instance);
@@ -5464,6 +5467,7 @@
 
   const Slot& slot_;
   StoreBarrierType emit_store_barrier_;
+  compiler::Assembler::MemoryOrder memory_order_;
   const TokenPosition token_pos_;
   // Marks initializing stores. E.g. in the constructor.
   const bool is_initialization_;
diff --git a/runtime/vm/compiler/backend/il_arm.cc b/runtime/vm/compiler/backend/il_arm.cc
index 7b56c73..b211af2 100644
--- a/runtime/vm/compiler/backend/il_arm.cc
+++ b/runtime/vm/compiler/backend/il_arm.cc
@@ -156,8 +156,9 @@
 LocationSummary* MemoryCopyInstr::MakeLocationSummary(Zone* zone,
                                                       bool opt) const {
   const intptr_t kNumInputs = 5;
-  const intptr_t kNumTemps =
-      element_size_ == 16 ? 4 : element_size_ == 8 ? 2 : 1;
+  const intptr_t kNumTemps = element_size_ == 16  ? 4
+                             : element_size_ == 8 ? 2
+                                                  : 1;
   LocationSummary* locs = new (zone)
       LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
   locs->set_in(kSrcPos, Location::WritableRegister());
@@ -2841,6 +2842,7 @@
   ASSERT(offset_in_bytes > 0);  // Field is finalized and points after header.
 
   if (slot().representation() != kTagged) {
+    ASSERT(memory_order_ != compiler::AssemblerBase::kRelease);
     auto const rep = slot().representation();
     ASSERT(RepresentationUtils::IsUnboxedInteger(rep));
     const size_t value_size = RepresentationUtils::ValueSize(rep);
@@ -2862,6 +2864,7 @@
   }
 
   if (IsUnboxedDartFieldStore() && compiler->is_optimizing()) {
+    ASSERT(memory_order_ != compiler::AssemblerBase::kRelease);
     const intptr_t cid = slot().field().UnboxedFieldCid();
     const DRegister value = EvenDRegisterOf(locs()->in(kValuePos).fpu_reg());
 
@@ -2940,6 +2943,7 @@
   }
 
   if (IsPotentialUnboxedDartFieldStore()) {
+    ASSERT(memory_order_ != compiler::AssemblerBase::kRelease);
     const Register value_reg = locs()->in(kValuePos).reg();
     const Register temp = locs()->temp(0).reg();
     const Register temp2 = locs()->temp(1).reg();
@@ -3021,15 +3025,16 @@
   if (ShouldEmitStoreBarrier()) {
     const Register value_reg = locs()->in(kValuePos).reg();
     __ StoreIntoObjectOffset(instance_reg, offset_in_bytes, value_reg,
-                             CanValueBeSmi());
+                             CanValueBeSmi(), memory_order_);
   } else {
     if (locs()->in(kValuePos).IsConstant()) {
       __ StoreIntoObjectNoBarrierOffset(instance_reg, offset_in_bytes,
-                                        locs()->in(kValuePos).constant());
+                                        locs()->in(kValuePos).constant(),
+                                        memory_order_);
     } else {
       const Register value_reg = locs()->in(kValuePos).reg();
       __ StoreIntoObjectNoBarrierOffset(instance_reg, offset_in_bytes,
-                                        value_reg);
+                                        value_reg, memory_order_);
     }
   }
   __ Bind(&skip_store);
@@ -5681,7 +5686,7 @@
 void MathMinMaxInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   ASSERT((op_kind() == MethodRecognizer::kMathMin) ||
          (op_kind() == MethodRecognizer::kMathMax));
-  const intptr_t is_min = (op_kind() == MethodRecognizer::kMathMin);
+  const bool is_min = (op_kind() == MethodRecognizer::kMathMin);
   if (result_cid() == kDoubleCid) {
     compiler::Label done, returns_nan, are_equal;
     const DRegister left = EvenDRegisterOf(locs()->in(0).fpu_reg());
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index cf075b0..0a7f6fa 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -2410,6 +2410,7 @@
   ASSERT(offset_in_bytes > 0);  // Field is finalized and points after header.
 
   if (slot().representation() != kTagged) {
+    ASSERT(memory_order_ != compiler::AssemblerBase::kRelease);
     ASSERT(RepresentationUtils::IsUnboxedInteger(slot().representation()));
     const Register value = locs()->in(kValuePos).reg();
     __ Comment("NativeUnboxedStoreInstanceFieldInstr");
@@ -2420,6 +2421,7 @@
   }
 
   if (IsUnboxedDartFieldStore() && compiler->is_optimizing()) {
+    ASSERT(memory_order_ != compiler::AssemblerBase::kRelease);
     const VRegister value = locs()->in(kValuePos).fpu_reg();
     const intptr_t cid = slot().field().UnboxedFieldCid();
 
@@ -2489,6 +2491,7 @@
   }
 
   if (IsPotentialUnboxedDartFieldStore()) {
+    ASSERT(memory_order_ != compiler::AssemblerBase::kRelease);
     const Register value_reg = locs()->in(kValuePos).reg();
     const Register temp = locs()->temp(0).reg();
     const Register temp2 = locs()->temp(1).reg();
@@ -2574,28 +2577,30 @@
     const Register value_reg = locs()->in(kValuePos).reg();
     if (!compressed) {
       __ StoreIntoObjectOffset(instance_reg, offset_in_bytes, value_reg,
-                               CanValueBeSmi());
+                               CanValueBeSmi(), memory_order_);
     } else {
       __ StoreCompressedIntoObjectOffset(instance_reg, offset_in_bytes,
-                                         value_reg, CanValueBeSmi());
+                                         value_reg, CanValueBeSmi(),
+                                         memory_order_);
     }
   } else {
     if (locs()->in(kValuePos).IsConstant()) {
       const auto& value = locs()->in(kValuePos).constant();
       if (!compressed) {
-        __ StoreIntoObjectOffsetNoBarrier(instance_reg, offset_in_bytes, value);
+        __ StoreIntoObjectOffsetNoBarrier(instance_reg, offset_in_bytes, value,
+                                          memory_order_);
       } else {
-        __ StoreCompressedIntoObjectOffsetNoBarrier(instance_reg,
-                                                    offset_in_bytes, value);
+        __ StoreCompressedIntoObjectOffsetNoBarrier(
+            instance_reg, offset_in_bytes, value, memory_order_);
       }
     } else {
       const Register value_reg = locs()->in(kValuePos).reg();
       if (!compressed) {
         __ StoreIntoObjectOffsetNoBarrier(instance_reg, offset_in_bytes,
-                                          value_reg);
+                                          value_reg, memory_order_);
       } else {
-        __ StoreCompressedIntoObjectOffsetNoBarrier(instance_reg,
-                                                    offset_in_bytes, value_reg);
+        __ StoreCompressedIntoObjectOffsetNoBarrier(
+            instance_reg, offset_in_bytes, value_reg, memory_order_);
       }
     }
   }
@@ -4008,10 +4013,9 @@
                                      !stubs_in_vm_isolate;
   LocationSummary* summary = new (zone) LocationSummary(
       zone, kNumInputs, kNumTemps,
-      ValueFitsSmi()
-          ? LocationSummary::kNoCall
-          : shared_slow_path_call ? LocationSummary::kCallOnSharedSlowPath
-                                  : LocationSummary::kCallOnSlowPath);
+      ValueFitsSmi()          ? LocationSummary::kNoCall
+      : shared_slow_path_call ? LocationSummary::kCallOnSharedSlowPath
+                              : LocationSummary::kCallOnSlowPath);
   summary->set_in(0, Location::RequiresRegister());
   if (ValueFitsSmi()) {
     summary->set_out(0, Location::RequiresRegister());
@@ -4727,7 +4731,7 @@
 void MathMinMaxInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   ASSERT((op_kind() == MethodRecognizer::kMathMin) ||
          (op_kind() == MethodRecognizer::kMathMax));
-  const intptr_t is_min = (op_kind() == MethodRecognizer::kMathMin);
+  const bool is_min = (op_kind() == MethodRecognizer::kMathMin);
   if (result_cid() == kDoubleCid) {
     compiler::Label done, returns_nan, are_equal;
     const VRegister left = locs()->in(0).fpu_reg();
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index 687529e..715362c 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -2135,6 +2135,7 @@
   ASSERT(offset_in_bytes > 0);  // Field is finalized and points after header.
 
   if (slot().representation() != kTagged) {
+    ASSERT(memory_order_ != compiler::AssemblerBase::kRelease);
     auto const rep = slot().representation();
     ASSERT(RepresentationUtils::IsUnboxedInteger(rep));
     const size_t value_size = RepresentationUtils::ValueSize(rep);
@@ -2156,6 +2157,7 @@
   }
 
   if (IsUnboxedDartFieldStore() && compiler->is_optimizing()) {
+    ASSERT(memory_order_ != compiler::AssemblerBase::kRelease);
     XmmRegister value = locs()->in(kValuePos).fpu_reg();
     Register temp = locs()->temp(0).reg();
     Register temp2 = locs()->temp(1).reg();
@@ -2207,6 +2209,7 @@
   }
 
   if (IsPotentialUnboxedDartFieldStore()) {
+    ASSERT(memory_order_ != compiler::AssemblerBase::kRelease);
     __ Comment("PotentialUnboxedStore");
     Register value_reg = locs()->in(kValuePos).reg();
     Register temp = locs()->temp(0).reg();
@@ -2294,17 +2297,17 @@
     Register value_reg = locs()->in(kValuePos).reg();
     __ StoreIntoObject(instance_reg,
                        compiler::FieldAddress(instance_reg, offset_in_bytes),
-                       value_reg, CanValueBeSmi());
+                       value_reg, CanValueBeSmi(), memory_order_);
   } else {
     if (locs()->in(kValuePos).IsConstant()) {
       __ StoreIntoObjectNoBarrier(
           instance_reg, compiler::FieldAddress(instance_reg, offset_in_bytes),
-          locs()->in(kValuePos).constant());
+          locs()->in(kValuePos).constant(), memory_order_);
     } else {
       Register value_reg = locs()->in(kValuePos).reg();
       __ StoreIntoObjectNoBarrier(
           instance_reg, compiler::FieldAddress(instance_reg, offset_in_bytes),
-          value_reg);
+          value_reg, memory_order_);
     }
   }
   __ Bind(&skip_store);
@@ -4833,7 +4836,7 @@
 void MathMinMaxInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   ASSERT((op_kind() == MethodRecognizer::kMathMin) ||
          (op_kind() == MethodRecognizer::kMathMax));
-  const intptr_t is_min = (op_kind() == MethodRecognizer::kMathMin);
+  const bool is_min = (op_kind() == MethodRecognizer::kMathMin);
   if (result_cid() == kDoubleCid) {
     compiler::Label done, returns_nan, are_equal;
     XmmRegister left = locs()->in(0).fpu_reg();
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index da9b346..09a4344 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -2486,6 +2486,7 @@
   ASSERT(offset_in_bytes > 0);  // Field is finalized and points after header.
 
   if (slot().representation() != kTagged) {
+    ASSERT(memory_order_ != compiler::AssemblerBase::kRelease);
     ASSERT(RepresentationUtils::IsUnboxedInteger(slot().representation()));
     const Register value = locs()->in(kValuePos).reg();
     __ Comment("NativeUnboxedStoreInstanceFieldInstr");
@@ -2496,6 +2497,7 @@
   }
 
   if (IsUnboxedDartFieldStore() && compiler->is_optimizing()) {
+    ASSERT(memory_order_ != compiler::AssemblerBase::kRelease);
     XmmRegister value = locs()->in(kValuePos).fpu_reg();
     const intptr_t cid = slot().field().UnboxedFieldCid();
 
@@ -2572,6 +2574,7 @@
   }
 
   if (IsPotentialUnboxedDartFieldStore()) {
+    ASSERT(memory_order_ != compiler::AssemblerBase::kRelease);
     Register value_reg = locs()->in(kValuePos).reg();
     Register temp = locs()->temp(0).reg();
     Register temp2 = locs()->temp(1).reg();
@@ -2659,11 +2662,11 @@
     if (!compressed) {
       __ StoreIntoObject(instance_reg,
                          compiler::FieldAddress(instance_reg, offset_in_bytes),
-                         value_reg, CanValueBeSmi());
+                         value_reg, CanValueBeSmi(), memory_order_);
     } else {
       __ StoreCompressedIntoObject(
           instance_reg, compiler::FieldAddress(instance_reg, offset_in_bytes),
-          value_reg, CanValueBeSmi());
+          value_reg, CanValueBeSmi(), memory_order_);
     }
   } else {
     if (locs()->in(kValuePos).IsConstant()) {
@@ -2671,22 +2674,22 @@
       if (!compressed) {
         __ StoreIntoObjectNoBarrier(
             instance_reg, compiler::FieldAddress(instance_reg, offset_in_bytes),
-            value);
+            value, memory_order_);
       } else {
         __ StoreCompressedIntoObjectNoBarrier(
             instance_reg, compiler::FieldAddress(instance_reg, offset_in_bytes),
-            value);
+            value, memory_order_);
       }
     } else {
       Register value_reg = locs()->in(kValuePos).reg();
       if (!compressed) {
         __ StoreIntoObjectNoBarrier(
             instance_reg, compiler::FieldAddress(instance_reg, offset_in_bytes),
-            value_reg);
+            value_reg, memory_order_);
       } else {
         __ StoreCompressedIntoObjectNoBarrier(
             instance_reg, compiler::FieldAddress(instance_reg, offset_in_bytes),
-            value_reg);
+            value_reg, memory_order_);
       }
     }
   }
diff --git a/runtime/vm/compiler/backend/range_analysis.cc b/runtime/vm/compiler/backend/range_analysis.cc
index 17a1c15..7d35302 100644
--- a/runtime/vm/compiler/backend/range_analysis.cc
+++ b/runtime/vm/compiler/backend/range_analysis.cc
@@ -2789,7 +2789,9 @@
       break;
 
     case Slot::Kind::kLinkedHashBase_index:
+    case Slot::Kind::kImmutableLinkedHashBase_index:
     case Slot::Kind::kLinkedHashBase_data:
+    case Slot::Kind::kImmutableLinkedHashBase_data:
     case Slot::Kind::kGrowableObjectArray_data:
     case Slot::Kind::kContext_parent:
     case Slot::Kind::kTypeArguments:
diff --git a/runtime/vm/compiler/backend/slot.cc b/runtime/vm/compiler/backend/slot.cc
index 9f84201..15f0080 100644
--- a/runtime/vm/compiler/backend/slot.cc
+++ b/runtime/vm/compiler/backend/slot.cc
@@ -201,7 +201,9 @@
       UNBOXED_NATIVE_SLOTS_LIST(UNBOXED_NATIVE_SLOT_CASE)
 #undef UNBOXED_NATIVE_SLOT_CASE
     case Slot::Kind::kLinkedHashBase_index:
+    case Slot::Kind::kImmutableLinkedHashBase_index:
     case Slot::Kind::kLinkedHashBase_data:
+    case Slot::Kind::kImmutableLinkedHashBase_data:
     case Slot::Kind::kLinkedHashBase_hash_mask:
     case Slot::Kind::kLinkedHashBase_used_data:
     case Slot::Kind::kLinkedHashBase_deleted_keys:
diff --git a/runtime/vm/compiler/backend/slot.h b/runtime/vm/compiler/backend/slot.h
index 27adf00..a31e9a9 100644
--- a/runtime/vm/compiler/backend/slot.h
+++ b/runtime/vm/compiler/backend/slot.h
@@ -61,6 +61,8 @@
   V(Closure, UntaggedClosure, function_type_arguments, TypeArguments, FINAL)   \
   V(FunctionType, UntaggedFunctionType, type_parameters, TypeParameters,       \
     FINAL)                                                                     \
+  V(ImmutableLinkedHashBase, UntaggedLinkedHashBase, index,                    \
+    TypedDataUint32Array, VAR)                                                 \
   V(Instance, UntaggedInstance, native_fields_array, Dynamic, VAR)             \
   V(Type, UntaggedType, arguments, TypeArguments, FINAL)                       \
   V(TypeParameters, UntaggedTypeParameters, flags, Array, FINAL)               \
@@ -98,6 +100,8 @@
   V(String, UntaggedString, length, Smi, FINAL)                                \
   V(LinkedHashBase, UntaggedLinkedHashBase, index, TypedDataUint32Array, VAR)  \
   V(LinkedHashBase, UntaggedLinkedHashBase, data, Array, VAR)                  \
+  V(ImmutableLinkedHashBase, UntaggedLinkedHashBase, data, ImmutableArray,     \
+    FINAL)                                                                     \
   V(LinkedHashBase, UntaggedLinkedHashBase, hash_mask, Smi, VAR)               \
   V(LinkedHashBase, UntaggedLinkedHashBase, used_data, Smi, VAR)               \
   V(LinkedHashBase, UntaggedLinkedHashBase, deleted_keys, Smi, VAR)            \
diff --git a/runtime/vm/compiler/frontend/base_flow_graph_builder.cc b/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
index a34ae49..34d3ebf 100644
--- a/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
@@ -506,7 +506,8 @@
     const Slot& slot,
     StoreInstanceFieldInstr::Kind
         kind /* = StoreInstanceFieldInstr::Kind::kOther */,
-    StoreBarrierType emit_store_barrier /* = kEmitStoreBarrier */) {
+    StoreBarrierType emit_store_barrier /* = kEmitStoreBarrier */,
+    compiler::Assembler::MemoryOrder memory_order /* = kRelaxed */) {
   Value* value = Pop();
   if (value->BindsToConstant()) {
     emit_store_barrier = kNoStoreBarrier;
diff --git a/runtime/vm/compiler/frontend/base_flow_graph_builder.h b/runtime/vm/compiler/frontend/base_flow_graph_builder.h
index 93875e0..2ca80a6 100644
--- a/runtime/vm/compiler/frontend/base_flow_graph_builder.h
+++ b/runtime/vm/compiler/frontend/base_flow_graph_builder.h
@@ -196,14 +196,18 @@
       const Slot& slot,
       StoreInstanceFieldInstr::Kind kind =
           StoreInstanceFieldInstr::Kind::kOther,
-      StoreBarrierType emit_store_barrier = kEmitStoreBarrier);
+      StoreBarrierType emit_store_barrier = kEmitStoreBarrier,
+      compiler::Assembler::MemoryOrder memory_order =
+          compiler::Assembler::kRelaxedNonAtomic);
   Fragment StoreNativeField(
       const Slot& slot,
       StoreInstanceFieldInstr::Kind kind =
           StoreInstanceFieldInstr::Kind::kOther,
-      StoreBarrierType emit_store_barrier = kEmitStoreBarrier) {
+      StoreBarrierType emit_store_barrier = kEmitStoreBarrier,
+      compiler::Assembler::MemoryOrder memory_order =
+          compiler::Assembler::kRelaxedNonAtomic) {
     return StoreNativeField(TokenPosition::kNoSource, slot, kind,
-                            emit_store_barrier);
+                            emit_store_barrier, memory_order);
   }
   Fragment StoreInstanceField(
       const Field& field,
diff --git a/runtime/vm/compiler/frontend/constant_reader.cc b/runtime/vm/compiler/frontend/constant_reader.cc
index 22efe3c..2ed7d14 100644
--- a/runtime/vm/compiler/frontend/constant_reader.cc
+++ b/runtime/vm/compiler/frontend/constant_reader.cc
@@ -4,6 +4,8 @@
 
 #include "vm/compiler/frontend/constant_reader.h"
 
+#include "vm/object_store.h"
+
 namespace dart {
 namespace kernel {
 
@@ -226,9 +228,9 @@
       break;
     }
     case kListConstant: {
-      const auto& corelib = Library::Handle(Z, Library::CoreLibrary());
-      const auto& list_class =
-          Class::Handle(Z, corelib.LookupClassAllowPrivate(Symbols::_List()));
+      const auto& list_class = Class::Handle(
+          Z, H.isolate_group()->object_store()->immutable_array_class());
+      ASSERT(!list_class.IsNull());
       // Build type from the raw bytes (needs temporary translator).
       TypeTranslator type_translator(
           &reader, this, active_class_, /* finalize = */ true,
@@ -259,6 +261,108 @@
       instance = array.ptr();
       break;
     }
+    case kMapConstant: {
+      const auto& map_class = Class::Handle(
+          Z,
+          H.isolate_group()->object_store()->immutable_linked_hash_map_class());
+      ASSERT(!map_class.IsNull());
+
+      // Build types from the raw bytes (needs temporary translator).
+      TypeTranslator type_translator(
+          &reader, this, active_class_, /* finalize = */ true,
+          active_class_->RequireConstCanonicalTypeErasure(null_safety),
+          /* in_constant_context = */ true);
+      auto& type_arguments =
+          TypeArguments::Handle(Z, TypeArguments::New(2, Heap::kOld));
+      AbstractType& type = type_translator.BuildType();
+      type_arguments.SetTypeAt(0, type);
+      type = type_translator.BuildType().ptr();
+      type_arguments.SetTypeAt(1, type);
+
+      // Instantiate class.
+      type = Type::New(map_class, type_arguments);
+      type = ClassFinalizer::FinalizeType(type, ClassFinalizer::kCanonicalize);
+      type_arguments = type.arguments();
+
+      // Fill map with constant elements.
+      const auto& map = LinkedHashMap::Handle(
+          Z, ImmutableLinkedHashMap::NewUninitialized(Heap::kOld));
+      ASSERT_EQUAL(map.GetClassId(), kImmutableLinkedHashMapCid);
+      map.SetTypeArguments(type_arguments);
+      const intptr_t length = reader.ReadUInt();
+      const intptr_t used_data = (length << 1);
+      map.set_used_data(used_data);
+
+      const intptr_t data_size = Utils::RoundUpToPowerOfTwo(used_data);
+      const auto& data = Array::Handle(Z, Array::New(data_size));
+      map.set_data(data);
+
+      map.set_deleted_keys(0);
+      map.ComputeAndSetHashMask();
+
+      Instance& constant = Instance::Handle(Z);
+      for (intptr_t j = 0; j < used_data; ++j) {
+        // Recurse into lazily evaluating all "sub" constants
+        // needed to evaluate the current constant.
+        const intptr_t entry_index = reader.ReadUInt();
+        ASSERT(entry_index < constant_offset);  // DAG!
+        constant = ReadConstant(entry_index);
+        data.SetAt(j, constant);
+      }
+
+      instance = map.ptr();
+      break;
+    }
+    case kSetConstant: {
+      const auto& set_class = Class::Handle(
+          Z,
+          H.isolate_group()->object_store()->immutable_linked_hash_set_class());
+      ASSERT(!set_class.IsNull());
+
+      // Build types from the raw bytes (needs temporary translator).
+      TypeTranslator type_translator(
+          &reader, this, active_class_, /* finalize = */ true,
+          active_class_->RequireConstCanonicalTypeErasure(null_safety),
+          /* in_constant_context = */ true);
+      auto& type_arguments =
+          TypeArguments::Handle(Z, TypeArguments::New(1, Heap::kOld));
+      AbstractType& type = type_translator.BuildType();
+      type_arguments.SetTypeAt(0, type);
+
+      // Instantiate class.
+      type = Type::New(set_class, type_arguments);
+      type = ClassFinalizer::FinalizeType(type, ClassFinalizer::kCanonicalize);
+      type_arguments = type.arguments();
+
+      // Fill set with constant elements.
+      const auto& set = LinkedHashSet::Handle(
+          Z, ImmutableLinkedHashSet::NewUninitialized(Heap::kOld));
+      ASSERT_EQUAL(set.GetClassId(), kImmutableLinkedHashSetCid);
+      set.SetTypeArguments(type_arguments);
+      const intptr_t length = reader.ReadUInt();
+      const intptr_t used_data = length;
+      set.set_used_data(used_data);
+
+      const intptr_t data_size = Utils::RoundUpToPowerOfTwo(used_data);
+      const auto& data = Array::Handle(Z, Array::New(data_size));
+      set.set_data(data);
+
+      set.set_deleted_keys(0);
+      set.ComputeAndSetHashMask();
+
+      Instance& constant = Instance::Handle(Z);
+      for (intptr_t j = 0; j < used_data; ++j) {
+        // Recurse into lazily evaluating all "sub" constants
+        // needed to evaluate the current constant.
+        const intptr_t entry_index = reader.ReadUInt();
+        ASSERT(entry_index < constant_offset);  // DAG!
+        constant = ReadConstant(entry_index);
+        data.SetAt(j, constant);
+      }
+
+      instance = set.ptr();
+      break;
+    }
     case kInstanceConstant: {
       const NameIndex index = reader.ReadCanonicalNameReference();
       const auto& klass = Class::Handle(Z, H.LookupClassByKernelClass(index));
@@ -374,12 +478,9 @@
       break;
     }
     default:
-      // Set literals (kSetConstant) are currently desugared in the frontend
-      // and will not reach the VM. See http://dartbug.com/35124 for some
-      // discussion. Map constants (kMapConstant ) are already lowered to
-      // InstanceConstant or ListConstant. We should never see unevaluated
-      // constants (kUnevaluatedConstant) in the constant table, they should
-      // have been fully evaluated before we get them.
+      // We should never see unevaluated constants (kUnevaluatedConstant) in
+      // the constant table, they should have been fully evaluated before we
+      // get them.
       H.ReportError(script_, TokenPosition::kNoSource,
                     "Cannot lazily read constant: unexpected kernel tag (%" Pd
                     ")",
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index ad2f103..52d7171 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -883,6 +883,9 @@
     case MethodRecognizer::kLinkedHashBase_setUsedData:
     case MethodRecognizer::kLinkedHashBase_getDeletedKeys:
     case MethodRecognizer::kLinkedHashBase_setDeletedKeys:
+    case MethodRecognizer::kImmutableLinkedHashBase_getData:
+    case MethodRecognizer::kImmutableLinkedHashBase_getIndex:
+    case MethodRecognizer::kImmutableLinkedHashBase_setIndexStoreRelease:
     case MethodRecognizer::kWeakProperty_getKey:
     case MethodRecognizer::kWeakProperty_setKey:
     case MethodRecognizer::kWeakProperty_getValue:
@@ -1190,6 +1193,11 @@
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadNativeField(Slot::LinkedHashBase_index());
       break;
+    case MethodRecognizer::kImmutableLinkedHashBase_getIndex:
+      ASSERT_EQUAL(function.NumParameters(), 1);
+      body += LoadLocal(parsed_function_->RawParameterVariable(0));
+      body += LoadNativeField(Slot::ImmutableLinkedHashBase_index());
+      break;
     case MethodRecognizer::kLinkedHashBase_setIndex:
       ASSERT_EQUAL(function.NumParameters(), 2);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
@@ -1197,11 +1205,28 @@
       body += StoreNativeField(Slot::LinkedHashBase_index());
       body += NullConstant();
       break;
+    case MethodRecognizer::kImmutableLinkedHashBase_setIndexStoreRelease:
+      ASSERT_EQUAL(function.NumParameters(), 2);
+      body += LoadLocal(parsed_function_->RawParameterVariable(0));
+      body += LoadLocal(parsed_function_->RawParameterVariable(1));
+      // Uses a store-release barrier so that other isolates will see the
+      // contents of the index after seeing the index itself.
+      body +=
+          StoreNativeField(Slot::ImmutableLinkedHashBase_index(),
+                           StoreInstanceFieldInstr::Kind::kOther,
+                           kEmitStoreBarrier, compiler::Assembler::kRelease);
+      body += NullConstant();
+      break;
     case MethodRecognizer::kLinkedHashBase_getData:
       ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadNativeField(Slot::LinkedHashBase_data());
       break;
+    case MethodRecognizer::kImmutableLinkedHashBase_getData:
+      ASSERT(function.NumParameters() == 1);
+      body += LoadLocal(parsed_function_->RawParameterVariable(0));
+      body += LoadNativeField(Slot::ImmutableLinkedHashBase_data());
+      break;
     case MethodRecognizer::kLinkedHashBase_setData:
       ASSERT_EQUAL(function.NumParameters(), 2);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index a3b4dc2..af78cd4 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -27,6 +27,7 @@
     : thread_(thread),
       zone_(thread->zone()),
       isolate_(thread->isolate()),
+      isolate_group_(thread->isolate_group()),
       allocation_space_(Heap::kNew),
       string_offsets_(TypedData::Handle(Z)),
       string_data_(ExternalTypedData::Handle(Z)),
@@ -42,6 +43,7 @@
     : thread_(thread),
       zone_(thread->zone()),
       isolate_(thread->isolate()),
+      isolate_group_(thread->isolate_group()),
       allocation_space_(space),
       string_offsets_(TypedData::Handle(Z)),
       string_data_(ExternalTypedData::Handle(Z)),
@@ -2180,7 +2182,7 @@
 
 void KernelReaderHelper::SkipInterfaceType(bool simple) {
   ReadNullability();  // read nullability.
-  ReadUInt();  // read klass_name.
+  ReadUInt();         // read klass_name.
   if (!simple) {
     SkipListOfDartTypes();  // read list of types.
   }
@@ -2364,14 +2366,14 @@
       SkipExpression();  // read value.
       return;
     case kSuperPropertyGet:
-      ReadPosition();                // read position.
-      SkipName();                    // read name.
+      ReadPosition();                      // read position.
+      SkipName();                          // read name.
       SkipInterfaceMemberNameReference();  // read interface_target_reference.
       return;
     case kSuperPropertySet:
-      ReadPosition();                // read position.
-      SkipName();                    // read name.
-      SkipExpression();              // read value.
+      ReadPosition();                      // read position.
+      SkipName();                          // read name.
+      SkipExpression();                    // read value.
       SkipInterfaceMemberNameReference();  // read interface_target_reference.
       return;
     case kStaticGet:
@@ -2426,9 +2428,9 @@
       SkipExpression();  // read expression.
       return;
     case kSuperMethodInvocation:
-      ReadPosition();                // read position.
-      SkipName();                    // read name.
-      SkipArguments();               // read arguments.
+      ReadPosition();                      // read position.
+      SkipName();                          // read name.
+      SkipArguments();                     // read arguments.
       SkipInterfaceMemberNameReference();  // read interface_target_reference.
       return;
     case kStaticInvocation:
@@ -2464,7 +2466,7 @@
       SkipListOfExpressions();  // read list of expressions.
       return;
     case kIsExpression:
-      ReadPosition();    // read position.
+      ReadPosition();  // read position.
       if (translation_helper_.info().kernel_binary_version() >= 38) {
         SkipFlags();  // read flags.
       }
@@ -2852,8 +2854,8 @@
   // can store them as tighly as possible.
   AlternativeReadingScope alt(&reader_);
   SetOffset(GetOffsetForSourceInfo(index));
-  SkipBytes(ReadUInt());                         // skip uri.
-  SkipBytes(ReadUInt());                         // skip source.
+  SkipBytes(ReadUInt());  // skip uri.
+  SkipBytes(ReadUInt());  // skip source.
   const intptr_t line_start_count = ReadUInt();
   return reader_.ReadLineStartsData(line_start_count);
 }
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.h b/runtime/vm/compiler/frontend/kernel_translation_helper.h
index e9a4807..39d9d18 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.h
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.h
@@ -41,6 +41,8 @@
 
   Isolate* isolate() { return isolate_; }
 
+  IsolateGroup* isolate_group() { return isolate_group_; }
+
   Heap::Space allocation_space() { return allocation_space_; }
 
   // Access to strings.
@@ -232,6 +234,7 @@
   Thread* thread_;
   Zone* zone_;
   Isolate* isolate_;
+  IsolateGroup* isolate_group_;
   Heap::Space allocation_space_;
 
   TypedData& string_offsets_;
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index 3142cb9..554d11b 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -13,7 +13,7 @@
 // debug mode to get the correct fingerprint from the mismatch error.
 #define OTHER_RECOGNIZED_LIST(V)                                               \
   V(::, identical, ObjectIdentical, 0x04168315)                                \
-  V(ClassID, getID, ClassIDgetID, 0xbe1d6669)                                  \
+  V(ClassID, getID, ClassIDgetID, 0xdc8b888a)                                  \
   V(Object, Object., ObjectConstructor, 0xab6d6cfa)                            \
   V(List, ., ListFactory, 0xbc820cf9)                                          \
   V(_List, ., ObjectArrayAllocate, 0xd693eee6)                                 \
@@ -174,6 +174,12 @@
   V(_HashVMBase, set:_hashMask, LinkedHashBase_setHashMask, 0xbbcebb58)        \
   V(_HashVMBase, get:_deletedKeys, LinkedHashBase_getDeletedKeys, 0x510dc4a0)  \
   V(_HashVMBase, set:_deletedKeys, LinkedHashBase_setDeletedKeys, 0xbdcdb85c)  \
+  V(_HashVMImmutableBase, get:_data, ImmutableLinkedHashBase_getData,          \
+    0x780e14ad)                                                                \
+  V(_HashVMImmutableBase, get:_indexNullable,                                  \
+    ImmutableLinkedHashBase_getIndex, 0xfd877bfb)                              \
+  V(_HashVMImmutableBase, set:_index,                                          \
+    ImmutableLinkedHashBase_setIndexStoreRelease, 0xa2be9418)                  \
   V(_WeakProperty, get:key, WeakProperty_getKey, 0xde00e462)                   \
   V(_WeakProperty, set:key, WeakProperty_setKey, 0x963a095f)                   \
   V(_WeakProperty, get:value, WeakProperty_getValue, 0xd2f28aae)               \
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index ba5d79b..d2e9510 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -648,6 +648,12 @@
   static word InstanceSize();
 };
 
+class ImmutableLinkedHashBase : public LinkedHashBase {
+ public:
+  // The data slot is an immutable list and final in immutable maps and sets.
+  static word data_offset();
+};
+
 class LinkedHashMap : public LinkedHashBase {
  public:
   FINAL_CLASS();
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index 8598191..72ec4ff 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -197,6 +197,8 @@
 static constexpr dart::compiler::target::word Isolate_user_tag_offset = 20;
 static constexpr dart::compiler::target::word LinkedHashBase_data_offset = 12;
 static constexpr dart::compiler::target::word
+    ImmutableLinkedHashBase_data_offset = 12;
+static constexpr dart::compiler::target::word
     LinkedHashBase_deleted_keys_offset = 20;
 static constexpr dart::compiler::target::word LinkedHashBase_hash_mask_offset =
     8;
@@ -742,6 +744,8 @@
 static constexpr dart::compiler::target::word Isolate_user_tag_offset = 40;
 static constexpr dart::