[cfe] Fix bug in dart type equivalence regarding typedef types

Change-Id: I0fc7d9227bd63401edfab46777c0ed8f30db5cbc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/153083
Auto-Submit: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Nicholas Shahan <nshahan@google.com>
This commit is contained in:
Dmitry Stefantsov 2020-07-01 17:11:41 +00:00 committed by commit-bot@chromium.org
parent bbcdc8dcff
commit af124aeb9b
2 changed files with 20 additions and 3 deletions

View file

@ -240,7 +240,7 @@ class DartTypeEquivalence implements DartTypeVisitor1<bool, DartType> {
}
assert(node.typeArguments.length == other.typeArguments.length);
for (int i = 0; i < node.typeArguments.length; ++i) {
if (!node.typeArguments[i].accept1(this, node.typeArguments[i])) {
if (!node.typeArguments[i].accept1(this, other.typeArguments[i])) {
return false;
}
}

View file

@ -147,6 +147,21 @@ run() {
equateTopTypes: true, ignoreAllNullabilities: true);
notEqual("FutureOr<Object>", "Object",
equateTopTypes: true, ignoreAllNullabilities: true);
// Typedef types.
areEqual("Typedef<int>", "Typedef<int>");
notEqual("Typedef<String>", "Typedef<num>");
notEqual("Typedef<num?>?", "Typedef<num>");
notEqual("Typedef<num?>?", "Typedef<num>", ignoreTopLevelNullability: true);
areEqual("Typedef<num?>?", "Typedef<num>", ignoreAllNullabilities: true);
notEqual("Typedef<Object?>?", "Typedef<dynamic>");
notEqual("Typedef<Object?>?", "Typedef<dynamic>",
ignoreTopLevelNullability: true);
notEqual("Typedef<Object?>?", "Typedef<dynamic>",
ignoreAllNullabilities: true);
notEqual("Typedef<Object?>?", "Typedef<dynamic>", equateTopTypes: true);
areEqual("Typedef<Object?>?", "Typedef<dynamic>",
equateTopTypes: true, ignoreTopLevelNullability: true);
}
areEqual(String type1, String type2,
@ -154,7 +169,8 @@ areEqual(String type1, String type2,
bool equateTopTypes = false,
bool ignoreAllNullabilities = false,
bool ignoreTopLevelNullability = false}) {
Env env = new Env('')..extendWithTypeParameters(typeParameters);
Env env = new Env("typedef Typedef<T> () -> T;\n")
..extendWithTypeParameters(typeParameters);
DartType t1 = env.parseType(type1);
DartType t2 = env.parseType(type2);
@ -192,7 +208,8 @@ notEqual(String type1, String type2,
bool equateTopTypes = false,
bool ignoreAllNullabilities = false,
bool ignoreTopLevelNullability = false}) {
Env env = new Env('')..extendWithTypeParameters(typeParameters);
Env env = new Env("typedef Typedef<T> () -> T;\n")
..extendWithTypeParameters(typeParameters);
DartType t1 = env.parseType(type1);
DartType t2 = env.parseType(type2);