Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(292)

Unified Diff: tests/compiler/dart2js/equivalence/check_functions.dart

Issue 3000763002: Implement .getCallType (Closed)
Patch Set: Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tests/compiler/dart2js/equivalence/check_functions.dart
diff --git a/tests/compiler/dart2js/equivalence/check_functions.dart b/tests/compiler/dart2js/equivalence/check_functions.dart
index 71a9c4166d8b359c77a63b3ffccd78c2e4dbbff5..9482e0941b73fd279e3a93435492e34b8d9d0fcb 100644
--- a/tests/compiler/dart2js/equivalence/check_functions.dart
+++ b/tests/compiler/dart2js/equivalence/check_functions.dart
@@ -213,10 +213,48 @@ void checkClassHierarchyNodes(
checkMixinUses(
closedWorld1, closedWorld2, node1.cls, node2.cls, elementEquivalence,
verbose: verbose);
- Expect.isNotNull(
- closedWorld1.getClassSet(cls1), "Missing ClassSet for $cls1");
- Expect.isNotNull(
- closedWorld2.getClassSet(cls2), "Missing ClassSet for $cls2");
+ ClassSet classSet1 = closedWorld1.getClassSet(cls1);
+ ClassSet classSet2 = closedWorld2.getClassSet(cls2);
+ Expect.isNotNull(classSet1, "Missing ClassSet for $cls1");
+ Expect.isNotNull(classSet2, "Missing ClassSet for $cls2");
+ checkClassSets(
+ closedWorld1, closedWorld2, classSet1, classSet2, elementEquivalence,
+ verbose: verbose, allowMissingClosureClasses: allowMissingClosureClasses);
+}
+
+void checkClassSets(
+ ClosedWorld closedWorld1,
+ ClosedWorld closedWorld2,
+ ClassSet classSet1,
+ ClassSet classSet2,
+ bool elementEquivalence(Entity a, Entity b),
+ {bool verbose: false,
+ bool allowMissingClosureClasses: false}) {
+ for (ClassHierarchyNode child in classSet1.subtypeNodes) {
+ bool found = false;
+ for (ClassHierarchyNode other in classSet2.subtypeNodes) {
+ ClassEntity child1 = child.cls;
+ ClassEntity child2 = other.cls;
+ if (elementEquivalence(child1, child2)) {
+ found = true;
+ break;
+ }
+ }
+ if (!found && (!child.cls.isClosure || !allowMissingClosureClasses)) {
+ if (child.isInstantiated) {
+ print('Missing subtype ${child.cls} of ${classSet1.cls} '
+ 'in ${classSet2.subtypeNodes}');
+ print(closedWorld1.dump(
+ verbose ? closedWorld1.commonElements.objectClass : classSet1.cls));
+ print(closedWorld2.dump(
+ verbose ? closedWorld2.commonElements.objectClass : classSet2.cls));
+ }
+ Expect.isFalse(
+ child.isInstantiated,
+ 'Missing subclass ${child.cls} of ${classSet1.cls} in '
+ '${classSet2.subtypeNodes}');
+ }
+ }
}
void checkMixinUses(
@@ -454,8 +492,8 @@ void checkBackendUsage(
usage2.isNoSuchMethodUsed);
}
-checkElementEnvironment(
- ElementEnvironment env1, ElementEnvironment env2, TestStrategy strategy,
+checkElementEnvironment(ElementEnvironment env1, ElementEnvironment env2,
+ DartTypes types1, DartTypes types2, TestStrategy strategy,
{bool checkConstructorBodies: false}) {
strategy.testElements(
env1, env2, 'mainLibrary', env1.mainLibrary, env2.mainLibrary);
@@ -551,6 +589,9 @@ checkElementEnvironment(
// TODO(johnniwinther): Check type variable bounds.
+ check(cls1, cls2, 'callType', types1.getCallType(thisType1),
+ types2.getCallType(thisType2), strategy.typeEquivalence);
+
List<InterfaceType> supertypes1 = <InterfaceType>[];
env1.forEachSupertype(cls1, supertypes1.add);
List<InterfaceType> supertypes2 = <InterfaceType>[];

Powered by Google App Engine
This is Rietveld 408576698