Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit a212650

Browse files
Dmitry Stefantsovcommit-bot@chromium.org
authored andcommitted
[cfe] Pass variance through in ReplacementVisitor
Change-Id: I8dc9c1a77c5dfe70ad186bbd6254aaf5353aa0ca Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/180900 Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Dmitry Stefantsov <[email protected]>
1 parent c3ec3e5 commit a212650

File tree

8 files changed

+231
-251
lines changed

8 files changed

+231
-251
lines changed

pkg/front_end/lib/src/fasta/type_inference/type_demotion.dart

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,16 @@ class _HasPromotedTypeVariableVisitor extends DartTypeVisitor<bool> {
6565
/// with legacy types.
6666
DartType demoteTypeInLibrary(DartType type, Library library) {
6767
if (library.isNonNullableByDefault) {
68-
return type.accept(const _DemotionNullabilityNormalization(
69-
demoteTypeVariables: true, forNonNullableByDefault: true)) ??
68+
return type.accept1(
69+
const _DemotionNullabilityNormalization(
70+
demoteTypeVariables: true, forNonNullableByDefault: true),
71+
Variance.covariant) ??
7072
type;
7173
} else {
72-
return type.accept(const _DemotionNullabilityNormalization(
73-
demoteTypeVariables: true, forNonNullableByDefault: false)) ??
74+
return type.accept1(
75+
const _DemotionNullabilityNormalization(
76+
demoteTypeVariables: true, forNonNullableByDefault: false),
77+
Variance.covariant) ??
7478
type;
7579
}
7680
}
@@ -85,8 +89,10 @@ DartType normalizeNullabilityInLibrary(DartType type, Library library) {
8589
if (library.isNonNullableByDefault) {
8690
return type;
8791
} else {
88-
return type.accept(const _DemotionNullabilityNormalization(
89-
demoteTypeVariables: false, forNonNullableByDefault: false)) ??
92+
return type.accept1(
93+
const _DemotionNullabilityNormalization(
94+
demoteTypeVariables: false, forNonNullableByDefault: false),
95+
Variance.covariant) ??
9096
type;
9197
}
9298
}
@@ -119,7 +125,7 @@ class _DemotionNullabilityNormalization extends ReplacementVisitor {
119125
}
120126

121127
@override
122-
DartType visitTypeParameterType(TypeParameterType node) {
128+
DartType visitTypeParameterType(TypeParameterType node, int variance) {
123129
Nullability newNullability = visitNullability(node);
124130
if (demoteTypeVariables && node.promotedBound != null) {
125131
return new TypeParameterType(

pkg/front_end/lib/src/fasta/type_inference/type_schema_elimination.dart

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,11 @@ class _TypeSchemaEliminationVisitor extends ReplacementVisitor {
5353
final DartType topType;
5454
final DartType bottomType;
5555

56-
bool isLeastClosure;
57-
58-
_TypeSchemaEliminationVisitor(
59-
this.isLeastClosure, this.topType, this.bottomType);
60-
61-
void changeVariance() {
62-
isLeastClosure = !isLeastClosure;
63-
}
56+
_TypeSchemaEliminationVisitor(this.topType, this.bottomType);
6457

6558
@override
66-
DartType defaultDartType(DartType node) {
59+
DartType defaultDartType(DartType node, int variance) {
60+
bool isLeastClosure = variance == Variance.covariant;
6761
if (node is UnknownType) {
6862
return isLeastClosure ? bottomType : topType;
6963
}
@@ -84,9 +78,9 @@ class _TypeSchemaEliminationVisitor extends ReplacementVisitor {
8478
assert(bottomType == const NeverType(Nullability.nonNullable) ||
8579
bottomType is NullType);
8680
_TypeSchemaEliminationVisitor visitor =
87-
new _TypeSchemaEliminationVisitor(isLeastClosure, topType, bottomType);
88-
DartType result = schema.accept(visitor);
89-
assert(visitor.isLeastClosure == isLeastClosure);
81+
new _TypeSchemaEliminationVisitor(topType, bottomType);
82+
DartType result = schema.accept1(
83+
visitor, isLeastClosure ? Variance.covariant : Variance.contravariant);
9084
return result ?? schema;
9185
}
9286
}

pkg/front_end/test/spell_checking_list_common.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -878,6 +878,7 @@ discards
878878
discover
879879
discovered
880880
discovery
881+
discrepancy
881882
disk
882883
dispatch
883884
dispatches
@@ -1604,6 +1605,7 @@ invariantly
16041605
inversion
16051606
invert
16061607
inverted
1608+
inverter
16071609
investigate
16081610
invisible
16091611
invocation

0 commit comments

Comments
 (0)