mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 03:47:13 +00:00
[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:
parent
bbcdc8dcff
commit
af124aeb9b
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue