Version 2.13.0-192.0.dev
Merge commit 'd5f3189c91c289b8567d9bea7c36d3f427dd403d' into 'dev'
diff --git a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
index fc66822..9bae526 100644
--- a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
@@ -312,6 +312,9 @@
DemoteViaExplicitWrite(this.variable, this.writeExpression);
@override
+ String get documentationLink => 'http://dart.dev/go/non-promo-write';
+
+ @override
String get shortName => 'explicitWrite';
@override
@@ -340,6 +343,9 @@
DemoteViaForEachVariableWrite(this.variable, this.node);
@override
+ String get documentationLink => 'http://dart.dev/go/non-promo-write';
+
+ @override
String get shortName => 'explicitWrite';
@override
@@ -2332,6 +2338,11 @@
/// Abstract class representing a reason why something was not promoted.
abstract class NonPromotionReason {
+ /// Link to documentation describing this non-promotion reason; this should be
+ /// presented to the user as a source of additional information about the
+ /// error.
+ String get documentationLink;
+
/// Short text description of this non-promotion reason; intended for ID
/// testing.
String get shortName;
@@ -2372,6 +2383,9 @@
PropertyNotPromoted(this.propertyName, this.staticType);
@override
+ String get documentationLink => 'http://dart.dev/go/non-promo-property';
+
+ @override
String get shortName => 'propertyNotPromoted';
@override
@@ -2607,6 +2621,9 @@
/// promoted due to the fact that it's a reference to `this`.
class ThisNotPromoted extends NonPromotionReason {
@override
+ String get documentationLink => 'http://dart.dev/go/non-promo-this';
+
+ @override
String get shortName => 'thisNotPromoted';
@override
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 96608e0..32b1b05 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -4110,25 +4110,29 @@
tip: r"""Try removing 'this.'.""");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String name)> templateFieldNotPromoted =
- const Template<Message Function(String name)>(
+const Template<Message Function(String name, String string)>
+ templateFieldNotPromoted =
+ const Template<Message Function(String name, String string)>(
messageTemplate:
r"""'#name' refers to a property so it couldn't be promoted.""",
+ tipTemplate: r"""See #string""",
withArguments: _withArgumentsFieldNotPromoted);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String name)> codeFieldNotPromoted =
- const Code<Message Function(String name)>(
+const Code<Message Function(String name, String string)> codeFieldNotPromoted =
+ const Code<Message Function(String name, String string)>(
"FieldNotPromoted",
);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsFieldNotPromoted(String name) {
+Message _withArgumentsFieldNotPromoted(String name, String string) {
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
+ if (string.isEmpty) throw 'No string provided';
return new Message(codeFieldNotPromoted,
message: """'${name}' refers to a property so it couldn't be promoted.""",
- arguments: {'name': name});
+ tip: """See ${string}""",
+ arguments: {'name': name, 'string': string});
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9073,11 +9077,26 @@
tip: r"""Try replacing '?.' with '.'""");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeThisNotPromoted = messageThisNotPromoted;
+const Template<Message Function(String string)> templateThisNotPromoted =
+ const Template<Message Function(String string)>(
+ messageTemplate: r"""'this' can't be promoted.""",
+ tipTemplate: r"""See #string""",
+ withArguments: _withArgumentsThisNotPromoted);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageThisNotPromoted = const MessageCode("ThisNotPromoted",
- message: r"""'this' can't be promoted.""");
+const Code<Message Function(String string)> codeThisNotPromoted =
+ const Code<Message Function(String string)>(
+ "ThisNotPromoted",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsThisNotPromoted(String string) {
+ if (string.isEmpty) throw 'No string provided';
+ return new Message(codeThisNotPromoted,
+ message: """'this' can't be promoted.""",
+ tip: """See ${string}""",
+ arguments: {'string': string});
+}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<Message Function(String string)>
@@ -9688,29 +9707,33 @@
r"""Try removing the keyword 'var', or replacing it with the name of the return type.""");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String name)>
+const Template<Message Function(String name, String string)>
templateVariableCouldBeNullDueToWrite =
- const Template<Message Function(String name)>(
+ const Template<Message Function(String name, String string)>(
messageTemplate:
r"""Variable '#name' could be null due to an intervening write.""",
- tipTemplate: r"""Try null checking the variable after the write.""",
+ tipTemplate:
+ r"""Try null checking the variable after the write. See #string""",
withArguments: _withArgumentsVariableCouldBeNullDueToWrite);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String name)> codeVariableCouldBeNullDueToWrite =
- const Code<Message Function(String name)>(
+const Code<Message Function(String name, String string)>
+ codeVariableCouldBeNullDueToWrite =
+ const Code<Message Function(String name, String string)>(
"VariableCouldBeNullDueToWrite",
);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsVariableCouldBeNullDueToWrite(String name) {
+Message _withArgumentsVariableCouldBeNullDueToWrite(
+ String name, String string) {
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
+ if (string.isEmpty) throw 'No string provided';
return new Message(codeVariableCouldBeNullDueToWrite,
message:
"""Variable '${name}' could be null due to an intervening write.""",
- tip: """Try null checking the variable after the write.""",
- arguments: {'name': name});
+ tip: """Try null checking the variable after the write. See ${string}""",
+ arguments: {'name': name, 'string': string});
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart b/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart
index 31da867..69a138e 100644
--- a/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart
+++ b/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart
@@ -5754,6 +5754,9 @@
}
class _MockNonPromotionReason extends NonPromotionReason {
+ @override
+ String get documentationLink => fail('Unexpected call to documentationLink');
+
String get shortName => fail('Unexpected call to shortName');
R accept<R, Node extends Object, Expression extends Object,
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 997af2c..47f6905 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -3472,7 +3472,7 @@
}
var variableName = reason.variable.name;
if (variableName == null) return null;
- return _contextMessageForWrite(variableName, writeExpression);
+ return _contextMessageForWrite(variableName, writeExpression, reason);
}
@override
@@ -3496,7 +3496,7 @@
_dataForTesting!.nonPromotionReasonTargets[identifier] =
reason.shortName;
}
- return _contextMessageForWrite(variableName, identifier);
+ return _contextMessageForWrite(variableName, identifier, reason);
} else {
assert(false, 'Unexpected parts type');
return null;
@@ -3521,7 +3521,8 @@
if (receiverElement is PropertyAccessorElement) {
propertyReference = receiverElement;
propertyType = reason.staticType;
- return _contextMessageForProperty(receiverElement, reason.propertyName);
+ return _contextMessageForProperty(
+ receiverElement, reason.propertyName, reason);
} else {
assert(receiverElement == null,
'Unrecognized property element: ${receiverElement.runtimeType}');
@@ -3533,27 +3534,29 @@
DiagnosticMessage? visitThisNotPromoted(ThisNotPromoted reason) {
return DiagnosticMessageImpl(
filePath: source.fullName,
- message: "'this' can't be promoted.",
+ message: "'this' can't be promoted. See ${reason.documentationLink}",
offset: _errorEntity.offset,
length: _errorEntity.length);
}
DiagnosticMessageImpl _contextMessageForProperty(
- PropertyAccessorElement property, String propertyName) {
+ PropertyAccessorElement property,
+ String propertyName,
+ NonPromotionReason reason) {
return DiagnosticMessageImpl(
filePath: property.source.fullName,
- message:
- "'$propertyName' refers to a property so it couldn't be promoted.",
+ message: "'$propertyName' refers to a property so it couldn't be "
+ "promoted. See ${reason.documentationLink}",
offset: property.nameOffset,
length: property.nameLength);
}
- DiagnosticMessageImpl _contextMessageForWrite(
- String variableName, Expression writeExpression) {
+ DiagnosticMessageImpl _contextMessageForWrite(String variableName,
+ Expression writeExpression, NonPromotionReason reason) {
return DiagnosticMessageImpl(
filePath: source.fullName,
message: "Variable '$variableName' could be null due to an intervening "
- "write.",
+ "write. See ${reason.documentationLink}",
offset: writeExpression.offset,
length: writeExpression.length);
}
diff --git a/pkg/compiler/pubspec.yaml b/pkg/compiler/pubspec.yaml
index 0f826c1..1073c93 100644
--- a/pkg/compiler/pubspec.yaml
+++ b/pkg/compiler/pubspec.yaml
@@ -31,6 +31,7 @@
dev_dependencies:
# Published packages - repo version ensured via dependency_overrides
args: any
+ dart_style: any
http: any
js:
path: ../js
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib1.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib1.dart
index 91a0c15..5f3aa4b 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib1.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib1.dart
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import 'lib_100_0.dart' deferred as b1;
entryLib1() async {
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib2.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib2.dart
index 37a0a7c..20313e2 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib2.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib2.dart
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import 'lib_010_0.dart' deferred as b2;
entryLib2() async {
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib3.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib3.dart
index 597682a..feeeeff 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib3.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib3.dart
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import 'lib_001_0.dart' deferred as b3;
entryLib3() async {
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib4.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib4.dart
index 41a32f6..fbbe564 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib4.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib4.dart
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import 'lib_000_1.dart' deferred as b4;
entryLib4() async {
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/libImport.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/libImport.dart
index 5731c13..4a2d52a 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/libImport.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/libImport.dart
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import "package:expect/expect.dart";
void v(Set<String> u, String name, int bit) {
@@ -11,6 +10,854 @@
Expect.equals(name[bit], '1');
}
+class C_100_0 {
+ const C_100_0();
+}
+
+class M_100_0 {}
+
+class T_100_0 {}
+
+const C_100_0 iC_100_0 = const C_100_0();
+closureC_100_0(foo) =>
+ (C_100_0 unused) => iC_100_0.toString() == foo.toString();
+
+class C_110_0 {
+ const C_110_0();
+}
+
+class M_110_0 {}
+
+class T_110_0 {}
+
+const C_110_0 iC_110_0 = const C_110_0();
+closureC_110_0(foo) =>
+ (C_110_0 unused) => iC_110_0.toString() == foo.toString();
+
+class C_101_1 {
+ const C_101_1();
+}
+
+class M_101_1 {}
+
+class T_101_1 {}
+
+const C_101_1 iC_101_1 = const C_101_1();
+closureC_101_1(foo) =>
+ (C_101_1 unused) => iC_101_1.toString() == foo.toString();
+
+class C_111_1 {
+ const C_111_1();
+}
+
+class M_111_1 {}
+
+class T_111_1 {}
+
+const C_111_1 iC_111_1 = const C_111_1();
+closureC_111_1(foo) =>
+ (C_111_1 unused) => iC_111_1.toString() == foo.toString();
+
+class C_010_0 {
+ const C_010_0();
+}
+
+class M_010_0 {}
+
+class T_010_0 {}
+
+const C_010_0 iC_010_0 = const C_010_0();
+closureC_010_0(foo) =>
+ (C_010_0 unused) => iC_010_0.toString() == foo.toString();
+
+class C_010_1 {
+ const C_010_1();
+}
+
+class M_010_1 {}
+
+class T_010_1 {}
+
+const C_010_1 iC_010_1 = const C_010_1();
+closureC_010_1(foo) =>
+ (C_010_1 unused) => iC_010_1.toString() == foo.toString();
+
+class C_011_1 {
+ const C_011_1();
+}
+
+class M_011_1 {}
+
+class T_011_1 {}
+
+const C_011_1 iC_011_1 = const C_011_1();
+closureC_011_1(foo) =>
+ (C_011_1 unused) => iC_011_1.toString() == foo.toString();
+
+class C_001_0 {
+ const C_001_0();
+}
+
+class M_001_0 {}
+
+class T_001_0 {}
+
+const C_001_0 iC_001_0 = const C_001_0();
+closureC_001_0(foo) =>
+ (C_001_0 unused) => iC_001_0.toString() == foo.toString();
+
+class C_000_1 {
+ const C_000_1();
+}
+
+class M_000_1 {}
+
+class T_000_1 {}
+
+const C_000_1 iC_000_1 = const C_000_1();
+closureC_000_1(foo) =>
+ (C_000_1 unused) => iC_000_1.toString() == foo.toString();
+
+class C_110_0_class_1 extends C_100_0
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+ implements C_110_0, C_101_1, C_111_1, C_010_0, C_010_1, C_011_1 {
+ const C_110_0_class_1();
+}
+
+const C_110_0_class_1 iC_110_0_class_1 = const C_110_0_class_1();
+closureC_110_0_class_1(foo) =>
+ (C_110_0_class_1 unused) => iC_110_0_class_1.toString() == foo.toString();
+
+class T_110_0_type__1 extends T_100_0
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+ implements T_110_0, T_101_1, T_111_1, T_010_0, T_010_1, T_011_1 {}
+
+class C_110_0_class_2 extends C_110_0
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+ implements C_100_0, C_101_1, C_111_1, C_010_0, C_010_1, C_011_1 {
+ const C_110_0_class_2();
+}
+
+const C_110_0_class_2 iC_110_0_class_2 = const C_110_0_class_2();
+closureC_110_0_class_2(foo) =>
+ (C_110_0_class_2 unused) => iC_110_0_class_2.toString() == foo.toString();
+
+class T_110_0_type__2 extends T_110_0
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+ implements T_100_0, T_101_1, T_111_1, T_010_0, T_010_1, T_011_1 {}
+
+class C_110_0_class_3 extends C_101_1
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+ implements C_100_0, C_110_0, C_111_1, C_010_0, C_010_1, C_011_1 {
+ const C_110_0_class_3();
+}
+
+const C_110_0_class_3 iC_110_0_class_3 = const C_110_0_class_3();
+closureC_110_0_class_3(foo) =>
+ (C_110_0_class_3 unused) => iC_110_0_class_3.toString() == foo.toString();
+
+class T_110_0_type__3 extends T_101_1
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+ implements T_100_0, T_110_0, T_111_1, T_010_0, T_010_1, T_011_1 {}
+
+class C_110_0_class_4 extends C_111_1
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+ implements C_100_0, C_110_0, C_101_1, C_010_0, C_010_1, C_011_1 {
+ const C_110_0_class_4();
+}
+
+const C_110_0_class_4 iC_110_0_class_4 = const C_110_0_class_4();
+closureC_110_0_class_4(foo) =>
+ (C_110_0_class_4 unused) => iC_110_0_class_4.toString() == foo.toString();
+
+class T_110_0_type__4 extends T_111_1
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+ implements T_100_0, T_110_0, T_101_1, T_010_0, T_010_1, T_011_1 {}
+
+class C_110_0_class_5 extends C_010_0
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+ implements C_100_0, C_110_0, C_101_1, C_111_1, C_010_1, C_011_1 {
+ const C_110_0_class_5();
+}
+
+const C_110_0_class_5 iC_110_0_class_5 = const C_110_0_class_5();
+closureC_110_0_class_5(foo) =>
+ (C_110_0_class_5 unused) => iC_110_0_class_5.toString() == foo.toString();
+
+class T_110_0_type__5 extends T_010_0
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+ implements T_100_0, T_110_0, T_101_1, T_111_1, T_010_1, T_011_1 {}
+
+class C_110_0_class_6 extends C_010_1
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+ implements C_100_0, C_110_0, C_101_1, C_111_1, C_010_0, C_011_1 {
+ const C_110_0_class_6();
+}
+
+const C_110_0_class_6 iC_110_0_class_6 = const C_110_0_class_6();
+closureC_110_0_class_6(foo) =>
+ (C_110_0_class_6 unused) => iC_110_0_class_6.toString() == foo.toString();
+
+class T_110_0_type__6 extends T_010_1
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+ implements T_100_0, T_110_0, T_101_1, T_111_1, T_010_0, T_011_1 {}
+
+class C_110_0_class_7 extends C_011_1
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+ implements C_100_0, C_110_0, C_101_1, C_111_1, C_010_0, C_010_1 {
+ const C_110_0_class_7();
+}
+
+const C_110_0_class_7 iC_110_0_class_7 = const C_110_0_class_7();
+closureC_110_0_class_7(foo) =>
+ (C_110_0_class_7 unused) => iC_110_0_class_7.toString() == foo.toString();
+
+class T_110_0_type__7 extends T_011_1
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_010_0, M_010_1, M_011_1
+ implements T_100_0, T_110_0, T_101_1, T_111_1, T_010_0, T_010_1 {}
+
+class C_101_1_class_1 extends C_100_0
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+ implements C_110_0, C_101_1, C_111_1, C_001_0, C_000_1 {
+ const C_101_1_class_1();
+}
+
+const C_101_1_class_1 iC_101_1_class_1 = const C_101_1_class_1();
+closureC_101_1_class_1(foo) =>
+ (C_101_1_class_1 unused) => iC_101_1_class_1.toString() == foo.toString();
+
+class T_101_1_type__1 extends T_100_0
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+ implements T_110_0, T_101_1, T_111_1, T_001_0, T_000_1 {}
+
+class C_101_1_class_2 extends C_110_0
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+ implements C_100_0, C_101_1, C_111_1, C_001_0, C_000_1 {
+ const C_101_1_class_2();
+}
+
+const C_101_1_class_2 iC_101_1_class_2 = const C_101_1_class_2();
+closureC_101_1_class_2(foo) =>
+ (C_101_1_class_2 unused) => iC_101_1_class_2.toString() == foo.toString();
+
+class T_101_1_type__2 extends T_110_0
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+ implements T_100_0, T_101_1, T_111_1, T_001_0, T_000_1 {}
+
+class C_101_1_class_3 extends C_101_1
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+ implements C_100_0, C_110_0, C_111_1, C_001_0, C_000_1 {
+ const C_101_1_class_3();
+}
+
+const C_101_1_class_3 iC_101_1_class_3 = const C_101_1_class_3();
+closureC_101_1_class_3(foo) =>
+ (C_101_1_class_3 unused) => iC_101_1_class_3.toString() == foo.toString();
+
+class T_101_1_type__3 extends T_101_1
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+ implements T_100_0, T_110_0, T_111_1, T_001_0, T_000_1 {}
+
+class C_101_1_class_4 extends C_111_1
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+ implements C_100_0, C_110_0, C_101_1, C_001_0, C_000_1 {
+ const C_101_1_class_4();
+}
+
+const C_101_1_class_4 iC_101_1_class_4 = const C_101_1_class_4();
+closureC_101_1_class_4(foo) =>
+ (C_101_1_class_4 unused) => iC_101_1_class_4.toString() == foo.toString();
+
+class T_101_1_type__4 extends T_111_1
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+ implements T_100_0, T_110_0, T_101_1, T_001_0, T_000_1 {}
+
+class C_101_1_class_5 extends C_001_0
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+ implements C_100_0, C_110_0, C_101_1, C_111_1, C_000_1 {
+ const C_101_1_class_5();
+}
+
+const C_101_1_class_5 iC_101_1_class_5 = const C_101_1_class_5();
+closureC_101_1_class_5(foo) =>
+ (C_101_1_class_5 unused) => iC_101_1_class_5.toString() == foo.toString();
+
+class T_101_1_type__5 extends T_001_0
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+ implements T_100_0, T_110_0, T_101_1, T_111_1, T_000_1 {}
+
+class C_101_1_class_6 extends C_000_1
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+ implements C_100_0, C_110_0, C_101_1, C_111_1, C_001_0 {
+ const C_101_1_class_6();
+}
+
+const C_101_1_class_6 iC_101_1_class_6 = const C_101_1_class_6();
+closureC_101_1_class_6(foo) =>
+ (C_101_1_class_6 unused) => iC_101_1_class_6.toString() == foo.toString();
+
+class T_101_1_type__6 extends T_000_1
+ with M_100_0, M_110_0, M_101_1, M_111_1, M_001_0, M_000_1
+ implements T_100_0, T_110_0, T_101_1, T_111_1, T_001_0 {}
+
+class C_111_1_class_1 extends C_100_0
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ C_110_0,
+ C_101_1,
+ C_111_1,
+ C_010_0,
+ C_010_1,
+ C_011_1,
+ C_001_0,
+ C_000_1 {
+ const C_111_1_class_1();
+}
+
+const C_111_1_class_1 iC_111_1_class_1 = const C_111_1_class_1();
+closureC_111_1_class_1(foo) =>
+ (C_111_1_class_1 unused) => iC_111_1_class_1.toString() == foo.toString();
+
+class T_111_1_type__1 extends T_100_0
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ T_110_0,
+ T_101_1,
+ T_111_1,
+ T_010_0,
+ T_010_1,
+ T_011_1,
+ T_001_0,
+ T_000_1 {}
+
+class C_111_1_class_2 extends C_110_0
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ C_100_0,
+ C_101_1,
+ C_111_1,
+ C_010_0,
+ C_010_1,
+ C_011_1,
+ C_001_0,
+ C_000_1 {
+ const C_111_1_class_2();
+}
+
+const C_111_1_class_2 iC_111_1_class_2 = const C_111_1_class_2();
+closureC_111_1_class_2(foo) =>
+ (C_111_1_class_2 unused) => iC_111_1_class_2.toString() == foo.toString();
+
+class T_111_1_type__2 extends T_110_0
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ T_100_0,
+ T_101_1,
+ T_111_1,
+ T_010_0,
+ T_010_1,
+ T_011_1,
+ T_001_0,
+ T_000_1 {}
+
+class C_111_1_class_3 extends C_101_1
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ C_100_0,
+ C_110_0,
+ C_111_1,
+ C_010_0,
+ C_010_1,
+ C_011_1,
+ C_001_0,
+ C_000_1 {
+ const C_111_1_class_3();
+}
+
+const C_111_1_class_3 iC_111_1_class_3 = const C_111_1_class_3();
+closureC_111_1_class_3(foo) =>
+ (C_111_1_class_3 unused) => iC_111_1_class_3.toString() == foo.toString();
+
+class T_111_1_type__3 extends T_101_1
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ T_100_0,
+ T_110_0,
+ T_111_1,
+ T_010_0,
+ T_010_1,
+ T_011_1,
+ T_001_0,
+ T_000_1 {}
+
+class C_111_1_class_4 extends C_111_1
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ C_100_0,
+ C_110_0,
+ C_101_1,
+ C_010_0,
+ C_010_1,
+ C_011_1,
+ C_001_0,
+ C_000_1 {
+ const C_111_1_class_4();
+}
+
+const C_111_1_class_4 iC_111_1_class_4 = const C_111_1_class_4();
+closureC_111_1_class_4(foo) =>
+ (C_111_1_class_4 unused) => iC_111_1_class_4.toString() == foo.toString();
+
+class T_111_1_type__4 extends T_111_1
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ T_100_0,
+ T_110_0,
+ T_101_1,
+ T_010_0,
+ T_010_1,
+ T_011_1,
+ T_001_0,
+ T_000_1 {}
+
+class C_111_1_class_5 extends C_010_0
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ C_100_0,
+ C_110_0,
+ C_101_1,
+ C_111_1,
+ C_010_1,
+ C_011_1,
+ C_001_0,
+ C_000_1 {
+ const C_111_1_class_5();
+}
+
+const C_111_1_class_5 iC_111_1_class_5 = const C_111_1_class_5();
+closureC_111_1_class_5(foo) =>
+ (C_111_1_class_5 unused) => iC_111_1_class_5.toString() == foo.toString();
+
+class T_111_1_type__5 extends T_010_0
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ T_100_0,
+ T_110_0,
+ T_101_1,
+ T_111_1,
+ T_010_1,
+ T_011_1,
+ T_001_0,
+ T_000_1 {}
+
+class C_111_1_class_6 extends C_010_1
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ C_100_0,
+ C_110_0,
+ C_101_1,
+ C_111_1,
+ C_010_0,
+ C_011_1,
+ C_001_0,
+ C_000_1 {
+ const C_111_1_class_6();
+}
+
+const C_111_1_class_6 iC_111_1_class_6 = const C_111_1_class_6();
+closureC_111_1_class_6(foo) =>
+ (C_111_1_class_6 unused) => iC_111_1_class_6.toString() == foo.toString();
+
+class T_111_1_type__6 extends T_010_1
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ T_100_0,
+ T_110_0,
+ T_101_1,
+ T_111_1,
+ T_010_0,
+ T_011_1,
+ T_001_0,
+ T_000_1 {}
+
+class C_111_1_class_7 extends C_011_1
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ C_100_0,
+ C_110_0,
+ C_101_1,
+ C_111_1,
+ C_010_0,
+ C_010_1,
+ C_001_0,
+ C_000_1 {
+ const C_111_1_class_7();
+}
+
+const C_111_1_class_7 iC_111_1_class_7 = const C_111_1_class_7();
+closureC_111_1_class_7(foo) =>
+ (C_111_1_class_7 unused) => iC_111_1_class_7.toString() == foo.toString();
+
+class T_111_1_type__7 extends T_011_1
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ T_100_0,
+ T_110_0,
+ T_101_1,
+ T_111_1,
+ T_010_0,
+ T_010_1,
+ T_001_0,
+ T_000_1 {}
+
+class C_111_1_class_8 extends C_001_0
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ C_100_0,
+ C_110_0,
+ C_101_1,
+ C_111_1,
+ C_010_0,
+ C_010_1,
+ C_011_1,
+ C_000_1 {
+ const C_111_1_class_8();
+}
+
+const C_111_1_class_8 iC_111_1_class_8 = const C_111_1_class_8();
+closureC_111_1_class_8(foo) =>
+ (C_111_1_class_8 unused) => iC_111_1_class_8.toString() == foo.toString();
+
+class T_111_1_type__8 extends T_001_0
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ T_100_0,
+ T_110_0,
+ T_101_1,
+ T_111_1,
+ T_010_0,
+ T_010_1,
+ T_011_1,
+ T_000_1 {}
+
+class C_111_1_class_9 extends C_000_1
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ C_100_0,
+ C_110_0,
+ C_101_1,
+ C_111_1,
+ C_010_0,
+ C_010_1,
+ C_011_1,
+ C_001_0 {
+ const C_111_1_class_9();
+}
+
+const C_111_1_class_9 iC_111_1_class_9 = const C_111_1_class_9();
+closureC_111_1_class_9(foo) =>
+ (C_111_1_class_9 unused) => iC_111_1_class_9.toString() == foo.toString();
+
+class T_111_1_type__9 extends T_000_1
+ with
+ M_100_0,
+ M_110_0,
+ M_101_1,
+ M_111_1,
+ M_010_0,
+ M_010_1,
+ M_011_1,
+ M_001_0,
+ M_000_1
+ implements
+ T_100_0,
+ T_110_0,
+ T_101_1,
+ T_111_1,
+ T_010_0,
+ T_010_1,
+ T_011_1,
+ T_001_0 {}
+
+class C_010_1_class_1 extends C_010_0
+ with M_010_0, M_010_1, M_011_1, M_000_1
+ implements C_010_1, C_011_1, C_000_1 {
+ const C_010_1_class_1();
+}
+
+const C_010_1_class_1 iC_010_1_class_1 = const C_010_1_class_1();
+closureC_010_1_class_1(foo) =>
+ (C_010_1_class_1 unused) => iC_010_1_class_1.toString() == foo.toString();
+
+class T_010_1_type__1 extends T_010_0
+ with M_010_0, M_010_1, M_011_1, M_000_1
+ implements T_010_1, T_011_1, T_000_1 {}
+
+class C_010_1_class_2 extends C_010_1
+ with M_010_0, M_010_1, M_011_1, M_000_1
+ implements C_010_0, C_011_1, C_000_1 {
+ const C_010_1_class_2();
+}
+
+const C_010_1_class_2 iC_010_1_class_2 = const C_010_1_class_2();
+closureC_010_1_class_2(foo) =>
+ (C_010_1_class_2 unused) => iC_010_1_class_2.toString() == foo.toString();
+
+class T_010_1_type__2 extends T_010_1
+ with M_010_0, M_010_1, M_011_1, M_000_1
+ implements T_010_0, T_011_1, T_000_1 {}
+
+class C_010_1_class_3 extends C_011_1
+ with M_010_0, M_010_1, M_011_1, M_000_1
+ implements C_010_0, C_010_1, C_000_1 {
+ const C_010_1_class_3();
+}
+
+const C_010_1_class_3 iC_010_1_class_3 = const C_010_1_class_3();
+closureC_010_1_class_3(foo) =>
+ (C_010_1_class_3 unused) => iC_010_1_class_3.toString() == foo.toString();
+
+class T_010_1_type__3 extends T_011_1
+ with M_010_0, M_010_1, M_011_1, M_000_1
+ implements T_010_0, T_010_1, T_000_1 {}
+
+class C_010_1_class_4 extends C_000_1
+ with M_010_0, M_010_1, M_011_1, M_000_1
+ implements C_010_0, C_010_1, C_011_1 {
+ const C_010_1_class_4();
+}
+
+const C_010_1_class_4 iC_010_1_class_4 = const C_010_1_class_4();
+closureC_010_1_class_4(foo) =>
+ (C_010_1_class_4 unused) => iC_010_1_class_4.toString() == foo.toString();
+
+class T_010_1_type__4 extends T_000_1
+ with M_010_0, M_010_1, M_011_1, M_000_1
+ implements T_010_0, T_010_1, T_011_1 {}
+
+class C_011_1_class_1 extends C_010_0
+ with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+ implements C_010_1, C_011_1, C_001_0, C_000_1 {
+ const C_011_1_class_1();
+}
+
+const C_011_1_class_1 iC_011_1_class_1 = const C_011_1_class_1();
+closureC_011_1_class_1(foo) =>
+ (C_011_1_class_1 unused) => iC_011_1_class_1.toString() == foo.toString();
+
+class T_011_1_type__1 extends T_010_0
+ with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+ implements T_010_1, T_011_1, T_001_0, T_000_1 {}
+
+class C_011_1_class_2 extends C_010_1
+ with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+ implements C_010_0, C_011_1, C_001_0, C_000_1 {
+ const C_011_1_class_2();
+}
+
+const C_011_1_class_2 iC_011_1_class_2 = const C_011_1_class_2();
+closureC_011_1_class_2(foo) =>
+ (C_011_1_class_2 unused) => iC_011_1_class_2.toString() == foo.toString();
+
+class T_011_1_type__2 extends T_010_1
+ with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+ implements T_010_0, T_011_1, T_001_0, T_000_1 {}
+
+class C_011_1_class_3 extends C_011_1
+ with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+ implements C_010_0, C_010_1, C_001_0, C_000_1 {
+ const C_011_1_class_3();
+}
+
+const C_011_1_class_3 iC_011_1_class_3 = const C_011_1_class_3();
+closureC_011_1_class_3(foo) =>
+ (C_011_1_class_3 unused) => iC_011_1_class_3.toString() == foo.toString();
+
+class T_011_1_type__3 extends T_011_1
+ with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+ implements T_010_0, T_010_1, T_001_0, T_000_1 {}
+
+class C_011_1_class_4 extends C_001_0
+ with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+ implements C_010_0, C_010_1, C_011_1, C_000_1 {
+ const C_011_1_class_4();
+}
+
+const C_011_1_class_4 iC_011_1_class_4 = const C_011_1_class_4();
+closureC_011_1_class_4(foo) =>
+ (C_011_1_class_4 unused) => iC_011_1_class_4.toString() == foo.toString();
+
+class T_011_1_type__4 extends T_001_0
+ with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+ implements T_010_0, T_010_1, T_011_1, T_000_1 {}
+
+class C_011_1_class_5 extends C_000_1
+ with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+ implements C_010_0, C_010_1, C_011_1, C_001_0 {
+ const C_011_1_class_5();
+}
+
+const C_011_1_class_5 iC_011_1_class_5 = const C_011_1_class_5();
+closureC_011_1_class_5(foo) =>
+ (C_011_1_class_5 unused) => iC_011_1_class_5.toString() == foo.toString();
+
+class T_011_1_type__5 extends T_000_1
+ with M_010_0, M_010_1, M_011_1, M_001_0, M_000_1
+ implements T_010_0, T_010_1, T_011_1, T_001_0 {}
+
@pragma('dart2js:noInline')
f_100_0(Set<String> u, int b) => v(u, '1000', b);
@pragma('dart2js:noInline')
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_000_1.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_000_1.dart
index 37a1c2e..c67496e 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_000_1.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_000_1.dart
@@ -3,13 +3,220 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import "package:expect/expect.dart";
import 'libImport.dart';
@pragma('dart2js:noInline')
+typeTest(dynamic t) {
+ if (t is T_000_1) {
+ return true;
+ }
+ if (t is T_101_1_type__1) {
+ return true;
+ }
+ if (t is T_101_1_type__2) {
+ return true;
+ }
+ if (t is T_101_1_type__3) {
+ return true;
+ }
+ if (t is T_101_1_type__4) {
+ return true;
+ }
+ if (t is T_101_1_type__5) {
+ return true;
+ }
+ if (t is T_101_1_type__6) {
+ return true;
+ }
+ if (t is T_111_1_type__1) {
+ return true;
+ }
+ if (t is T_111_1_type__2) {
+ return true;
+ }
+ if (t is T_111_1_type__3) {
+ return true;
+ }
+ if (t is T_111_1_type__4) {
+ return true;
+ }
+ if (t is T_111_1_type__5) {
+ return true;
+ }
+ if (t is T_111_1_type__6) {
+ return true;
+ }
+ if (t is T_111_1_type__7) {
+ return true;
+ }
+ if (t is T_111_1_type__8) {
+ return true;
+ }
+ if (t is T_111_1_type__9) {
+ return true;
+ }
+ if (t is T_010_1_type__1) {
+ return true;
+ }
+ if (t is T_010_1_type__2) {
+ return true;
+ }
+ if (t is T_010_1_type__3) {
+ return true;
+ }
+ if (t is T_010_1_type__4) {
+ return true;
+ }
+ if (t is T_011_1_type__1) {
+ return true;
+ }
+ if (t is T_011_1_type__2) {
+ return true;
+ }
+ if (t is T_011_1_type__3) {
+ return true;
+ }
+ if (t is T_011_1_type__4) {
+ return true;
+ }
+ if (t is T_011_1_type__5) {
+ return true;
+ }
+ return false;
+}
+
+@pragma('dart2js:noInline')
g_000_1() {
+ // C_***_1;
+ Expect.isFalse(typeTest(C_000_1()));
+ Expect.isFalse(typeTest(C_101_1_class_1()));
+ Expect.isFalse(typeTest(C_101_1_class_2()));
+ Expect.isFalse(typeTest(C_101_1_class_3()));
+ Expect.isFalse(typeTest(C_101_1_class_4()));
+ Expect.isFalse(typeTest(C_101_1_class_5()));
+ Expect.isFalse(typeTest(C_101_1_class_6()));
+ Expect.isFalse(typeTest(C_111_1_class_1()));
+ Expect.isFalse(typeTest(C_111_1_class_2()));
+ Expect.isFalse(typeTest(C_111_1_class_3()));
+ Expect.isFalse(typeTest(C_111_1_class_4()));
+ Expect.isFalse(typeTest(C_111_1_class_5()));
+ Expect.isFalse(typeTest(C_111_1_class_6()));
+ Expect.isFalse(typeTest(C_111_1_class_7()));
+ Expect.isFalse(typeTest(C_111_1_class_8()));
+ Expect.isFalse(typeTest(C_111_1_class_9()));
+ Expect.isFalse(typeTest(C_010_1_class_1()));
+ Expect.isFalse(typeTest(C_010_1_class_2()));
+ Expect.isFalse(typeTest(C_010_1_class_3()));
+ Expect.isFalse(typeTest(C_010_1_class_4()));
+ Expect.isFalse(typeTest(C_011_1_class_1()));
+ Expect.isFalse(typeTest(C_011_1_class_2()));
+ Expect.isFalse(typeTest(C_011_1_class_3()));
+ Expect.isFalse(typeTest(C_011_1_class_4()));
+ Expect.isFalse(typeTest(C_011_1_class_5()));
+
+ Expect.isTrue(closureC_000_1(C_000_1())(C_000_1()));
+ Expect.isTrue(closureC_101_1_class_1(C_101_1_class_1())(C_101_1_class_1()));
+ Expect.isTrue(closureC_101_1_class_2(C_101_1_class_2())(C_101_1_class_2()));
+ Expect.isTrue(closureC_101_1_class_3(C_101_1_class_3())(C_101_1_class_3()));
+ Expect.isTrue(closureC_101_1_class_4(C_101_1_class_4())(C_101_1_class_4()));
+ Expect.isTrue(closureC_101_1_class_5(C_101_1_class_5())(C_101_1_class_5()));
+ Expect.isTrue(closureC_101_1_class_6(C_101_1_class_6())(C_101_1_class_6()));
+ Expect.isTrue(closureC_111_1_class_1(C_111_1_class_1())(C_111_1_class_1()));
+ Expect.isTrue(closureC_111_1_class_2(C_111_1_class_2())(C_111_1_class_2()));
+ Expect.isTrue(closureC_111_1_class_3(C_111_1_class_3())(C_111_1_class_3()));
+ Expect.isTrue(closureC_111_1_class_4(C_111_1_class_4())(C_111_1_class_4()));
+ Expect.isTrue(closureC_111_1_class_5(C_111_1_class_5())(C_111_1_class_5()));
+ Expect.isTrue(closureC_111_1_class_6(C_111_1_class_6())(C_111_1_class_6()));
+ Expect.isTrue(closureC_111_1_class_7(C_111_1_class_7())(C_111_1_class_7()));
+ Expect.isTrue(closureC_111_1_class_8(C_111_1_class_8())(C_111_1_class_8()));
+ Expect.isTrue(closureC_111_1_class_9(C_111_1_class_9())(C_111_1_class_9()));
+ Expect.isTrue(closureC_010_1_class_1(C_010_1_class_1())(C_010_1_class_1()));
+ Expect.isTrue(closureC_010_1_class_2(C_010_1_class_2())(C_010_1_class_2()));
+ Expect.isTrue(closureC_010_1_class_3(C_010_1_class_3())(C_010_1_class_3()));
+ Expect.isTrue(closureC_010_1_class_4(C_010_1_class_4())(C_010_1_class_4()));
+ Expect.isTrue(closureC_011_1_class_1(C_011_1_class_1())(C_011_1_class_1()));
+ Expect.isTrue(closureC_011_1_class_2(C_011_1_class_2())(C_011_1_class_2()));
+ Expect.isTrue(closureC_011_1_class_3(C_011_1_class_3())(C_011_1_class_3()));
+ Expect.isTrue(closureC_011_1_class_4(C_011_1_class_4())(C_011_1_class_4()));
+ Expect.isTrue(closureC_011_1_class_5(C_011_1_class_5())(C_011_1_class_5()));
+
+ Expect.equals(
+ closureC_000_1(C_000_1()).runtimeType.toString(), '(C_000_1) => bool');
+ Expect.equals(
+ closureC_101_1_class_1(C_101_1_class_1()).runtimeType.toString(),
+ '(C_101_1_class_1) => bool');
+ Expect.equals(
+ closureC_101_1_class_2(C_101_1_class_2()).runtimeType.toString(),
+ '(C_101_1_class_2) => bool');
+ Expect.equals(
+ closureC_101_1_class_3(C_101_1_class_3()).runtimeType.toString(),
+ '(C_101_1_class_3) => bool');
+ Expect.equals(
+ closureC_101_1_class_4(C_101_1_class_4()).runtimeType.toString(),
+ '(C_101_1_class_4) => bool');
+ Expect.equals(
+ closureC_101_1_class_5(C_101_1_class_5()).runtimeType.toString(),
+ '(C_101_1_class_5) => bool');
+ Expect.equals(
+ closureC_101_1_class_6(C_101_1_class_6()).runtimeType.toString(),
+ '(C_101_1_class_6) => bool');
+ Expect.equals(
+ closureC_111_1_class_1(C_111_1_class_1()).runtimeType.toString(),
+ '(C_111_1_class_1) => bool');
+ Expect.equals(
+ closureC_111_1_class_2(C_111_1_class_2()).runtimeType.toString(),
+ '(C_111_1_class_2) => bool');
+ Expect.equals(
+ closureC_111_1_class_3(C_111_1_class_3()).runtimeType.toString(),
+ '(C_111_1_class_3) => bool');
+ Expect.equals(
+ closureC_111_1_class_4(C_111_1_class_4()).runtimeType.toString(),
+ '(C_111_1_class_4) => bool');
+ Expect.equals(
+ closureC_111_1_class_5(C_111_1_class_5()).runtimeType.toString(),
+ '(C_111_1_class_5) => bool');
+ Expect.equals(
+ closureC_111_1_class_6(C_111_1_class_6()).runtimeType.toString(),
+ '(C_111_1_class_6) => bool');
+ Expect.equals(
+ closureC_111_1_class_7(C_111_1_class_7()).runtimeType.toString(),
+ '(C_111_1_class_7) => bool');
+ Expect.equals(
+ closureC_111_1_class_8(C_111_1_class_8()).runtimeType.toString(),
+ '(C_111_1_class_8) => bool');
+ Expect.equals(
+ closureC_111_1_class_9(C_111_1_class_9()).runtimeType.toString(),
+ '(C_111_1_class_9) => bool');
+ Expect.equals(
+ closureC_010_1_class_1(C_010_1_class_1()).runtimeType.toString(),
+ '(C_010_1_class_1) => bool');
+ Expect.equals(
+ closureC_010_1_class_2(C_010_1_class_2()).runtimeType.toString(),
+ '(C_010_1_class_2) => bool');
+ Expect.equals(
+ closureC_010_1_class_3(C_010_1_class_3()).runtimeType.toString(),
+ '(C_010_1_class_3) => bool');
+ Expect.equals(
+ closureC_010_1_class_4(C_010_1_class_4()).runtimeType.toString(),
+ '(C_010_1_class_4) => bool');
+ Expect.equals(
+ closureC_011_1_class_1(C_011_1_class_1()).runtimeType.toString(),
+ '(C_011_1_class_1) => bool');
+ Expect.equals(
+ closureC_011_1_class_2(C_011_1_class_2()).runtimeType.toString(),
+ '(C_011_1_class_2) => bool');
+ Expect.equals(
+ closureC_011_1_class_3(C_011_1_class_3()).runtimeType.toString(),
+ '(C_011_1_class_3) => bool');
+ Expect.equals(
+ closureC_011_1_class_4(C_011_1_class_4()).runtimeType.toString(),
+ '(C_011_1_class_4) => bool');
+ Expect.equals(
+ closureC_011_1_class_5(C_011_1_class_5()).runtimeType.toString(),
+ '(C_011_1_class_5) => bool');
+
Set<String> uniques = {};
// f_***_1;
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_001_0.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_001_0.dart
index 3534e43..93b13b2 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_001_0.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_001_0.dart
@@ -3,13 +3,188 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import "package:expect/expect.dart";
import 'libImport.dart';
@pragma('dart2js:noInline')
+typeTest(dynamic t) {
+ if (t is T_001_0) {
+ return true;
+ }
+ if (t is T_101_1_type__1) {
+ return true;
+ }
+ if (t is T_101_1_type__2) {
+ return true;
+ }
+ if (t is T_101_1_type__3) {
+ return true;
+ }
+ if (t is T_101_1_type__4) {
+ return true;
+ }
+ if (t is T_101_1_type__5) {
+ return true;
+ }
+ if (t is T_101_1_type__6) {
+ return true;
+ }
+ if (t is T_111_1_type__1) {
+ return true;
+ }
+ if (t is T_111_1_type__2) {
+ return true;
+ }
+ if (t is T_111_1_type__3) {
+ return true;
+ }
+ if (t is T_111_1_type__4) {
+ return true;
+ }
+ if (t is T_111_1_type__5) {
+ return true;
+ }
+ if (t is T_111_1_type__6) {
+ return true;
+ }
+ if (t is T_111_1_type__7) {
+ return true;
+ }
+ if (t is T_111_1_type__8) {
+ return true;
+ }
+ if (t is T_111_1_type__9) {
+ return true;
+ }
+ if (t is T_011_1_type__1) {
+ return true;
+ }
+ if (t is T_011_1_type__2) {
+ return true;
+ }
+ if (t is T_011_1_type__3) {
+ return true;
+ }
+ if (t is T_011_1_type__4) {
+ return true;
+ }
+ if (t is T_011_1_type__5) {
+ return true;
+ }
+ return false;
+}
+
+@pragma('dart2js:noInline')
g_001_0() {
+ // C_**1_*;
+ Expect.isFalse(typeTest(C_001_0()));
+ Expect.isFalse(typeTest(C_101_1_class_1()));
+ Expect.isFalse(typeTest(C_101_1_class_2()));
+ Expect.isFalse(typeTest(C_101_1_class_3()));
+ Expect.isFalse(typeTest(C_101_1_class_4()));
+ Expect.isFalse(typeTest(C_101_1_class_5()));
+ Expect.isFalse(typeTest(C_101_1_class_6()));
+ Expect.isFalse(typeTest(C_111_1_class_1()));
+ Expect.isFalse(typeTest(C_111_1_class_2()));
+ Expect.isFalse(typeTest(C_111_1_class_3()));
+ Expect.isFalse(typeTest(C_111_1_class_4()));
+ Expect.isFalse(typeTest(C_111_1_class_5()));
+ Expect.isFalse(typeTest(C_111_1_class_6()));
+ Expect.isFalse(typeTest(C_111_1_class_7()));
+ Expect.isFalse(typeTest(C_111_1_class_8()));
+ Expect.isFalse(typeTest(C_111_1_class_9()));
+ Expect.isFalse(typeTest(C_011_1_class_1()));
+ Expect.isFalse(typeTest(C_011_1_class_2()));
+ Expect.isFalse(typeTest(C_011_1_class_3()));
+ Expect.isFalse(typeTest(C_011_1_class_4()));
+ Expect.isFalse(typeTest(C_011_1_class_5()));
+
+ Expect.isTrue(closureC_001_0(C_001_0())(C_001_0()));
+ Expect.isTrue(closureC_101_1_class_1(C_101_1_class_1())(C_101_1_class_1()));
+ Expect.isTrue(closureC_101_1_class_2(C_101_1_class_2())(C_101_1_class_2()));
+ Expect.isTrue(closureC_101_1_class_3(C_101_1_class_3())(C_101_1_class_3()));
+ Expect.isTrue(closureC_101_1_class_4(C_101_1_class_4())(C_101_1_class_4()));
+ Expect.isTrue(closureC_101_1_class_5(C_101_1_class_5())(C_101_1_class_5()));
+ Expect.isTrue(closureC_101_1_class_6(C_101_1_class_6())(C_101_1_class_6()));
+ Expect.isTrue(closureC_111_1_class_1(C_111_1_class_1())(C_111_1_class_1()));
+ Expect.isTrue(closureC_111_1_class_2(C_111_1_class_2())(C_111_1_class_2()));
+ Expect.isTrue(closureC_111_1_class_3(C_111_1_class_3())(C_111_1_class_3()));
+ Expect.isTrue(closureC_111_1_class_4(C_111_1_class_4())(C_111_1_class_4()));
+ Expect.isTrue(closureC_111_1_class_5(C_111_1_class_5())(C_111_1_class_5()));
+ Expect.isTrue(closureC_111_1_class_6(C_111_1_class_6())(C_111_1_class_6()));
+ Expect.isTrue(closureC_111_1_class_7(C_111_1_class_7())(C_111_1_class_7()));
+ Expect.isTrue(closureC_111_1_class_8(C_111_1_class_8())(C_111_1_class_8()));
+ Expect.isTrue(closureC_111_1_class_9(C_111_1_class_9())(C_111_1_class_9()));
+ Expect.isTrue(closureC_011_1_class_1(C_011_1_class_1())(C_011_1_class_1()));
+ Expect.isTrue(closureC_011_1_class_2(C_011_1_class_2())(C_011_1_class_2()));
+ Expect.isTrue(closureC_011_1_class_3(C_011_1_class_3())(C_011_1_class_3()));
+ Expect.isTrue(closureC_011_1_class_4(C_011_1_class_4())(C_011_1_class_4()));
+ Expect.isTrue(closureC_011_1_class_5(C_011_1_class_5())(C_011_1_class_5()));
+
+ Expect.equals(
+ closureC_001_0(C_001_0()).runtimeType.toString(), '(C_001_0) => bool');
+ Expect.equals(
+ closureC_101_1_class_1(C_101_1_class_1()).runtimeType.toString(),
+ '(C_101_1_class_1) => bool');
+ Expect.equals(
+ closureC_101_1_class_2(C_101_1_class_2()).runtimeType.toString(),
+ '(C_101_1_class_2) => bool');
+ Expect.equals(
+ closureC_101_1_class_3(C_101_1_class_3()).runtimeType.toString(),
+ '(C_101_1_class_3) => bool');
+ Expect.equals(
+ closureC_101_1_class_4(C_101_1_class_4()).runtimeType.toString(),
+ '(C_101_1_class_4) => bool');
+ Expect.equals(
+ closureC_101_1_class_5(C_101_1_class_5()).runtimeType.toString(),
+ '(C_101_1_class_5) => bool');
+ Expect.equals(
+ closureC_101_1_class_6(C_101_1_class_6()).runtimeType.toString(),
+ '(C_101_1_class_6) => bool');
+ Expect.equals(
+ closureC_111_1_class_1(C_111_1_class_1()).runtimeType.toString(),
+ '(C_111_1_class_1) => bool');
+ Expect.equals(
+ closureC_111_1_class_2(C_111_1_class_2()).runtimeType.toString(),
+ '(C_111_1_class_2) => bool');
+ Expect.equals(
+ closureC_111_1_class_3(C_111_1_class_3()).runtimeType.toString(),
+ '(C_111_1_class_3) => bool');
+ Expect.equals(
+ closureC_111_1_class_4(C_111_1_class_4()).runtimeType.toString(),
+ '(C_111_1_class_4) => bool');
+ Expect.equals(
+ closureC_111_1_class_5(C_111_1_class_5()).runtimeType.toString(),
+ '(C_111_1_class_5) => bool');
+ Expect.equals(
+ closureC_111_1_class_6(C_111_1_class_6()).runtimeType.toString(),
+ '(C_111_1_class_6) => bool');
+ Expect.equals(
+ closureC_111_1_class_7(C_111_1_class_7()).runtimeType.toString(),
+ '(C_111_1_class_7) => bool');
+ Expect.equals(
+ closureC_111_1_class_8(C_111_1_class_8()).runtimeType.toString(),
+ '(C_111_1_class_8) => bool');
+ Expect.equals(
+ closureC_111_1_class_9(C_111_1_class_9()).runtimeType.toString(),
+ '(C_111_1_class_9) => bool');
+ Expect.equals(
+ closureC_011_1_class_1(C_011_1_class_1()).runtimeType.toString(),
+ '(C_011_1_class_1) => bool');
+ Expect.equals(
+ closureC_011_1_class_2(C_011_1_class_2()).runtimeType.toString(),
+ '(C_011_1_class_2) => bool');
+ Expect.equals(
+ closureC_011_1_class_3(C_011_1_class_3()).runtimeType.toString(),
+ '(C_011_1_class_3) => bool');
+ Expect.equals(
+ closureC_011_1_class_4(C_011_1_class_4()).runtimeType.toString(),
+ '(C_011_1_class_4) => bool');
+ Expect.equals(
+ closureC_011_1_class_5(C_011_1_class_5()).runtimeType.toString(),
+ '(C_011_1_class_5) => bool');
+
Set<String> uniques = {};
// f_**1_*;
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_010_0.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_010_0.dart
index d9ef060..600809f 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_010_0.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_010_0.dart
@@ -3,13 +3,242 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import "package:expect/expect.dart";
import 'libImport.dart';
@pragma('dart2js:noInline')
+typeTest(dynamic t) {
+ if (t is T_010_0) {
+ return true;
+ }
+ if (t is T_010_1) {
+ return true;
+ }
+ if (t is T_011_1) {
+ return true;
+ }
+ if (t is T_110_0_type__1) {
+ return true;
+ }
+ if (t is T_110_0_type__2) {
+ return true;
+ }
+ if (t is T_110_0_type__3) {
+ return true;
+ }
+ if (t is T_110_0_type__4) {
+ return true;
+ }
+ if (t is T_110_0_type__5) {
+ return true;
+ }
+ if (t is T_110_0_type__6) {
+ return true;
+ }
+ if (t is T_110_0_type__7) {
+ return true;
+ }
+ if (t is T_111_1_type__1) {
+ return true;
+ }
+ if (t is T_111_1_type__2) {
+ return true;
+ }
+ if (t is T_111_1_type__3) {
+ return true;
+ }
+ if (t is T_111_1_type__4) {
+ return true;
+ }
+ if (t is T_111_1_type__5) {
+ return true;
+ }
+ if (t is T_111_1_type__6) {
+ return true;
+ }
+ if (t is T_111_1_type__7) {
+ return true;
+ }
+ if (t is T_111_1_type__8) {
+ return true;
+ }
+ if (t is T_111_1_type__9) {
+ return true;
+ }
+ if (t is T_010_1_type__1) {
+ return true;
+ }
+ if (t is T_010_1_type__2) {
+ return true;
+ }
+ if (t is T_010_1_type__3) {
+ return true;
+ }
+ if (t is T_010_1_type__4) {
+ return true;
+ }
+ if (t is T_011_1_type__1) {
+ return true;
+ }
+ if (t is T_011_1_type__2) {
+ return true;
+ }
+ if (t is T_011_1_type__3) {
+ return true;
+ }
+ if (t is T_011_1_type__4) {
+ return true;
+ }
+ if (t is T_011_1_type__5) {
+ return true;
+ }
+ return false;
+}
+
+@pragma('dart2js:noInline')
g_010_0() {
+ // C_*1*_*;
+ Expect.isFalse(typeTest(C_010_0()));
+ Expect.isFalse(typeTest(C_010_1()));
+ Expect.isFalse(typeTest(C_011_1()));
+ Expect.isFalse(typeTest(C_110_0_class_1()));
+ Expect.isFalse(typeTest(C_110_0_class_2()));
+ Expect.isFalse(typeTest(C_110_0_class_3()));
+ Expect.isFalse(typeTest(C_110_0_class_4()));
+ Expect.isFalse(typeTest(C_110_0_class_5()));
+ Expect.isFalse(typeTest(C_110_0_class_6()));
+ Expect.isFalse(typeTest(C_110_0_class_7()));
+ Expect.isFalse(typeTest(C_111_1_class_1()));
+ Expect.isFalse(typeTest(C_111_1_class_2()));
+ Expect.isFalse(typeTest(C_111_1_class_3()));
+ Expect.isFalse(typeTest(C_111_1_class_4()));
+ Expect.isFalse(typeTest(C_111_1_class_5()));
+ Expect.isFalse(typeTest(C_111_1_class_6()));
+ Expect.isFalse(typeTest(C_111_1_class_7()));
+ Expect.isFalse(typeTest(C_111_1_class_8()));
+ Expect.isFalse(typeTest(C_111_1_class_9()));
+ Expect.isFalse(typeTest(C_010_1_class_1()));
+ Expect.isFalse(typeTest(C_010_1_class_2()));
+ Expect.isFalse(typeTest(C_010_1_class_3()));
+ Expect.isFalse(typeTest(C_010_1_class_4()));
+ Expect.isFalse(typeTest(C_011_1_class_1()));
+ Expect.isFalse(typeTest(C_011_1_class_2()));
+ Expect.isFalse(typeTest(C_011_1_class_3()));
+ Expect.isFalse(typeTest(C_011_1_class_4()));
+ Expect.isFalse(typeTest(C_011_1_class_5()));
+
+ Expect.isTrue(closureC_010_0(C_010_0())(C_010_0()));
+ Expect.isTrue(closureC_010_1(C_010_1())(C_010_1()));
+ Expect.isTrue(closureC_011_1(C_011_1())(C_011_1()));
+ Expect.isTrue(closureC_110_0_class_1(C_110_0_class_1())(C_110_0_class_1()));
+ Expect.isTrue(closureC_110_0_class_2(C_110_0_class_2())(C_110_0_class_2()));
+ Expect.isTrue(closureC_110_0_class_3(C_110_0_class_3())(C_110_0_class_3()));
+ Expect.isTrue(closureC_110_0_class_4(C_110_0_class_4())(C_110_0_class_4()));
+ Expect.isTrue(closureC_110_0_class_5(C_110_0_class_5())(C_110_0_class_5()));
+ Expect.isTrue(closureC_110_0_class_6(C_110_0_class_6())(C_110_0_class_6()));
+ Expect.isTrue(closureC_110_0_class_7(C_110_0_class_7())(C_110_0_class_7()));
+ Expect.isTrue(closureC_111_1_class_1(C_111_1_class_1())(C_111_1_class_1()));
+ Expect.isTrue(closureC_111_1_class_2(C_111_1_class_2())(C_111_1_class_2()));
+ Expect.isTrue(closureC_111_1_class_3(C_111_1_class_3())(C_111_1_class_3()));
+ Expect.isTrue(closureC_111_1_class_4(C_111_1_class_4())(C_111_1_class_4()));
+ Expect.isTrue(closureC_111_1_class_5(C_111_1_class_5())(C_111_1_class_5()));
+ Expect.isTrue(closureC_111_1_class_6(C_111_1_class_6())(C_111_1_class_6()));
+ Expect.isTrue(closureC_111_1_class_7(C_111_1_class_7())(C_111_1_class_7()));
+ Expect.isTrue(closureC_111_1_class_8(C_111_1_class_8())(C_111_1_class_8()));
+ Expect.isTrue(closureC_111_1_class_9(C_111_1_class_9())(C_111_1_class_9()));
+ Expect.isTrue(closureC_010_1_class_1(C_010_1_class_1())(C_010_1_class_1()));
+ Expect.isTrue(closureC_010_1_class_2(C_010_1_class_2())(C_010_1_class_2()));
+ Expect.isTrue(closureC_010_1_class_3(C_010_1_class_3())(C_010_1_class_3()));
+ Expect.isTrue(closureC_010_1_class_4(C_010_1_class_4())(C_010_1_class_4()));
+ Expect.isTrue(closureC_011_1_class_1(C_011_1_class_1())(C_011_1_class_1()));
+ Expect.isTrue(closureC_011_1_class_2(C_011_1_class_2())(C_011_1_class_2()));
+ Expect.isTrue(closureC_011_1_class_3(C_011_1_class_3())(C_011_1_class_3()));
+ Expect.isTrue(closureC_011_1_class_4(C_011_1_class_4())(C_011_1_class_4()));
+ Expect.isTrue(closureC_011_1_class_5(C_011_1_class_5())(C_011_1_class_5()));
+
+ Expect.equals(
+ closureC_010_0(C_010_0()).runtimeType.toString(), '(C_010_0) => bool');
+ Expect.equals(
+ closureC_010_1(C_010_1()).runtimeType.toString(), '(C_010_1) => bool');
+ Expect.equals(
+ closureC_011_1(C_011_1()).runtimeType.toString(), '(C_011_1) => bool');
+ Expect.equals(
+ closureC_110_0_class_1(C_110_0_class_1()).runtimeType.toString(),
+ '(C_110_0_class_1) => bool');
+ Expect.equals(
+ closureC_110_0_class_2(C_110_0_class_2()).runtimeType.toString(),
+ '(C_110_0_class_2) => bool');
+ Expect.equals(
+ closureC_110_0_class_3(C_110_0_class_3()).runtimeType.toString(),
+ '(C_110_0_class_3) => bool');
+ Expect.equals(
+ closureC_110_0_class_4(C_110_0_class_4()).runtimeType.toString(),
+ '(C_110_0_class_4) => bool');
+ Expect.equals(
+ closureC_110_0_class_5(C_110_0_class_5()).runtimeType.toString(),
+ '(C_110_0_class_5) => bool');
+ Expect.equals(
+ closureC_110_0_class_6(C_110_0_class_6()).runtimeType.toString(),
+ '(C_110_0_class_6) => bool');
+ Expect.equals(
+ closureC_110_0_class_7(C_110_0_class_7()).runtimeType.toString(),
+ '(C_110_0_class_7) => bool');
+ Expect.equals(
+ closureC_111_1_class_1(C_111_1_class_1()).runtimeType.toString(),
+ '(C_111_1_class_1) => bool');
+ Expect.equals(
+ closureC_111_1_class_2(C_111_1_class_2()).runtimeType.toString(),
+ '(C_111_1_class_2) => bool');
+ Expect.equals(
+ closureC_111_1_class_3(C_111_1_class_3()).runtimeType.toString(),
+ '(C_111_1_class_3) => bool');
+ Expect.equals(
+ closureC_111_1_class_4(C_111_1_class_4()).runtimeType.toString(),
+ '(C_111_1_class_4) => bool');
+ Expect.equals(
+ closureC_111_1_class_5(C_111_1_class_5()).runtimeType.toString(),
+ '(C_111_1_class_5) => bool');
+ Expect.equals(
+ closureC_111_1_class_6(C_111_1_class_6()).runtimeType.toString(),
+ '(C_111_1_class_6) => bool');
+ Expect.equals(
+ closureC_111_1_class_7(C_111_1_class_7()).runtimeType.toString(),
+ '(C_111_1_class_7) => bool');
+ Expect.equals(
+ closureC_111_1_class_8(C_111_1_class_8()).runtimeType.toString(),
+ '(C_111_1_class_8) => bool');
+ Expect.equals(
+ closureC_111_1_class_9(C_111_1_class_9()).runtimeType.toString(),
+ '(C_111_1_class_9) => bool');
+ Expect.equals(
+ closureC_010_1_class_1(C_010_1_class_1()).runtimeType.toString(),
+ '(C_010_1_class_1) => bool');
+ Expect.equals(
+ closureC_010_1_class_2(C_010_1_class_2()).runtimeType.toString(),
+ '(C_010_1_class_2) => bool');
+ Expect.equals(
+ closureC_010_1_class_3(C_010_1_class_3()).runtimeType.toString(),
+ '(C_010_1_class_3) => bool');
+ Expect.equals(
+ closureC_010_1_class_4(C_010_1_class_4()).runtimeType.toString(),
+ '(C_010_1_class_4) => bool');
+ Expect.equals(
+ closureC_011_1_class_1(C_011_1_class_1()).runtimeType.toString(),
+ '(C_011_1_class_1) => bool');
+ Expect.equals(
+ closureC_011_1_class_2(C_011_1_class_2()).runtimeType.toString(),
+ '(C_011_1_class_2) => bool');
+ Expect.equals(
+ closureC_011_1_class_3(C_011_1_class_3()).runtimeType.toString(),
+ '(C_011_1_class_3) => bool');
+ Expect.equals(
+ closureC_011_1_class_4(C_011_1_class_4()).runtimeType.toString(),
+ '(C_011_1_class_4) => bool');
+ Expect.equals(
+ closureC_011_1_class_5(C_011_1_class_5()).runtimeType.toString(),
+ '(C_011_1_class_5) => bool');
+
Set<String> uniques = {};
// f_*1*_*;
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_100_0.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_100_0.dart
index 6d2c07f..bbf23b8 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_100_0.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/lib_100_0.dart
@@ -3,13 +3,225 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import "package:expect/expect.dart";
import 'libImport.dart';
@pragma('dart2js:noInline')
+typeTest(dynamic t) {
+ if (t is T_100_0) {
+ return true;
+ }
+ if (t is T_110_0) {
+ return true;
+ }
+ if (t is T_101_1) {
+ return true;
+ }
+ if (t is T_111_1) {
+ return true;
+ }
+ if (t is T_110_0_type__1) {
+ return true;
+ }
+ if (t is T_110_0_type__2) {
+ return true;
+ }
+ if (t is T_110_0_type__3) {
+ return true;
+ }
+ if (t is T_110_0_type__4) {
+ return true;
+ }
+ if (t is T_110_0_type__5) {
+ return true;
+ }
+ if (t is T_110_0_type__6) {
+ return true;
+ }
+ if (t is T_110_0_type__7) {
+ return true;
+ }
+ if (t is T_101_1_type__1) {
+ return true;
+ }
+ if (t is T_101_1_type__2) {
+ return true;
+ }
+ if (t is T_101_1_type__3) {
+ return true;
+ }
+ if (t is T_101_1_type__4) {
+ return true;
+ }
+ if (t is T_101_1_type__5) {
+ return true;
+ }
+ if (t is T_101_1_type__6) {
+ return true;
+ }
+ if (t is T_111_1_type__1) {
+ return true;
+ }
+ if (t is T_111_1_type__2) {
+ return true;
+ }
+ if (t is T_111_1_type__3) {
+ return true;
+ }
+ if (t is T_111_1_type__4) {
+ return true;
+ }
+ if (t is T_111_1_type__5) {
+ return true;
+ }
+ if (t is T_111_1_type__6) {
+ return true;
+ }
+ if (t is T_111_1_type__7) {
+ return true;
+ }
+ if (t is T_111_1_type__8) {
+ return true;
+ }
+ if (t is T_111_1_type__9) {
+ return true;
+ }
+ return false;
+}
+
+@pragma('dart2js:noInline')
g_100_0() {
+ // C_1**_*;
+ Expect.isFalse(typeTest(C_100_0()));
+ Expect.isFalse(typeTest(C_110_0()));
+ Expect.isFalse(typeTest(C_101_1()));
+ Expect.isFalse(typeTest(C_111_1()));
+ Expect.isFalse(typeTest(C_110_0_class_1()));
+ Expect.isFalse(typeTest(C_110_0_class_2()));
+ Expect.isFalse(typeTest(C_110_0_class_3()));
+ Expect.isFalse(typeTest(C_110_0_class_4()));
+ Expect.isFalse(typeTest(C_110_0_class_5()));
+ Expect.isFalse(typeTest(C_110_0_class_6()));
+ Expect.isFalse(typeTest(C_110_0_class_7()));
+ Expect.isFalse(typeTest(C_101_1_class_1()));
+ Expect.isFalse(typeTest(C_101_1_class_2()));
+ Expect.isFalse(typeTest(C_101_1_class_3()));
+ Expect.isFalse(typeTest(C_101_1_class_4()));
+ Expect.isFalse(typeTest(C_101_1_class_5()));
+ Expect.isFalse(typeTest(C_101_1_class_6()));
+ Expect.isFalse(typeTest(C_111_1_class_1()));
+ Expect.isFalse(typeTest(C_111_1_class_2()));
+ Expect.isFalse(typeTest(C_111_1_class_3()));
+ Expect.isFalse(typeTest(C_111_1_class_4()));
+ Expect.isFalse(typeTest(C_111_1_class_5()));
+ Expect.isFalse(typeTest(C_111_1_class_6()));
+ Expect.isFalse(typeTest(C_111_1_class_7()));
+ Expect.isFalse(typeTest(C_111_1_class_8()));
+ Expect.isFalse(typeTest(C_111_1_class_9()));
+
+ Expect.isTrue(closureC_100_0(C_100_0())(C_100_0()));
+ Expect.isTrue(closureC_110_0(C_110_0())(C_110_0()));
+ Expect.isTrue(closureC_101_1(C_101_1())(C_101_1()));
+ Expect.isTrue(closureC_111_1(C_111_1())(C_111_1()));
+ Expect.isTrue(closureC_110_0_class_1(C_110_0_class_1())(C_110_0_class_1()));
+ Expect.isTrue(closureC_110_0_class_2(C_110_0_class_2())(C_110_0_class_2()));
+ Expect.isTrue(closureC_110_0_class_3(C_110_0_class_3())(C_110_0_class_3()));
+ Expect.isTrue(closureC_110_0_class_4(C_110_0_class_4())(C_110_0_class_4()));
+ Expect.isTrue(closureC_110_0_class_5(C_110_0_class_5())(C_110_0_class_5()));
+ Expect.isTrue(closureC_110_0_class_6(C_110_0_class_6())(C_110_0_class_6()));
+ Expect.isTrue(closureC_110_0_class_7(C_110_0_class_7())(C_110_0_class_7()));
+ Expect.isTrue(closureC_101_1_class_1(C_101_1_class_1())(C_101_1_class_1()));
+ Expect.isTrue(closureC_101_1_class_2(C_101_1_class_2())(C_101_1_class_2()));
+ Expect.isTrue(closureC_101_1_class_3(C_101_1_class_3())(C_101_1_class_3()));
+ Expect.isTrue(closureC_101_1_class_4(C_101_1_class_4())(C_101_1_class_4()));
+ Expect.isTrue(closureC_101_1_class_5(C_101_1_class_5())(C_101_1_class_5()));
+ Expect.isTrue(closureC_101_1_class_6(C_101_1_class_6())(C_101_1_class_6()));
+ Expect.isTrue(closureC_111_1_class_1(C_111_1_class_1())(C_111_1_class_1()));
+ Expect.isTrue(closureC_111_1_class_2(C_111_1_class_2())(C_111_1_class_2()));
+ Expect.isTrue(closureC_111_1_class_3(C_111_1_class_3())(C_111_1_class_3()));
+ Expect.isTrue(closureC_111_1_class_4(C_111_1_class_4())(C_111_1_class_4()));
+ Expect.isTrue(closureC_111_1_class_5(C_111_1_class_5())(C_111_1_class_5()));
+ Expect.isTrue(closureC_111_1_class_6(C_111_1_class_6())(C_111_1_class_6()));
+ Expect.isTrue(closureC_111_1_class_7(C_111_1_class_7())(C_111_1_class_7()));
+ Expect.isTrue(closureC_111_1_class_8(C_111_1_class_8())(C_111_1_class_8()));
+ Expect.isTrue(closureC_111_1_class_9(C_111_1_class_9())(C_111_1_class_9()));
+
+ Expect.equals(
+ closureC_100_0(C_100_0()).runtimeType.toString(), '(C_100_0) => bool');
+ Expect.equals(
+ closureC_110_0(C_110_0()).runtimeType.toString(), '(C_110_0) => bool');
+ Expect.equals(
+ closureC_101_1(C_101_1()).runtimeType.toString(), '(C_101_1) => bool');
+ Expect.equals(
+ closureC_111_1(C_111_1()).runtimeType.toString(), '(C_111_1) => bool');
+ Expect.equals(
+ closureC_110_0_class_1(C_110_0_class_1()).runtimeType.toString(),
+ '(C_110_0_class_1) => bool');
+ Expect.equals(
+ closureC_110_0_class_2(C_110_0_class_2()).runtimeType.toString(),
+ '(C_110_0_class_2) => bool');
+ Expect.equals(
+ closureC_110_0_class_3(C_110_0_class_3()).runtimeType.toString(),
+ '(C_110_0_class_3) => bool');
+ Expect.equals(
+ closureC_110_0_class_4(C_110_0_class_4()).runtimeType.toString(),
+ '(C_110_0_class_4) => bool');
+ Expect.equals(
+ closureC_110_0_class_5(C_110_0_class_5()).runtimeType.toString(),
+ '(C_110_0_class_5) => bool');
+ Expect.equals(
+ closureC_110_0_class_6(C_110_0_class_6()).runtimeType.toString(),
+ '(C_110_0_class_6) => bool');
+ Expect.equals(
+ closureC_110_0_class_7(C_110_0_class_7()).runtimeType.toString(),
+ '(C_110_0_class_7) => bool');
+ Expect.equals(
+ closureC_101_1_class_1(C_101_1_class_1()).runtimeType.toString(),
+ '(C_101_1_class_1) => bool');
+ Expect.equals(
+ closureC_101_1_class_2(C_101_1_class_2()).runtimeType.toString(),
+ '(C_101_1_class_2) => bool');
+ Expect.equals(
+ closureC_101_1_class_3(C_101_1_class_3()).runtimeType.toString(),
+ '(C_101_1_class_3) => bool');
+ Expect.equals(
+ closureC_101_1_class_4(C_101_1_class_4()).runtimeType.toString(),
+ '(C_101_1_class_4) => bool');
+ Expect.equals(
+ closureC_101_1_class_5(C_101_1_class_5()).runtimeType.toString(),
+ '(C_101_1_class_5) => bool');
+ Expect.equals(
+ closureC_101_1_class_6(C_101_1_class_6()).runtimeType.toString(),
+ '(C_101_1_class_6) => bool');
+ Expect.equals(
+ closureC_111_1_class_1(C_111_1_class_1()).runtimeType.toString(),
+ '(C_111_1_class_1) => bool');
+ Expect.equals(
+ closureC_111_1_class_2(C_111_1_class_2()).runtimeType.toString(),
+ '(C_111_1_class_2) => bool');
+ Expect.equals(
+ closureC_111_1_class_3(C_111_1_class_3()).runtimeType.toString(),
+ '(C_111_1_class_3) => bool');
+ Expect.equals(
+ closureC_111_1_class_4(C_111_1_class_4()).runtimeType.toString(),
+ '(C_111_1_class_4) => bool');
+ Expect.equals(
+ closureC_111_1_class_5(C_111_1_class_5()).runtimeType.toString(),
+ '(C_111_1_class_5) => bool');
+ Expect.equals(
+ closureC_111_1_class_6(C_111_1_class_6()).runtimeType.toString(),
+ '(C_111_1_class_6) => bool');
+ Expect.equals(
+ closureC_111_1_class_7(C_111_1_class_7()).runtimeType.toString(),
+ '(C_111_1_class_7) => bool');
+ Expect.equals(
+ closureC_111_1_class_8(C_111_1_class_8()).runtimeType.toString(),
+ '(C_111_1_class_8) => bool');
+ Expect.equals(
+ closureC_111_1_class_9(C_111_1_class_9()).runtimeType.toString(),
+ '(C_111_1_class_9) => bool');
+
Set<String> uniques = {};
// f_1**_*;
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/main.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/main.dart
index fb21cef..5f1c08c 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/main.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/less_simple/main.dart
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import 'lib1.dart';
import 'lib2.dart';
import 'lib3.dart';
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib1.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib1.dart
index c664b0c..d91a48b 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib1.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib1.dart
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import 'lib_100.dart' deferred as b1;
entryLib1() async {
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib2.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib2.dart
index 6741292..7960202 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib2.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib2.dart
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import 'lib_010.dart' deferred as b2;
entryLib2() async {
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib3.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib3.dart
index 2133ef7..e62cd54 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib3.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib3.dart
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import 'lib_001.dart' deferred as b3;
entryLib3() async {
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/libImport.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/libImport.dart
index 8d1058b..27f453d 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/libImport.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/libImport.dart
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import "package:expect/expect.dart";
void v(Set<String> u, String name, int bit) {
@@ -11,6 +10,254 @@
Expect.equals(name[bit], '1');
}
+class C_100 {
+ const C_100();
+}
+
+class M_100 {}
+
+class T_100 {}
+
+const C_100 iC_100 = const C_100();
+closureC_100(foo) => (C_100 unused) => iC_100.toString() == foo.toString();
+
+class C_101 {
+ const C_101();
+}
+
+class M_101 {}
+
+class T_101 {}
+
+const C_101 iC_101 = const C_101();
+closureC_101(foo) => (C_101 unused) => iC_101.toString() == foo.toString();
+
+class C_111 {
+ const C_111();
+}
+
+class M_111 {}
+
+class T_111 {}
+
+const C_111 iC_111 = const C_111();
+closureC_111(foo) => (C_111 unused) => iC_111.toString() == foo.toString();
+
+class C_010 {
+ const C_010();
+}
+
+class M_010 {}
+
+class T_010 {}
+
+const C_010 iC_010 = const C_010();
+closureC_010(foo) => (C_010 unused) => iC_010.toString() == foo.toString();
+
+class C_011 {
+ const C_011();
+}
+
+class M_011 {}
+
+class T_011 {}
+
+const C_011 iC_011 = const C_011();
+closureC_011(foo) => (C_011 unused) => iC_011.toString() == foo.toString();
+
+class C_001 {
+ const C_001();
+}
+
+class M_001 {}
+
+class T_001 {}
+
+const C_001 iC_001 = const C_001();
+closureC_001(foo) => (C_001 unused) => iC_001.toString() == foo.toString();
+
+class C_101_class_1 extends C_100
+ with M_100, M_101, M_111, M_001
+ implements C_101, C_111, C_001 {
+ const C_101_class_1();
+}
+
+const C_101_class_1 iC_101_class_1 = const C_101_class_1();
+closureC_101_class_1(foo) =>
+ (C_101_class_1 unused) => iC_101_class_1.toString() == foo.toString();
+
+class T_101_type__1 extends T_100
+ with M_100, M_101, M_111, M_001
+ implements T_101, T_111, T_001 {}
+
+class C_101_class_2 extends C_101
+ with M_100, M_101, M_111, M_001
+ implements C_100, C_111, C_001 {
+ const C_101_class_2();
+}
+
+const C_101_class_2 iC_101_class_2 = const C_101_class_2();
+closureC_101_class_2(foo) =>
+ (C_101_class_2 unused) => iC_101_class_2.toString() == foo.toString();
+
+class T_101_type__2 extends T_101
+ with M_100, M_101, M_111, M_001
+ implements T_100, T_111, T_001 {}
+
+class C_101_class_3 extends C_111
+ with M_100, M_101, M_111, M_001
+ implements C_100, C_101, C_001 {
+ const C_101_class_3();
+}
+
+const C_101_class_3 iC_101_class_3 = const C_101_class_3();
+closureC_101_class_3(foo) =>
+ (C_101_class_3 unused) => iC_101_class_3.toString() == foo.toString();
+
+class T_101_type__3 extends T_111
+ with M_100, M_101, M_111, M_001
+ implements T_100, T_101, T_001 {}
+
+class C_101_class_4 extends C_001
+ with M_100, M_101, M_111, M_001
+ implements C_100, C_101, C_111 {
+ const C_101_class_4();
+}
+
+const C_101_class_4 iC_101_class_4 = const C_101_class_4();
+closureC_101_class_4(foo) =>
+ (C_101_class_4 unused) => iC_101_class_4.toString() == foo.toString();
+
+class T_101_type__4 extends T_001
+ with M_100, M_101, M_111, M_001
+ implements T_100, T_101, T_111 {}
+
+class C_111_class_1 extends C_100
+ with M_100, M_101, M_111, M_010, M_011, M_001
+ implements C_101, C_111, C_010, C_011, C_001 {
+ const C_111_class_1();
+}
+
+const C_111_class_1 iC_111_class_1 = const C_111_class_1();
+closureC_111_class_1(foo) =>
+ (C_111_class_1 unused) => iC_111_class_1.toString() == foo.toString();
+
+class T_111_type__1 extends T_100
+ with M_100, M_101, M_111, M_010, M_011, M_001
+ implements T_101, T_111, T_010, T_011, T_001 {}
+
+class C_111_class_2 extends C_101
+ with M_100, M_101, M_111, M_010, M_011, M_001
+ implements C_100, C_111, C_010, C_011, C_001 {
+ const C_111_class_2();
+}
+
+const C_111_class_2 iC_111_class_2 = const C_111_class_2();
+closureC_111_class_2(foo) =>
+ (C_111_class_2 unused) => iC_111_class_2.toString() == foo.toString();
+
+class T_111_type__2 extends T_101
+ with M_100, M_101, M_111, M_010, M_011, M_001
+ implements T_100, T_111, T_010, T_011, T_001 {}
+
+class C_111_class_3 extends C_111
+ with M_100, M_101, M_111, M_010, M_011, M_001
+ implements C_100, C_101, C_010, C_011, C_001 {
+ const C_111_class_3();
+}
+
+const C_111_class_3 iC_111_class_3 = const C_111_class_3();
+closureC_111_class_3(foo) =>
+ (C_111_class_3 unused) => iC_111_class_3.toString() == foo.toString();
+
+class T_111_type__3 extends T_111
+ with M_100, M_101, M_111, M_010, M_011, M_001
+ implements T_100, T_101, T_010, T_011, T_001 {}
+
+class C_111_class_4 extends C_010
+ with M_100, M_101, M_111, M_010, M_011, M_001
+ implements C_100, C_101, C_111, C_011, C_001 {
+ const C_111_class_4();
+}
+
+const C_111_class_4 iC_111_class_4 = const C_111_class_4();
+closureC_111_class_4(foo) =>
+ (C_111_class_4 unused) => iC_111_class_4.toString() == foo.toString();
+
+class T_111_type__4 extends T_010
+ with M_100, M_101, M_111, M_010, M_011, M_001
+ implements T_100, T_101, T_111, T_011, T_001 {}
+
+class C_111_class_5 extends C_011
+ with M_100, M_101, M_111, M_010, M_011, M_001
+ implements C_100, C_101, C_111, C_010, C_001 {
+ const C_111_class_5();
+}
+
+const C_111_class_5 iC_111_class_5 = const C_111_class_5();
+closureC_111_class_5(foo) =>
+ (C_111_class_5 unused) => iC_111_class_5.toString() == foo.toString();
+
+class T_111_type__5 extends T_011
+ with M_100, M_101, M_111, M_010, M_011, M_001
+ implements T_100, T_101, T_111, T_010, T_001 {}
+
+class C_111_class_6 extends C_001
+ with M_100, M_101, M_111, M_010, M_011, M_001
+ implements C_100, C_101, C_111, C_010, C_011 {
+ const C_111_class_6();
+}
+
+const C_111_class_6 iC_111_class_6 = const C_111_class_6();
+closureC_111_class_6(foo) =>
+ (C_111_class_6 unused) => iC_111_class_6.toString() == foo.toString();
+
+class T_111_type__6 extends T_001
+ with M_100, M_101, M_111, M_010, M_011, M_001
+ implements T_100, T_101, T_111, T_010, T_011 {}
+
+class C_011_class_1 extends C_010
+ with M_010, M_011, M_001
+ implements C_011, C_001 {
+ const C_011_class_1();
+}
+
+const C_011_class_1 iC_011_class_1 = const C_011_class_1();
+closureC_011_class_1(foo) =>
+ (C_011_class_1 unused) => iC_011_class_1.toString() == foo.toString();
+
+class T_011_type__1 extends T_010
+ with M_010, M_011, M_001
+ implements T_011, T_001 {}
+
+class C_011_class_2 extends C_011
+ with M_010, M_011, M_001
+ implements C_010, C_001 {
+ const C_011_class_2();
+}
+
+const C_011_class_2 iC_011_class_2 = const C_011_class_2();
+closureC_011_class_2(foo) =>
+ (C_011_class_2 unused) => iC_011_class_2.toString() == foo.toString();
+
+class T_011_type__2 extends T_011
+ with M_010, M_011, M_001
+ implements T_010, T_001 {}
+
+class C_011_class_3 extends C_001
+ with M_010, M_011, M_001
+ implements C_010, C_011 {
+ const C_011_class_3();
+}
+
+const C_011_class_3 iC_011_class_3 = const C_011_class_3();
+closureC_011_class_3(foo) =>
+ (C_011_class_3 unused) => iC_011_class_3.toString() == foo.toString();
+
+class T_011_type__3 extends T_001
+ with M_010, M_011, M_001
+ implements T_010, T_011 {}
+
@pragma('dart2js:noInline')
f_100(Set<String> u, int b) => v(u, '100', b);
@pragma('dart2js:noInline')
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_001.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_001.dart
index 16c561a..c8be5f5 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_001.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_001.dart
@@ -3,13 +3,119 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import "package:expect/expect.dart";
import 'libImport.dart';
@pragma('dart2js:noInline')
+typeTest(dynamic t) {
+ if (t is T_001) {
+ return true;
+ }
+ if (t is T_101_type__1) {
+ return true;
+ }
+ if (t is T_101_type__2) {
+ return true;
+ }
+ if (t is T_101_type__3) {
+ return true;
+ }
+ if (t is T_101_type__4) {
+ return true;
+ }
+ if (t is T_111_type__1) {
+ return true;
+ }
+ if (t is T_111_type__2) {
+ return true;
+ }
+ if (t is T_111_type__3) {
+ return true;
+ }
+ if (t is T_111_type__4) {
+ return true;
+ }
+ if (t is T_111_type__5) {
+ return true;
+ }
+ if (t is T_111_type__6) {
+ return true;
+ }
+ if (t is T_011_type__1) {
+ return true;
+ }
+ if (t is T_011_type__2) {
+ return true;
+ }
+ if (t is T_011_type__3) {
+ return true;
+ }
+ return false;
+}
+
+@pragma('dart2js:noInline')
g_001() {
+ // C_**1;
+ Expect.isFalse(typeTest(C_001()));
+ Expect.isFalse(typeTest(C_101_class_1()));
+ Expect.isFalse(typeTest(C_101_class_2()));
+ Expect.isFalse(typeTest(C_101_class_3()));
+ Expect.isFalse(typeTest(C_101_class_4()));
+ Expect.isFalse(typeTest(C_111_class_1()));
+ Expect.isFalse(typeTest(C_111_class_2()));
+ Expect.isFalse(typeTest(C_111_class_3()));
+ Expect.isFalse(typeTest(C_111_class_4()));
+ Expect.isFalse(typeTest(C_111_class_5()));
+ Expect.isFalse(typeTest(C_111_class_6()));
+ Expect.isFalse(typeTest(C_011_class_1()));
+ Expect.isFalse(typeTest(C_011_class_2()));
+ Expect.isFalse(typeTest(C_011_class_3()));
+
+ Expect.isTrue(closureC_001(C_001())(C_001()));
+ Expect.isTrue(closureC_101_class_1(C_101_class_1())(C_101_class_1()));
+ Expect.isTrue(closureC_101_class_2(C_101_class_2())(C_101_class_2()));
+ Expect.isTrue(closureC_101_class_3(C_101_class_3())(C_101_class_3()));
+ Expect.isTrue(closureC_101_class_4(C_101_class_4())(C_101_class_4()));
+ Expect.isTrue(closureC_111_class_1(C_111_class_1())(C_111_class_1()));
+ Expect.isTrue(closureC_111_class_2(C_111_class_2())(C_111_class_2()));
+ Expect.isTrue(closureC_111_class_3(C_111_class_3())(C_111_class_3()));
+ Expect.isTrue(closureC_111_class_4(C_111_class_4())(C_111_class_4()));
+ Expect.isTrue(closureC_111_class_5(C_111_class_5())(C_111_class_5()));
+ Expect.isTrue(closureC_111_class_6(C_111_class_6())(C_111_class_6()));
+ Expect.isTrue(closureC_011_class_1(C_011_class_1())(C_011_class_1()));
+ Expect.isTrue(closureC_011_class_2(C_011_class_2())(C_011_class_2()));
+ Expect.isTrue(closureC_011_class_3(C_011_class_3())(C_011_class_3()));
+
+ Expect.equals(
+ closureC_001(C_001()).runtimeType.toString(), '(C_001) => bool');
+ Expect.equals(closureC_101_class_1(C_101_class_1()).runtimeType.toString(),
+ '(C_101_class_1) => bool');
+ Expect.equals(closureC_101_class_2(C_101_class_2()).runtimeType.toString(),
+ '(C_101_class_2) => bool');
+ Expect.equals(closureC_101_class_3(C_101_class_3()).runtimeType.toString(),
+ '(C_101_class_3) => bool');
+ Expect.equals(closureC_101_class_4(C_101_class_4()).runtimeType.toString(),
+ '(C_101_class_4) => bool');
+ Expect.equals(closureC_111_class_1(C_111_class_1()).runtimeType.toString(),
+ '(C_111_class_1) => bool');
+ Expect.equals(closureC_111_class_2(C_111_class_2()).runtimeType.toString(),
+ '(C_111_class_2) => bool');
+ Expect.equals(closureC_111_class_3(C_111_class_3()).runtimeType.toString(),
+ '(C_111_class_3) => bool');
+ Expect.equals(closureC_111_class_4(C_111_class_4()).runtimeType.toString(),
+ '(C_111_class_4) => bool');
+ Expect.equals(closureC_111_class_5(C_111_class_5()).runtimeType.toString(),
+ '(C_111_class_5) => bool');
+ Expect.equals(closureC_111_class_6(C_111_class_6()).runtimeType.toString(),
+ '(C_111_class_6) => bool');
+ Expect.equals(closureC_011_class_1(C_011_class_1()).runtimeType.toString(),
+ '(C_011_class_1) => bool');
+ Expect.equals(closureC_011_class_2(C_011_class_2()).runtimeType.toString(),
+ '(C_011_class_2) => bool');
+ Expect.equals(closureC_011_class_3(C_011_class_3()).runtimeType.toString(),
+ '(C_011_class_3) => bool');
+
Set<String> uniques = {};
// f_**1;
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_010.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_010.dart
index 3ac623a..6827fe3 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_010.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_010.dart
@@ -3,13 +3,98 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import "package:expect/expect.dart";
import 'libImport.dart';
@pragma('dart2js:noInline')
+typeTest(dynamic t) {
+ if (t is T_010) {
+ return true;
+ }
+ if (t is T_011) {
+ return true;
+ }
+ if (t is T_111_type__1) {
+ return true;
+ }
+ if (t is T_111_type__2) {
+ return true;
+ }
+ if (t is T_111_type__3) {
+ return true;
+ }
+ if (t is T_111_type__4) {
+ return true;
+ }
+ if (t is T_111_type__5) {
+ return true;
+ }
+ if (t is T_111_type__6) {
+ return true;
+ }
+ if (t is T_011_type__1) {
+ return true;
+ }
+ if (t is T_011_type__2) {
+ return true;
+ }
+ if (t is T_011_type__3) {
+ return true;
+ }
+ return false;
+}
+
+@pragma('dart2js:noInline')
g_010() {
+ // C_*1*;
+ Expect.isFalse(typeTest(C_010()));
+ Expect.isFalse(typeTest(C_011()));
+ Expect.isFalse(typeTest(C_111_class_1()));
+ Expect.isFalse(typeTest(C_111_class_2()));
+ Expect.isFalse(typeTest(C_111_class_3()));
+ Expect.isFalse(typeTest(C_111_class_4()));
+ Expect.isFalse(typeTest(C_111_class_5()));
+ Expect.isFalse(typeTest(C_111_class_6()));
+ Expect.isFalse(typeTest(C_011_class_1()));
+ Expect.isFalse(typeTest(C_011_class_2()));
+ Expect.isFalse(typeTest(C_011_class_3()));
+
+ Expect.isTrue(closureC_010(C_010())(C_010()));
+ Expect.isTrue(closureC_011(C_011())(C_011()));
+ Expect.isTrue(closureC_111_class_1(C_111_class_1())(C_111_class_1()));
+ Expect.isTrue(closureC_111_class_2(C_111_class_2())(C_111_class_2()));
+ Expect.isTrue(closureC_111_class_3(C_111_class_3())(C_111_class_3()));
+ Expect.isTrue(closureC_111_class_4(C_111_class_4())(C_111_class_4()));
+ Expect.isTrue(closureC_111_class_5(C_111_class_5())(C_111_class_5()));
+ Expect.isTrue(closureC_111_class_6(C_111_class_6())(C_111_class_6()));
+ Expect.isTrue(closureC_011_class_1(C_011_class_1())(C_011_class_1()));
+ Expect.isTrue(closureC_011_class_2(C_011_class_2())(C_011_class_2()));
+ Expect.isTrue(closureC_011_class_3(C_011_class_3())(C_011_class_3()));
+
+ Expect.equals(
+ closureC_010(C_010()).runtimeType.toString(), '(C_010) => bool');
+ Expect.equals(
+ closureC_011(C_011()).runtimeType.toString(), '(C_011) => bool');
+ Expect.equals(closureC_111_class_1(C_111_class_1()).runtimeType.toString(),
+ '(C_111_class_1) => bool');
+ Expect.equals(closureC_111_class_2(C_111_class_2()).runtimeType.toString(),
+ '(C_111_class_2) => bool');
+ Expect.equals(closureC_111_class_3(C_111_class_3()).runtimeType.toString(),
+ '(C_111_class_3) => bool');
+ Expect.equals(closureC_111_class_4(C_111_class_4()).runtimeType.toString(),
+ '(C_111_class_4) => bool');
+ Expect.equals(closureC_111_class_5(C_111_class_5()).runtimeType.toString(),
+ '(C_111_class_5) => bool');
+ Expect.equals(closureC_111_class_6(C_111_class_6()).runtimeType.toString(),
+ '(C_111_class_6) => bool');
+ Expect.equals(closureC_011_class_1(C_011_class_1()).runtimeType.toString(),
+ '(C_011_class_1) => bool');
+ Expect.equals(closureC_011_class_2(C_011_class_2()).runtimeType.toString(),
+ '(C_011_class_2) => bool');
+ Expect.equals(closureC_011_class_3(C_011_class_3()).runtimeType.toString(),
+ '(C_011_class_3) => bool');
+
Set<String> uniques = {};
// f_*1*;
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_100.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_100.dart
index 631b02b..5f96ca1 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_100.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/lib_100.dart
@@ -3,13 +3,112 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import "package:expect/expect.dart";
import 'libImport.dart';
@pragma('dart2js:noInline')
+typeTest(dynamic t) {
+ if (t is T_100) {
+ return true;
+ }
+ if (t is T_101) {
+ return true;
+ }
+ if (t is T_111) {
+ return true;
+ }
+ if (t is T_101_type__1) {
+ return true;
+ }
+ if (t is T_101_type__2) {
+ return true;
+ }
+ if (t is T_101_type__3) {
+ return true;
+ }
+ if (t is T_101_type__4) {
+ return true;
+ }
+ if (t is T_111_type__1) {
+ return true;
+ }
+ if (t is T_111_type__2) {
+ return true;
+ }
+ if (t is T_111_type__3) {
+ return true;
+ }
+ if (t is T_111_type__4) {
+ return true;
+ }
+ if (t is T_111_type__5) {
+ return true;
+ }
+ if (t is T_111_type__6) {
+ return true;
+ }
+ return false;
+}
+
+@pragma('dart2js:noInline')
g_100() {
+ // C_1**;
+ Expect.isFalse(typeTest(C_100()));
+ Expect.isFalse(typeTest(C_101()));
+ Expect.isFalse(typeTest(C_111()));
+ Expect.isFalse(typeTest(C_101_class_1()));
+ Expect.isFalse(typeTest(C_101_class_2()));
+ Expect.isFalse(typeTest(C_101_class_3()));
+ Expect.isFalse(typeTest(C_101_class_4()));
+ Expect.isFalse(typeTest(C_111_class_1()));
+ Expect.isFalse(typeTest(C_111_class_2()));
+ Expect.isFalse(typeTest(C_111_class_3()));
+ Expect.isFalse(typeTest(C_111_class_4()));
+ Expect.isFalse(typeTest(C_111_class_5()));
+ Expect.isFalse(typeTest(C_111_class_6()));
+
+ Expect.isTrue(closureC_100(C_100())(C_100()));
+ Expect.isTrue(closureC_101(C_101())(C_101()));
+ Expect.isTrue(closureC_111(C_111())(C_111()));
+ Expect.isTrue(closureC_101_class_1(C_101_class_1())(C_101_class_1()));
+ Expect.isTrue(closureC_101_class_2(C_101_class_2())(C_101_class_2()));
+ Expect.isTrue(closureC_101_class_3(C_101_class_3())(C_101_class_3()));
+ Expect.isTrue(closureC_101_class_4(C_101_class_4())(C_101_class_4()));
+ Expect.isTrue(closureC_111_class_1(C_111_class_1())(C_111_class_1()));
+ Expect.isTrue(closureC_111_class_2(C_111_class_2())(C_111_class_2()));
+ Expect.isTrue(closureC_111_class_3(C_111_class_3())(C_111_class_3()));
+ Expect.isTrue(closureC_111_class_4(C_111_class_4())(C_111_class_4()));
+ Expect.isTrue(closureC_111_class_5(C_111_class_5())(C_111_class_5()));
+ Expect.isTrue(closureC_111_class_6(C_111_class_6())(C_111_class_6()));
+
+ Expect.equals(
+ closureC_100(C_100()).runtimeType.toString(), '(C_100) => bool');
+ Expect.equals(
+ closureC_101(C_101()).runtimeType.toString(), '(C_101) => bool');
+ Expect.equals(
+ closureC_111(C_111()).runtimeType.toString(), '(C_111) => bool');
+ Expect.equals(closureC_101_class_1(C_101_class_1()).runtimeType.toString(),
+ '(C_101_class_1) => bool');
+ Expect.equals(closureC_101_class_2(C_101_class_2()).runtimeType.toString(),
+ '(C_101_class_2) => bool');
+ Expect.equals(closureC_101_class_3(C_101_class_3()).runtimeType.toString(),
+ '(C_101_class_3) => bool');
+ Expect.equals(closureC_101_class_4(C_101_class_4()).runtimeType.toString(),
+ '(C_101_class_4) => bool');
+ Expect.equals(closureC_111_class_1(C_111_class_1()).runtimeType.toString(),
+ '(C_111_class_1) => bool');
+ Expect.equals(closureC_111_class_2(C_111_class_2()).runtimeType.toString(),
+ '(C_111_class_2) => bool');
+ Expect.equals(closureC_111_class_3(C_111_class_3()).runtimeType.toString(),
+ '(C_111_class_3) => bool');
+ Expect.equals(closureC_111_class_4(C_111_class_4()).runtimeType.toString(),
+ '(C_111_class_4) => bool');
+ Expect.equals(closureC_111_class_5(C_111_class_5()).runtimeType.toString(),
+ '(C_111_class_5) => bool');
+ Expect.equals(closureC_111_class_6(C_111_class_6()).runtimeType.toString(),
+ '(C_111_class_6) => bool');
+
Set<String> uniques = {};
// f_1**;
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/main.dart b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/main.dart
index ef1a426..afcad53 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/main.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/golden/simple/main.dart
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
import 'lib1.dart';
import 'lib2.dart';
import 'lib3.dart';
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/graph_isomorphizer_test.dart b/pkg/compiler/test/tool/graph_isomorphizer/graph_isomorphizer_test.dart
index eda8526..228adcd 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/graph_isomorphizer_test.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/graph_isomorphizer_test.dart
@@ -8,6 +8,7 @@
import 'package:expect/expect.dart';
import 'package:compiler/compiler_new.dart';
+import 'package:dart_style/dart_style.dart' show DartFormatter;
import '../../helpers/memory_compiler.dart';
import '../../../tool/graph_isomorphizer.dart';
@@ -42,7 +43,8 @@
void verifyGeneratedFile(
String filename, StringBuffer contents, Map<String, String> expectations) {
- Expect.stringEquals(contents.toString(), expectations[filename]);
+ Expect.stringEquals(
+ DartFormatter().format(contents.toString()), expectations[filename]);
}
GraphIsomorphizer generateFiles(List<String> graphFileLines,
diff --git a/pkg/compiler/tool/graph_isomorphizer.dart b/pkg/compiler/tool/graph_isomorphizer.dart
index dca1cf1..49894bd 100644
--- a/pkg/compiler/tool/graph_isomorphizer.dart
+++ b/pkg/compiler/tool/graph_isomorphizer.dart
@@ -37,8 +37,14 @@
/// with three bits, each of 100, 010, 001 and 111 must be present in the graph
/// file, but 110, 101, and 011 are optional.
+// TODO(joshualitt): This is a good start for a fuzzer. There is still work to
+// do:
+// * Emit some classes as const and some not
+// * Randomize what we emit as we walk the graph so it is more sparse.
+
import 'dart:io';
import 'dart:math';
+import 'package:dart_style/dart_style.dart' show DartFormatter;
typedef NameFunc = String Function(List<int>, int);
@@ -112,6 +118,18 @@
/// A map of bit positions to lists of bit lists.
final Map<int, List<List<int>>> names;
+ /// A map of bit positions to lists of class names.
+ final Map<int, List<String>> classNames = {};
+ final Map<int, List<String>> mixerClassNames = {};
+
+ /// A map of bit positions to lists of mixin names.
+ final Map<int, List<String>> mixinNames = {};
+
+ /// A map of bit positions to lists of class names used only as types.
+ final Map<int, List<String>> typeNames = {};
+ final Map<int, List<String>> mixerTypeNames = {};
+ final Map<int, List<String>> closureNames = {};
+
/// We will permute bits up until the maximum bit.
int maxBit = 0;
@@ -135,6 +153,10 @@
out.write('import "package:expect/expect.dart";\n\n');
}
+ void newline(StringBuffer out) {
+ out.write('\n');
+ }
+
/// Generates the header for a file.
void generateHeader(StringBuffer out) {
if (!skipCopyright) {
@@ -144,11 +166,12 @@
// BSD-style license that can be found in the LICENSE file.
// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
-
""");
}
}
+ /// Generates the root import, where classes, types, mixins, and closures
+ /// live.
void generateRootImport(StringBuffer out) {
generateHeader(out);
importExpect(out);
@@ -161,11 +184,102 @@
" Expect.equals(name[bit], '1');\n" +
'}\n\n');
- Set<String> uniques = {};
-
// Sort the names to ensure they are in a canonical order.
var nameKeys = names.keys.toList();
nameKeys.sort();
+
+ // Generate the 'base' classes, mixins, and types which will be combined to
+ // generate hierarchies. Also generate a const instance per class and a closure
+ // to invoke.
+ Set<String> uniques = {};
+ for (var bitPosition in nameKeys) {
+ var bitsList = names[bitPosition];
+ for (var bits in bitsList) {
+ var name = generateBitString(bits);
+ if (!uniques.add(name)) continue;
+ String className = 'C$name';
+ String mixinName = 'M$name';
+ String typeName = 'T$name';
+ (classNames[bitPosition] ??= []).add(className);
+ (mixinNames[bitPosition] ??= []).add(mixinName);
+ (typeNames[bitPosition] ??= []).add(typeName);
+ (mixerClassNames[bitPosition] ??= []).add(className);
+ (mixerTypeNames[bitPosition] ??= []).add(typeName);
+ out.write('class $className { const $className(); }\n');
+ out.write('class $mixinName {}\n');
+ out.write('class $typeName {}\n');
+ out.write('const $className i$className = const $className();\n');
+ out.write('closure$className(foo) => ($className unused) ');
+ out.write('=> i$className.toString() == foo.toString();\n');
+ }
+ }
+
+ // Generate combined classes and types, as well as const instances and
+ // closures.
+ newline(out);
+ uniques = {};
+ for (var bitPosition in nameKeys) {
+ var bitsList = names[bitPosition];
+ for (var bits in bitsList) {
+ var name = generateBitString(bits);
+ var bitCount = bits.reduce((a, b) => a + b);
+ var baseName = 'C$name';
+ if (!uniques.add(baseName)) continue;
+ if (bitCount > 1) {
+ List<String> classes = [];
+ List<String> mixins = [];
+ List<String> types = [];
+ for (int i = 0; i < bits.length; i++) {
+ if (bits[i] == 1) {
+ classes.addAll(classNames[i]);
+ mixins.addAll(mixinNames[i]);
+ types.addAll(typeNames[i]);
+ }
+ }
+ String mixinString = mixins.join(', ');
+ int count = 1;
+ assert(classes.length == types.length);
+ for (int i = 0; i < classes.length; i++) {
+ var cls = classes[i];
+ var type = types[i];
+ List<String> classImpls = [];
+ List<String> typeImpls = [];
+ if (i > 0) {
+ classImpls.addAll(classes.sublist(0, i));
+ typeImpls.addAll(types.sublist(0, i));
+ }
+ if (i < classes.length - 1) {
+ classImpls.addAll(classes.sublist(i + 1));
+ typeImpls.addAll(types.sublist(i + 1));
+ }
+ var classImplementsString = classImpls.join(', ');
+ String className = '${baseName}_class_${count}';
+ out.write('class $className extends $cls with $mixinString ');
+ out.write(
+ 'implements $classImplementsString { const $className(); }\n');
+ out.write('const $className i$className = const $className();\n');
+ out.write('closure$className(foo) => ($className unused) ');
+ out.write('=> i$className.toString() == foo.toString();\n');
+
+ var typeImplementsString = typeImpls.join(', ');
+ String typeName = 'T${name}_type__${count}';
+ out.write('class $typeName extends $type with $mixinString ');
+ out.write('implements $typeImplementsString {}\n');
+ for (int i = 0; i < bits.length; i++) {
+ if (bits[i] == 1) {
+ mixerClassNames[i].add(className);
+ mixerTypeNames[i].add(typeName);
+ }
+ }
+ count++;
+ }
+ }
+ }
+ }
+
+ // Generate functions.
+ newline(out);
+ uniques = {};
for (var name in nameKeys) {
var bitsList = names[name];
for (var bits in bitsList) {
@@ -186,13 +300,41 @@
generateHeader(out);
importExpect(out);
out.write("import '$import';\n\n");
+
+ // create type test.
noInlineDecorator(out);
- out.write('g$name() {\n'
- ' Set<String> uniques = {};\n\n'
- ' // f${generateCommentName(bits, bit)};\n');
- int count = 0;
+ out.write('typeTest(dynamic t) {\n');
+ for (var type in mixerTypeNames[bit]) {
+ out.write(' if (t is $type) { return true; }\n');
+ }
+ out.write(' return false;\n');
+ out.write('}\n\n');
+
+ noInlineDecorator(out);
+ out.write('g$name() {\n');
+ out.write(' // C${generateCommentName(bits, bit)};\n');
+
+ // Construct new instances of each class and pass them to the typeTest
+ for (var cls in mixerClassNames[bit]) {
+ out.write(' Expect.isFalse(typeTest($cls()));\n');
+ }
+ newline(out);
+
+ // Invoke the test closure for each class.
+ for (var cls in mixerClassNames[bit]) {
+ out.write(' Expect.isTrue(closure$cls($cls())($cls()));\n');
+ }
+ newline(out);
+
+ // Verify the runtimeTypes of the closures haven't been mangled.
+ for (var cls in mixerClassNames[bit]) {
+ out.write(' Expect.equals(closure$cls($cls()).runtimeType.toString(), ');
+ out.write("'($cls) => bool');\n");
+ }
+ newline(out);
// Collect the names so we can sort them and put them in a canonical order.
+ int count = 0;
List<String> namesBits = [];
names[bit].forEach((nameBits) {
var nameString = generateBitString(nameBits);
@@ -200,6 +342,9 @@
count++;
});
+ out.write(' Set<String> uniques = {};\n\n'
+ ' // f${generateCommentName(bits, bit)};\n');
+
namesBits.sort();
for (var name in namesBits) {
out.write(' f$name(uniques, $bit);\n');
@@ -300,7 +445,7 @@
var file = File(this.outDirectory + '/' + filename);
file.createSync(recursive: true);
var sink = file.openWrite();
- sink.write(contents);
+ sink.write(DartFormatter().format(contents.toString()));
sink.close();
}
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 6cc44bc..ff29dc3 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -5151,7 +5151,7 @@
}
int offset = reason.writeExpression.fileOffset;
return templateVariableCouldBeNullDueToWrite
- .withArguments(reason.variable.name)
+ .withArguments(reason.variable.name, reason.documentationLink)
.withLocation(inferrer.helper.uri, offset, noLength);
}
@@ -5160,7 +5160,7 @@
DemoteViaForEachVariableWrite<VariableDeclaration, Node> reason) {
int offset = (reason.node as TreeNode).fileOffset;
return templateVariableCouldBeNullDueToWrite
- .withArguments(reason.variable.name)
+ .withArguments(reason.variable.name, reason.documentationLink)
.withLocation(inferrer.helper.uri, offset, noLength);
}
@@ -5183,7 +5183,7 @@
propertyReference = member;
propertyType = reason.staticType;
return templateFieldNotPromoted
- .withArguments(reason.propertyName)
+ .withArguments(reason.propertyName, reason.documentationLink)
.withLocation(member.fileUri, member.fileOffset, noLength);
} else {
return null;
@@ -5192,6 +5192,8 @@
@override
LocatedMessage visitThisNotPromoted(ThisNotPromoted reason) {
- return messageThisNotPromoted.withoutLocation();
+ return templateThisNotPromoted
+ .withArguments(reason.documentationLink)
+ .withoutLocation();
}
}
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 5599193..384cb20 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -4656,13 +4656,15 @@
VariableCouldBeNullDueToWrite:
template: "Variable '#name' could be null due to an intervening write."
- tip: "Try null checking the variable after the write."
+ tip: "Try null checking the variable after the write. See #string"
FieldNotPromoted:
template: "'#name' refers to a property so it couldn't be promoted."
+ tip: "See #string"
ThisNotPromoted:
template: "'this' can't be promoted."
+ tip: "See #string"
NullablePropertyAccessError:
template: "Property '#name' cannot be accessed on '#type' because it is potentially null."
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index dfcff07..cce4737 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -882,6 +882,7 @@
preexisted
preexisting
preorder
+presented
presubmit
prev
prime
@@ -892,6 +893,7 @@
producers
product
progresses
+promo
proof
prop
propose
diff --git a/tools/VERSION b/tools/VERSION
index 59b36cd..873a2c8 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 13
PATCH 0
-PRERELEASE 191
+PRERELEASE 192
PRERELEASE_PATCH 0
\ No newline at end of file