Skip to content

Commit 30e292a

Browse files
johnniwintherCommit Queue
authored andcommitted
[cfe] Use promoted type in NullAwareIfNullSet
The promoted access created in visitNullAwareIfNullSet didn't use the promoted type. The type checker hasn't been updated to support nullability, so this has gone unnoticed. Change-Id: Idf118e14e662f8558ad807174f447482de03286e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/443780 Reviewed-by: Jens Johansen <[email protected]>
1 parent 2503f98 commit 30e292a

File tree

49 files changed

+122
-119
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+122
-119
lines changed

pkg/front_end/lib/src/type_inference/inference_visitor.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8205,10 +8205,13 @@ class InferenceVisitorImpl extends InferenceVisitorBase
82058205
VariableDeclaration receiverVariable =
82068206
createVariable(receiver, receiverType);
82078207
createNullAwareGuard(receiverVariable);
8208-
Expression readReceiver = createVariableGet(receiverVariable);
8209-
Expression writeReceiver = createVariableGet(receiverVariable);
82108208
DartType nonNullReceiverType = receiverType.toNonNull();
82118209

8210+
Expression readReceiver =
8211+
createVariableGet(receiverVariable, promotedType: nonNullReceiverType);
8212+
Expression writeReceiver =
8213+
createVariableGet(receiverVariable, promotedType: nonNullReceiverType);
8214+
82128215
ExpressionInferenceResult readResult = _computePropertyGet(node.readOffset,
82138216
readReceiver, nonNullReceiverType, node.name, typeContext,
82148217
isThisReceiver: node.receiver is ThisExpression)

pkg/front_end/testcases/extensions/extension_setter.dart.strong.expect

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,11 +198,11 @@ static method test(self::Class c, self::Class? cn) → dynamic {
198198
c.{self::Class::nullableField} = null;
199199
self::expect(2, let final self::Class #t110 = c in let final core::int? #t111 = self::Extension|get#simpleNullableSetter(#t110) in #t111 == null ?{core::int} let final core::int #t112 = 2 in let final void #t113 = self::Extension|set#simpleNullableSetter(#t110, #t112) in #t112 : #t111{core::int});
200200
let final self::Class? #t114 = cn in #t114 == null ?{Null} null : #t114{self::Class}.{self::Class::nullableField} = null;
201-
let final self::Class? #t115 = cn in #t115 == null ?{core::int?} null : self::Extension|get#simpleNullableSetter(#t115) == null ?{core::int?} self::Extension|set#simpleNullableSetter(#t115, 1) : null;
201+
let final self::Class? #t115 = cn in #t115 == null ?{core::int?} null : self::Extension|get#simpleNullableSetter(#t115{self::Class}) == null ?{core::int?} self::Extension|set#simpleNullableSetter(#t115{self::Class}, 1) : null;
202202
self::expect(1, let final self::Class? #t116 = cn in #t116 == null ?{core::int?} null : #t116{self::Class}.{self::Class::nullableField}{core::int?});
203-
self::expect(1, let final self::Class? #t117 = cn in #t117 == null ?{core::int?} null : let final core::int? #t118 = self::Extension|get#simpleNullableSetter(#t117) in #t118 == null ?{core::int} let final core::int #t119 = 2 in let final void #t120 = self::Extension|set#simpleNullableSetter(#t117, #t119) in #t119 : #t118{core::int});
203+
self::expect(1, let final self::Class? #t117 = cn in #t117 == null ?{core::int?} null : let final core::int? #t118 = self::Extension|get#simpleNullableSetter(#t117{self::Class}) in #t118 == null ?{core::int} let final core::int #t119 = 2 in let final void #t120 = self::Extension|set#simpleNullableSetter(#t117{self::Class}, #t119) in #t119 : #t118{core::int});
204204
let final self::Class? #t121 = cn in #t121 == null ?{Null} null : #t121{self::Class}.{self::Class::nullableField} = null;
205-
self::expect(2, let final self::Class? #t122 = cn in #t122 == null ?{core::int?} null : let final core::int? #t123 = self::Extension|get#simpleNullableSetter(#t122) in #t123 == null ?{core::int} let final core::int #t124 = 2 in let final void #t125 = self::Extension|set#simpleNullableSetter(#t122, #t124) in #t124 : #t123{core::int});
205+
self::expect(2, let final self::Class? #t122 = cn in #t122 == null ?{core::int?} null : let final core::int? #t123 = self::Extension|get#simpleNullableSetter(#t122{self::Class}) in #t123 == null ?{core::int} let final core::int #t124 = 2 in let final void #t125 = self::Extension|set#simpleNullableSetter(#t122{self::Class}, #t124) in #t124 : #t123{core::int});
206206
self::Extension|testInternal(new self::Class::•(1.{core::int::unary-}(){() → core::int}));
207207
self::GenericClass<core::int> genericClass = new self::GenericClass::•<core::int>();
208208
self::expect(1, let final self::GenericClass<core::int> #t126 = genericClass in let final core::int #t127 = 1 in let final void #t128 = self::GenericExtension|set#setter<core::int>(#t126, #t127) in #t127);

pkg/front_end/testcases/extensions/extension_setter.dart.strong.modular.expect

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,11 +198,11 @@ static method test(self::Class c, self::Class? cn) → dynamic {
198198
c.{self::Class::nullableField} = null;
199199
self::expect(2, let final self::Class #t110 = c in let final core::int? #t111 = self::Extension|get#simpleNullableSetter(#t110) in #t111 == null ?{core::int} let final core::int #t112 = 2 in let final void #t113 = self::Extension|set#simpleNullableSetter(#t110, #t112) in #t112 : #t111{core::int});
200200
let final self::Class? #t114 = cn in #t114 == null ?{Null} null : #t114{self::Class}.{self::Class::nullableField} = null;
201-
let final self::Class? #t115 = cn in #t115 == null ?{core::int?} null : self::Extension|get#simpleNullableSetter(#t115) == null ?{core::int?} self::Extension|set#simpleNullableSetter(#t115, 1) : null;
201+
let final self::Class? #t115 = cn in #t115 == null ?{core::int?} null : self::Extension|get#simpleNullableSetter(#t115{self::Class}) == null ?{core::int?} self::Extension|set#simpleNullableSetter(#t115{self::Class}, 1) : null;
202202
self::expect(1, let final self::Class? #t116 = cn in #t116 == null ?{core::int?} null : #t116{self::Class}.{self::Class::nullableField}{core::int?});
203-
self::expect(1, let final self::Class? #t117 = cn in #t117 == null ?{core::int?} null : let final core::int? #t118 = self::Extension|get#simpleNullableSetter(#t117) in #t118 == null ?{core::int} let final core::int #t119 = 2 in let final void #t120 = self::Extension|set#simpleNullableSetter(#t117, #t119) in #t119 : #t118{core::int});
203+
self::expect(1, let final self::Class? #t117 = cn in #t117 == null ?{core::int?} null : let final core::int? #t118 = self::Extension|get#simpleNullableSetter(#t117{self::Class}) in #t118 == null ?{core::int} let final core::int #t119 = 2 in let final void #t120 = self::Extension|set#simpleNullableSetter(#t117{self::Class}, #t119) in #t119 : #t118{core::int});
204204
let final self::Class? #t121 = cn in #t121 == null ?{Null} null : #t121{self::Class}.{self::Class::nullableField} = null;
205-
self::expect(2, let final self::Class? #t122 = cn in #t122 == null ?{core::int?} null : let final core::int? #t123 = self::Extension|get#simpleNullableSetter(#t122) in #t123 == null ?{core::int} let final core::int #t124 = 2 in let final void #t125 = self::Extension|set#simpleNullableSetter(#t122, #t124) in #t124 : #t123{core::int});
205+
self::expect(2, let final self::Class? #t122 = cn in #t122 == null ?{core::int?} null : let final core::int? #t123 = self::Extension|get#simpleNullableSetter(#t122{self::Class}) in #t123 == null ?{core::int} let final core::int #t124 = 2 in let final void #t125 = self::Extension|set#simpleNullableSetter(#t122{self::Class}, #t124) in #t124 : #t123{core::int});
206206
self::Extension|testInternal(new self::Class::•(1.{core::int::unary-}(){() → core::int}));
207207
self::GenericClass<core::int> genericClass = new self::GenericClass::•<core::int>();
208208
self::expect(1, let final self::GenericClass<core::int> #t126 = genericClass in let final core::int #t127 = 1 in let final void #t128 = self::GenericExtension|set#setter<core::int>(#t126, #t127) in #t127);

pkg/front_end/testcases/extensions/extension_setter.dart.strong.transformed.expect

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,11 +198,11 @@ static method test(self::Class c, self::Class? cn) → dynamic {
198198
c.{self::Class::nullableField} = null;
199199
self::expect(2, let final self::Class #t110 = c in let final core::int? #t111 = self::Extension|get#simpleNullableSetter(#t110) in #t111 == null ?{core::int} let final core::int #t112 = 2 in let final void #t113 = self::Extension|set#simpleNullableSetter(#t110, #t112) in #t112 : #t111{core::int});
200200
let final self::Class? #t114 = cn in #t114 == null ?{Null} null : #t114{self::Class}.{self::Class::nullableField} = null;
201-
let final self::Class? #t115 = cn in #t115 == null ?{core::int?} null : self::Extension|get#simpleNullableSetter(#t115) == null ?{core::int?} self::Extension|set#simpleNullableSetter(#t115, 1) : null;
201+
let final self::Class? #t115 = cn in #t115 == null ?{core::int?} null : self::Extension|get#simpleNullableSetter(#t115{self::Class}) == null ?{core::int?} self::Extension|set#simpleNullableSetter(#t115{self::Class}, 1) : null;
202202
self::expect(1, let final self::Class? #t116 = cn in #t116 == null ?{core::int?} null : #t116{self::Class}.{self::Class::nullableField}{core::int?});
203-
self::expect(1, let final self::Class? #t117 = cn in #t117 == null ?{core::int?} null : let final core::int? #t118 = self::Extension|get#simpleNullableSetter(#t117) in #t118 == null ?{core::int} let final core::int #t119 = 2 in let final void #t120 = self::Extension|set#simpleNullableSetter(#t117, #t119) in #t119 : #t118{core::int});
203+
self::expect(1, let final self::Class? #t117 = cn in #t117 == null ?{core::int?} null : let final core::int? #t118 = self::Extension|get#simpleNullableSetter(#t117{self::Class}) in #t118 == null ?{core::int} let final core::int #t119 = 2 in let final void #t120 = self::Extension|set#simpleNullableSetter(#t117{self::Class}, #t119) in #t119 : #t118{core::int});
204204
let final self::Class? #t121 = cn in #t121 == null ?{Null} null : #t121{self::Class}.{self::Class::nullableField} = null;
205-
self::expect(2, let final self::Class? #t122 = cn in #t122 == null ?{core::int?} null : let final core::int? #t123 = self::Extension|get#simpleNullableSetter(#t122) in #t123 == null ?{core::int} let final core::int #t124 = 2 in let final void #t125 = self::Extension|set#simpleNullableSetter(#t122, #t124) in #t124 : #t123{core::int});
205+
self::expect(2, let final self::Class? #t122 = cn in #t122 == null ?{core::int?} null : let final core::int? #t123 = self::Extension|get#simpleNullableSetter(#t122{self::Class}) in #t123 == null ?{core::int} let final core::int #t124 = 2 in let final void #t125 = self::Extension|set#simpleNullableSetter(#t122{self::Class}, #t124) in #t124 : #t123{core::int});
206206
self::Extension|testInternal(new self::Class::•(1.{core::int::unary-}(){() → core::int}));
207207
self::GenericClass<core::int> genericClass = new self::GenericClass::•<core::int>();
208208
self::expect(1, let final self::GenericClass<core::int> #t126 = genericClass in let final core::int #t127 = 1 in let final void #t128 = self::GenericExtension|set#setter<core::int>(#t126, #t127) in #t127);

pkg/front_end/testcases/extensions/null_aware.dart.strong.expect

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@ static method test2(self::Class? c) → dynamic {
5454
self::expect(42, let final self::Class? #t26 = c in #t26 == null ?{core::int?} null : let final core::int #t27 = 42 in let final void #t28 = self::Extension|set#property(#t26{self::Class}, #t27) in #t27);
5555
let final self::Class? #t29 = c in #t29 == null ?{void} null : self::Extension|set#property(#t29{self::Class}, null);
5656
self::expect(null, let final self::Class? #t30 = c in #t30 == null ?{core::int?} null : self::Extension|get#property(#t30{self::Class}));
57-
self::expect(42, let final self::Class? #t31 = c in #t31 == null ?{core::int?} null : let final core::int? #t32 = self::Extension|get#property(#t31) in #t32 == null ?{core::int} let final core::int #t33 = 42 in let final void #t34 = self::Extension|set#property(#t31, #t33) in #t33 : #t32{core::int});
58-
self::expect(42, let final self::Class? #t35 = c in #t35 == null ?{core::int?} null : let final core::int? #t36 = self::Extension|get#property(#t35) in #t36 == null ?{core::int} let final core::int #t37 = 87 in let final void #t38 = self::Extension|set#property(#t35, #t37) in #t37 : #t36{core::int});
57+
self::expect(42, let final self::Class? #t31 = c in #t31 == null ?{core::int?} null : let final core::int? #t32 = self::Extension|get#property(#t31{self::Class}) in #t32 == null ?{core::int} let final core::int #t33 = 42 in let final void #t34 = self::Extension|set#property(#t31{self::Class}, #t33) in #t33 : #t32{core::int});
58+
self::expect(42, let final self::Class? #t35 = c in #t35 == null ?{core::int?} null : let final core::int? #t36 = self::Extension|get#property(#t35{self::Class}) in #t36 == null ?{core::int} let final core::int #t37 = 87 in let final void #t38 = self::Extension|set#property(#t35{self::Class}, #t37) in #t37 : #t36{core::int});
5959
self::expect(null, let final self::Class? #t39 = c in #t39 == null ?{Null} null : let final has-declared-initializer Null #t40 = null in let final void #t41 = self::Extension|set#property(#t39{self::Class}, #t40) in #t40);
60-
let final self::Class? #t42 = c in #t42 == null ?{core::int?} null : self::Extension|get#property(#t42) == null ?{core::int?} self::Extension|set#property(#t42, 42) : null;
60+
let final self::Class? #t42 = c in #t42 == null ?{core::int?} null : self::Extension|get#property(#t42{self::Class}) == null ?{core::int?} self::Extension|set#property(#t42{self::Class}, 42) : null;
6161
self::expect(42, let final self::Class? #t43 = c in #t43 == null ?{core::int?} null : self::Extension|get#property(#t43{self::Class}));
62-
let final self::Class? #t44 = c in #t44 == null ?{core::int?} null : self::Extension|get#property(#t44) == null ?{core::int?} self::Extension|set#property(#t44, 87) : null;
62+
let final self::Class? #t44 = c in #t44 == null ?{core::int?} null : self::Extension|get#property(#t44{self::Class}) == null ?{core::int?} self::Extension|set#property(#t44{self::Class}, 87) : null;
6363
self::expect(42, let final self::Class? #t45 = c in #t45 == null ?{core::int?} null : self::Extension|get#property(#t45{self::Class}));
6464
let final self::Class? #t46 = c in #t46 == null ?{void} null : self::Extension|set#property(#t46{self::Class}, null);
6565
self::expect(null, let final self::Class? #t47 = c in #t47 == null ?{core::int?} null : self::Extension|get#property(#t47{self::Class}));

pkg/front_end/testcases/extensions/null_aware.dart.strong.modular.expect

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@ static method test2(self::Class? c) → dynamic {
5454
self::expect(42, let final self::Class? #t26 = c in #t26 == null ?{core::int?} null : let final core::int #t27 = 42 in let final void #t28 = self::Extension|set#property(#t26{self::Class}, #t27) in #t27);
5555
let final self::Class? #t29 = c in #t29 == null ?{void} null : self::Extension|set#property(#t29{self::Class}, null);
5656
self::expect(null, let final self::Class? #t30 = c in #t30 == null ?{core::int?} null : self::Extension|get#property(#t30{self::Class}));
57-
self::expect(42, let final self::Class? #t31 = c in #t31 == null ?{core::int?} null : let final core::int? #t32 = self::Extension|get#property(#t31) in #t32 == null ?{core::int} let final core::int #t33 = 42 in let final void #t34 = self::Extension|set#property(#t31, #t33) in #t33 : #t32{core::int});
58-
self::expect(42, let final self::Class? #t35 = c in #t35 == null ?{core::int?} null : let final core::int? #t36 = self::Extension|get#property(#t35) in #t36 == null ?{core::int} let final core::int #t37 = 87 in let final void #t38 = self::Extension|set#property(#t35, #t37) in #t37 : #t36{core::int});
57+
self::expect(42, let final self::Class? #t31 = c in #t31 == null ?{core::int?} null : let final core::int? #t32 = self::Extension|get#property(#t31{self::Class}) in #t32 == null ?{core::int} let final core::int #t33 = 42 in let final void #t34 = self::Extension|set#property(#t31{self::Class}, #t33) in #t33 : #t32{core::int});
58+
self::expect(42, let final self::Class? #t35 = c in #t35 == null ?{core::int?} null : let final core::int? #t36 = self::Extension|get#property(#t35{self::Class}) in #t36 == null ?{core::int} let final core::int #t37 = 87 in let final void #t38 = self::Extension|set#property(#t35{self::Class}, #t37) in #t37 : #t36{core::int});
5959
self::expect(null, let final self::Class? #t39 = c in #t39 == null ?{Null} null : let final has-declared-initializer Null #t40 = null in let final void #t41 = self::Extension|set#property(#t39{self::Class}, #t40) in #t40);
60-
let final self::Class? #t42 = c in #t42 == null ?{core::int?} null : self::Extension|get#property(#t42) == null ?{core::int?} self::Extension|set#property(#t42, 42) : null;
60+
let final self::Class? #t42 = c in #t42 == null ?{core::int?} null : self::Extension|get#property(#t42{self::Class}) == null ?{core::int?} self::Extension|set#property(#t42{self::Class}, 42) : null;
6161
self::expect(42, let final self::Class? #t43 = c in #t43 == null ?{core::int?} null : self::Extension|get#property(#t43{self::Class}));
62-
let final self::Class? #t44 = c in #t44 == null ?{core::int?} null : self::Extension|get#property(#t44) == null ?{core::int?} self::Extension|set#property(#t44, 87) : null;
62+
let final self::Class? #t44 = c in #t44 == null ?{core::int?} null : self::Extension|get#property(#t44{self::Class}) == null ?{core::int?} self::Extension|set#property(#t44{self::Class}, 87) : null;
6363
self::expect(42, let final self::Class? #t45 = c in #t45 == null ?{core::int?} null : self::Extension|get#property(#t45{self::Class}));
6464
let final self::Class? #t46 = c in #t46 == null ?{void} null : self::Extension|set#property(#t46{self::Class}, null);
6565
self::expect(null, let final self::Class? #t47 = c in #t47 == null ?{core::int?} null : self::Extension|get#property(#t47{self::Class}));

pkg/front_end/testcases/extensions/null_aware.dart.strong.transformed.expect

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@ static method test2(self::Class? c) → dynamic {
5454
self::expect(42, let final self::Class? #t26 = c in #t26 == null ?{core::int?} null : let final core::int #t27 = 42 in let final void #t28 = self::Extension|set#property(#t26{self::Class}, #t27) in #t27);
5555
let final self::Class? #t29 = c in #t29 == null ?{void} null : self::Extension|set#property(#t29{self::Class}, null);
5656
self::expect(null, let final self::Class? #t30 = c in #t30 == null ?{core::int?} null : self::Extension|get#property(#t30{self::Class}));
57-
self::expect(42, let final self::Class? #t31 = c in #t31 == null ?{core::int?} null : let final core::int? #t32 = self::Extension|get#property(#t31) in #t32 == null ?{core::int} let final core::int #t33 = 42 in let final void #t34 = self::Extension|set#property(#t31, #t33) in #t33 : #t32{core::int});
58-
self::expect(42, let final self::Class? #t35 = c in #t35 == null ?{core::int?} null : let final core::int? #t36 = self::Extension|get#property(#t35) in #t36 == null ?{core::int} let final core::int #t37 = 87 in let final void #t38 = self::Extension|set#property(#t35, #t37) in #t37 : #t36{core::int});
57+
self::expect(42, let final self::Class? #t31 = c in #t31 == null ?{core::int?} null : let final core::int? #t32 = self::Extension|get#property(#t31{self::Class}) in #t32 == null ?{core::int} let final core::int #t33 = 42 in let final void #t34 = self::Extension|set#property(#t31{self::Class}, #t33) in #t33 : #t32{core::int});
58+
self::expect(42, let final self::Class? #t35 = c in #t35 == null ?{core::int?} null : let final core::int? #t36 = self::Extension|get#property(#t35{self::Class}) in #t36 == null ?{core::int} let final core::int #t37 = 87 in let final void #t38 = self::Extension|set#property(#t35{self::Class}, #t37) in #t37 : #t36{core::int});
5959
self::expect(null, let final self::Class? #t39 = c in #t39 == null ?{Null} null : let final has-declared-initializer Null #t40 = null in let final void #t41 = self::Extension|set#property(#t39{self::Class}, #t40) in #t40);
60-
let final self::Class? #t42 = c in #t42 == null ?{core::int?} null : self::Extension|get#property(#t42) == null ?{core::int?} self::Extension|set#property(#t42, 42) : null;
60+
let final self::Class? #t42 = c in #t42 == null ?{core::int?} null : self::Extension|get#property(#t42{self::Class}) == null ?{core::int?} self::Extension|set#property(#t42{self::Class}, 42) : null;
6161
self::expect(42, let final self::Class? #t43 = c in #t43 == null ?{core::int?} null : self::Extension|get#property(#t43{self::Class}));
62-
let final self::Class? #t44 = c in #t44 == null ?{core::int?} null : self::Extension|get#property(#t44) == null ?{core::int?} self::Extension|set#property(#t44, 87) : null;
62+
let final self::Class? #t44 = c in #t44 == null ?{core::int?} null : self::Extension|get#property(#t44{self::Class}) == null ?{core::int?} self::Extension|set#property(#t44{self::Class}, 87) : null;
6363
self::expect(42, let final self::Class? #t45 = c in #t45 == null ?{core::int?} null : self::Extension|get#property(#t45{self::Class}));
6464
let final self::Class? #t46 = c in #t46 == null ?{void} null : self::Extension|set#property(#t46{self::Class}, null);
6565
self::expect(null, let final self::Class? #t47 = c in #t47 == null ?{core::int?} null : self::Extension|get#property(#t47{self::Class}));

0 commit comments

Comments
 (0)