[cfe] Ensure nullable result type for ??= for effect

Closes #54069

Change-Id: I4caaad1b86f9ef68f1d36d7b2f9afc92364ce83c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/336662
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
Johnni Winther 2023-11-17 14:06:50 +00:00 committed by Commit Queue
parent c6f70abd3e
commit ced5b4e25d
74 changed files with 238 additions and 84 deletions

View file

@ -5234,7 +5234,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase
equalsNull,
writeResult.expression,
new NullLiteral()..fileOffset = node.fileOffset,
inferredType)
computeNullable(inferredType))
..fileOffset = node.fileOffset;
} else {
// Encode `a ??= b` as:

View file

@ -553,6 +553,7 @@ party
pause
paused
pays
pb
pc
periodic
periodically

View file

@ -0,0 +1,22 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:typed_data';
Future<Uint8List> getBinaryTestProto() => readFileWeb("test.binary.pb");
Future<Uint8List> readFileWeb(String path) async {
throw '';
}
void runBench([Uint8List? data]) async {
data ??= await getBinaryTestProto();
print(data);
}
void main() async {
Uint8List data = await getBinaryTestProto();
print("File successfully read, contents: $data");
runBench(data);
}

View file

@ -0,0 +1,26 @@
library;
import self as self;
import "dart:async" as asy;
import "dart:typed_data" as typ;
import "dart:core" as core;
import "dart:typed_data";
static method getBinaryTestProto() → asy::Future<typ::Uint8List>
return self::readFileWeb("test.binary.pb");
static method readFileWeb(core::String path) → asy::Future<typ::Uint8List> async /* futureValueType= typ::Uint8List */ {
throw "";
}
static method runBench([typ::Uint8List? data = #C1]) → void async /* futureValueType= void */ {
data == null ?{typ::Uint8List?} data = await self::getBinaryTestProto() : null;
core::print(data{typ::Uint8List});
}
static method main() → void async /* futureValueType= void */ {
typ::Uint8List data = await self::getBinaryTestProto();
core::print("File successfully read, contents: ${data}");
self::runBench(data);
}
constants {
#C1 = null
}

View file

@ -0,0 +1,37 @@
library;
import self as self;
import "dart:async" as asy;
import "dart:typed_data" as typ;
import "dart:core" as core;
import "dart:typed_data";
static method getBinaryTestProto() → asy::Future<typ::Uint8List>
return self::readFileWeb("test.binary.pb");
static method readFileWeb(core::String path) → asy::Future<typ::Uint8List> async /* futureValueType= typ::Uint8List */ {
throw "";
}
static method runBench([typ::Uint8List? data = #C1]) → void async /* futureValueType= void */ {
typ::Uint8List :async_temporary_0;
typ::Uint8List? :async_temporary_1;
if(data == null) {
:async_temporary_0 = await self::getBinaryTestProto();
:async_temporary_1 = data = :async_temporary_0 as{ForLegacy} dynamic;
}
else {
:async_temporary_1 = null;
}
:async_temporary_1 as{ForLegacy} dynamic;
core::print(data{typ::Uint8List});
}
static method main() → void async /* futureValueType= void */ {
typ::Uint8List :async_temporary_0;
:async_temporary_0 = await self::getBinaryTestProto();
typ::Uint8List data = :async_temporary_0 as{ForLegacy} dynamic;
core::print("File successfully read, contents: ${data}");
self::runBench(data);
}
constants {
#C1 = null
}

View file

@ -0,0 +1,6 @@
import 'dart:typed_data';
Future<Uint8List> getBinaryTestProto() => readFileWeb("test.binary.pb");
Future<Uint8List> readFileWeb(String path) async {}
void runBench([Uint8List? data]) async {}
void main() async {}

View file

@ -0,0 +1,6 @@
import 'dart:typed_data';
Future<Uint8List> getBinaryTestProto() => readFileWeb("test.binary.pb");
Future<Uint8List> readFileWeb(String path) async {}
void main() async {}
void runBench([Uint8List? data]) async {}

View file

@ -67,9 +67,9 @@ static method test2(self::Class? c) → dynamic {
self::expect(42, let final self::Class? #t52 = c in #t52 == null ?{core::int?} null : let final core::int? #t53 = self::Extension|get#property(#t52{self::Class}) in #t53 == null ?{core::int} let final core::int #t54 = 87 in let final void #t55 = self::Extension|set#property(#t52{self::Class}, #t54) in #t54 : #t53{core::int});
let final self::Class? #t56 = c in #t56 == null ?{void} null : self::Extension|set#property(#t56{self::Class}, null);
self::expect(null, let final self::Class? #t57 = c in #t57 == null ?{core::int?} null : self::Extension|get#property(#t57{self::Class}));
let final self::Class? #t58 = c in #t58 == null ?{core::int?} null : self::Extension|get#property(#t58{self::Class}) == null ?{core::int} self::Extension|set#property(#t58{self::Class}, 42) : null;
let final self::Class? #t58 = c in #t58 == null ?{core::int?} null : self::Extension|get#property(#t58{self::Class}) == null ?{core::int?} self::Extension|set#property(#t58{self::Class}, 42) : null;
self::expect(42, let final self::Class? #t59 = c in #t59 == null ?{core::int?} null : self::Extension|get#property(#t59{self::Class}));
let final self::Class? #t60 = c in #t60 == null ?{core::int?} null : self::Extension|get#property(#t60{self::Class}) == null ?{core::int} self::Extension|set#property(#t60{self::Class}, 87) : null;
let final self::Class? #t60 = c in #t60 == null ?{core::int?} null : self::Extension|get#property(#t60{self::Class}) == null ?{core::int?} self::Extension|set#property(#t60{self::Class}, 87) : null;
self::expect(42, let final self::Class? #t61 = c in #t61 == null ?{core::int?} null : self::Extension|get#property(#t61{self::Class}));
let final self::Class? #t62 = c in #t62 == null ?{void} null : self::Extension|set#property(#t62{self::Class}, null);
let final self::Class? #t63 = c in #t63 == null ?{dynamic} null : self::Extension|testImplicitThis(#t63{self::Class});

View file

@ -67,9 +67,9 @@ static method test2(self::Class? c) → dynamic {
self::expect(42, let final self::Class? #t52 = c in #t52 == null ?{core::int?} null : let final core::int? #t53 = self::Extension|get#property(#t52{self::Class}) in #t53 == null ?{core::int} let final core::int #t54 = 87 in let final void #t55 = self::Extension|set#property(#t52{self::Class}, #t54) in #t54 : #t53{core::int});
let final self::Class? #t56 = c in #t56 == null ?{void} null : self::Extension|set#property(#t56{self::Class}, null);
self::expect(null, let final self::Class? #t57 = c in #t57 == null ?{core::int?} null : self::Extension|get#property(#t57{self::Class}));
let final self::Class? #t58 = c in #t58 == null ?{core::int?} null : self::Extension|get#property(#t58{self::Class}) == null ?{core::int} self::Extension|set#property(#t58{self::Class}, 42) : null;
let final self::Class? #t58 = c in #t58 == null ?{core::int?} null : self::Extension|get#property(#t58{self::Class}) == null ?{core::int?} self::Extension|set#property(#t58{self::Class}, 42) : null;
self::expect(42, let final self::Class? #t59 = c in #t59 == null ?{core::int?} null : self::Extension|get#property(#t59{self::Class}));
let final self::Class? #t60 = c in #t60 == null ?{core::int?} null : self::Extension|get#property(#t60{self::Class}) == null ?{core::int} self::Extension|set#property(#t60{self::Class}, 87) : null;
let final self::Class? #t60 = c in #t60 == null ?{core::int?} null : self::Extension|get#property(#t60{self::Class}) == null ?{core::int?} self::Extension|set#property(#t60{self::Class}, 87) : null;
self::expect(42, let final self::Class? #t61 = c in #t61 == null ?{core::int?} null : self::Extension|get#property(#t61{self::Class}));
let final self::Class? #t62 = c in #t62 == null ?{void} null : self::Extension|set#property(#t62{self::Class}, null);
let final self::Class? #t63 = c in #t63 == null ?{dynamic} null : self::Extension|testImplicitThis(#t63{self::Class});

View file

@ -67,9 +67,9 @@ static method test2(self::Class? c) → dynamic {
self::expect(42, let final self::Class? #t52 = c in #t52 == null ?{core::int?} null : let final core::int? #t53 = self::Extension|get#property(#t52{self::Class}) in #t53 == null ?{core::int} let final core::int #t54 = 87 in let final void #t55 = self::Extension|set#property(#t52{self::Class}, #t54) in #t54 : #t53{core::int});
let final self::Class? #t56 = c in #t56 == null ?{void} null : self::Extension|set#property(#t56{self::Class}, null);
self::expect(null, let final self::Class? #t57 = c in #t57 == null ?{core::int?} null : self::Extension|get#property(#t57{self::Class}));
let final self::Class? #t58 = c in #t58 == null ?{core::int?} null : self::Extension|get#property(#t58{self::Class}) == null ?{core::int} self::Extension|set#property(#t58{self::Class}, 42) : null;
let final self::Class? #t58 = c in #t58 == null ?{core::int?} null : self::Extension|get#property(#t58{self::Class}) == null ?{core::int?} self::Extension|set#property(#t58{self::Class}, 42) : null;
self::expect(42, let final self::Class? #t59 = c in #t59 == null ?{core::int?} null : self::Extension|get#property(#t59{self::Class}));
let final self::Class? #t60 = c in #t60 == null ?{core::int?} null : self::Extension|get#property(#t60{self::Class}) == null ?{core::int} self::Extension|set#property(#t60{self::Class}, 87) : null;
let final self::Class? #t60 = c in #t60 == null ?{core::int?} null : self::Extension|get#property(#t60{self::Class}) == null ?{core::int?} self::Extension|set#property(#t60{self::Class}, 87) : null;
self::expect(42, let final self::Class? #t61 = c in #t61 == null ?{core::int?} null : self::Extension|get#property(#t61{self::Class}));
let final self::Class? #t62 = c in #t62 == null ?{void} null : self::Extension|set#property(#t62{self::Class}, null);
let final self::Class? #t63 = c in #t63 == null ?{dynamic} null : self::Extension|testImplicitThis(#t63{self::Class});

View file

@ -67,9 +67,9 @@ static method test2(self::Class? c) → dynamic {
self::expect(42, let final self::Class? #t52 = c in #t52 == null ?{core::int?} null : let final core::int? #t53 = self::Extension|get#property(#t52{self::Class}) in #t53 == null ?{core::int} let final core::int #t54 = 87 in let final void #t55 = self::Extension|set#property(#t52{self::Class}, #t54) in #t54 : #t53{core::int});
let final self::Class? #t56 = c in #t56 == null ?{void} null : self::Extension|set#property(#t56{self::Class}, null);
self::expect(null, let final self::Class? #t57 = c in #t57 == null ?{core::int?} null : self::Extension|get#property(#t57{self::Class}));
let final self::Class? #t58 = c in #t58 == null ?{core::int?} null : self::Extension|get#property(#t58{self::Class}) == null ?{core::int} self::Extension|set#property(#t58{self::Class}, 42) : null;
let final self::Class? #t58 = c in #t58 == null ?{core::int?} null : self::Extension|get#property(#t58{self::Class}) == null ?{core::int?} self::Extension|set#property(#t58{self::Class}, 42) : null;
self::expect(42, let final self::Class? #t59 = c in #t59 == null ?{core::int?} null : self::Extension|get#property(#t59{self::Class}));
let final self::Class? #t60 = c in #t60 == null ?{core::int?} null : self::Extension|get#property(#t60{self::Class}) == null ?{core::int} self::Extension|set#property(#t60{self::Class}, 87) : null;
let final self::Class? #t60 = c in #t60 == null ?{core::int?} null : self::Extension|get#property(#t60{self::Class}) == null ?{core::int?} self::Extension|set#property(#t60{self::Class}, 87) : null;
self::expect(42, let final self::Class? #t61 = c in #t61 == null ?{core::int?} null : self::Extension|get#property(#t61{self::Class}));
let final self::Class? #t62 = c in #t62 == null ?{void} null : self::Extension|set#property(#t62{self::Class}, null);
let final self::Class? #t63 = c in #t63 == null ?{dynamic} null : self::Extension|testImplicitThis(#t63{self::Class});

View file

@ -67,9 +67,9 @@ static method test2(self::Class? c) → dynamic {
self::expect(42, let final self::Class? #t52 = c in #t52 == null ?{core::int?} null : let final core::int? #t53 = self::Extension|get#property(#t52{self::Class}) in #t53 == null ?{core::int} let final core::int #t54 = 87 in let final void #t55 = self::Extension|set#property(#t52{self::Class}, #t54) in #t54 : #t53{core::int});
let final self::Class? #t56 = c in #t56 == null ?{void} null : self::Extension|set#property(#t56{self::Class}, null);
self::expect(null, let final self::Class? #t57 = c in #t57 == null ?{core::int?} null : self::Extension|get#property(#t57{self::Class}));
let final self::Class? #t58 = c in #t58 == null ?{core::int?} null : self::Extension|get#property(#t58{self::Class}) == null ?{core::int} self::Extension|set#property(#t58{self::Class}, 42) : null;
let final self::Class? #t58 = c in #t58 == null ?{core::int?} null : self::Extension|get#property(#t58{self::Class}) == null ?{core::int?} self::Extension|set#property(#t58{self::Class}, 42) : null;
self::expect(42, let final self::Class? #t59 = c in #t59 == null ?{core::int?} null : self::Extension|get#property(#t59{self::Class}));
let final self::Class? #t60 = c in #t60 == null ?{core::int?} null : self::Extension|get#property(#t60{self::Class}) == null ?{core::int} self::Extension|set#property(#t60{self::Class}, 87) : null;
let final self::Class? #t60 = c in #t60 == null ?{core::int?} null : self::Extension|get#property(#t60{self::Class}) == null ?{core::int?} self::Extension|set#property(#t60{self::Class}, 87) : null;
self::expect(42, let final self::Class? #t61 = c in #t61 == null ?{core::int?} null : self::Extension|get#property(#t61{self::Class}));
let final self::Class? #t62 = c in #t62 == null ?{void} null : self::Extension|set#property(#t62{self::Class}, null);
let final self::Class? #t63 = c in #t63 == null ?{dynamic} null : self::Extension|testImplicitThis(#t63{self::Class});

View file

@ -0,0 +1,8 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
method(int? a, int? b) {
int j = a ??= 0;
b ??= 0;
}

View file

@ -0,0 +1,8 @@
library;
import self as self;
import "dart:core" as core;
static method method(core::int? a, core::int? b) → dynamic {
core::int j = let final core::int? #t1 = a in #t1 == null ?{core::int} a = 0 : #t1{core::int};
b == null ?{core::int?} b = 0 : null;
}

View file

@ -0,0 +1,8 @@
library;
import self as self;
import "dart:core" as core;
static method method(core::int? a, core::int? b) → dynamic {
core::int j = let final core::int? #t1 = a in #t1 == null ?{core::int} a = 0 : #t1{core::int};
b == null ?{core::int?} b = 0 : null;
}

View file

@ -0,0 +1 @@
method(int? a, int? b) {}

View file

@ -0,0 +1 @@
method(int? a, int? b) {}

View file

@ -0,0 +1,8 @@
library;
import self as self;
import "dart:core" as core;
static method method(core::int? a, core::int? b) → dynamic {
core::int j = let final core::int? #t1 = a in #t1 == null ?{core::int} a = 0 : #t1{core::int};
b == null ?{core::int?} b = 0 : null;
}

View file

@ -0,0 +1,8 @@
library;
import self as self;
import "dart:core" as core;
static method method(core::int? a, core::int? b) → dynamic {
core::int j = let final core::int? #t1 = a in #t1 == null ?{core::int} a = 0 : #t1{core::int};
b == null ?{core::int?} b = 0 : null;
}

View file

@ -0,0 +1,6 @@
library;
import self as self;
import "dart:core" as core;
static method method(core::int? a, core::int? b) → dynamic
;

View file

@ -0,0 +1,8 @@
library;
import self as self;
import "dart:core" as core;
static method method(core::int? a, core::int? b) → dynamic {
core::int j = let final core::int? #t1 = a in #t1 == null ?{core::int} a = 0 : #t1{core::int};
b == null ?{core::int?} b = 0 : null;
}

View file

@ -31,9 +31,9 @@ static method test(core::int? i, core::String s, self::A a) → dynamic {
i = s;
^" in s as{TypeError} core::int?;
i = null;
i == null ?{core::int} i = 1 : null;
i == null ?{core::int?} i = 1 : null;
i = null;
i == null ?{core::Object} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:9: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
i == null ?{core::Object?} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:9: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
i ??= s;
^" in s as{TypeError} core::int? : null;
a = new self::A::•();

View file

@ -31,9 +31,9 @@ static method test(core::int? i, core::String s, self::A a) → dynamic {
i = s;
^" in s as{TypeError} core::int?;
i = null;
i == null ?{core::int} i = 1 : null;
i == null ?{core::int?} i = 1 : null;
i = null;
i == null ?{core::Object} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:9: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
i == null ?{core::Object?} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:9: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
i ??= s;
^" in s as{TypeError} core::int? : null;
a = new self::A::•();

View file

@ -31,9 +31,9 @@ static method test(core::int? i, core::String s, self::A a) → dynamic {
i = s;
^" in s as{TypeError} core::int?;
i = null;
i == null ?{core::int} i = 1 : null;
i == null ?{core::int?} i = 1 : null;
i = null;
i == null ?{core::Object} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:9: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
i == null ?{core::Object?} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:9: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
i ??= s;
^" in s as{TypeError} core::int? : null;
a = new self::A::•();

View file

@ -31,9 +31,9 @@ static method test(core::int? i, core::String s, self::A a) → dynamic {
i = s;
^" in s as{TypeError} core::int?;
i = null;
i == null ?{core::int} i = 1 : null;
i == null ?{core::int?} i = 1 : null;
i = null;
i == null ?{core::Object} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:9: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
i == null ?{core::Object?} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:9: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
i ??= s;
^" in s as{TypeError} core::int? : null;
a = new self::A::•();

View file

@ -31,9 +31,9 @@ static method test(core::int? i, core::String s, self::A a) → dynamic {
i = s;
^" in s as{TypeError} core::int?;
i = null;
i == null ?{core::int} i = 1 : null;
i == null ?{core::int?} i = 1 : null;
i = null;
i == null ?{core::Object} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:9: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
i == null ?{core::Object?} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:9: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
i ??= s;
^" in s as{TypeError} core::int? : null;
a = new self::A::•();

View file

@ -65,9 +65,9 @@ static method test() → dynamic {
let final self::Foo #t1 = foo in #t1 == null ?{core::int?} null : #t1.{self::Foo::field} = 5;
self::Foo::staticField = 5;
let final self::Foo #t2 = foo in #t2.{self::Foo::field}{core::int} == null ?{core::int} #t2.{self::Foo::field} = 5 : null;
self::Foo::staticField == null ?{core::int} self::Foo::staticField = 5 : null;
self::Foo::staticField == null ?{core::int?} self::Foo::staticField = 5 : null;
let final self::Foo #t3 = foo in #t3 == null ?{core::int?} null : #t3.{self::Foo::field}{core::int} == null ?{core::int} #t3.{self::Foo::field} = 5 : null;
self::Foo::staticField == null ?{core::int} self::Foo::staticField = 5 : null;
self::Foo::staticField == null ?{core::int?} self::Foo::staticField = 5 : null;
core::int intValue = let final core::int #t4 = foo.{self::Foo::field}{core::int} in #t4 == null ?{core::int} 6 : #t4;
core::num numValue = let final core::int #t5 = foo.{self::Foo::field}{core::int} in #t5 == null ?{core::num} 4.5 : #t5;
}

View file

@ -65,9 +65,9 @@ static method test() → dynamic {
let final self::Foo #t1 = foo in #t1 == null ?{core::int?} null : #t1.{self::Foo::field} = 5;
self::Foo::staticField = 5;
let final self::Foo #t2 = foo in #t2.{self::Foo::field}{core::int} == null ?{core::int} #t2.{self::Foo::field} = 5 : null;
self::Foo::staticField == null ?{core::int} self::Foo::staticField = 5 : null;
self::Foo::staticField == null ?{core::int?} self::Foo::staticField = 5 : null;
let final self::Foo #t3 = foo in #t3 == null ?{core::int?} null : #t3.{self::Foo::field}{core::int} == null ?{core::int} #t3.{self::Foo::field} = 5 : null;
self::Foo::staticField == null ?{core::int} self::Foo::staticField = 5 : null;
self::Foo::staticField == null ?{core::int?} self::Foo::staticField = 5 : null;
core::int intValue = let final core::int #t4 = foo.{self::Foo::field}{core::int} in #t4 == null ?{core::int} 6 : #t4;
core::num numValue = let final core::int #t5 = foo.{self::Foo::field}{core::int} in #t5 == null ?{core::num} 4.5 : #t5;
}

View file

@ -65,9 +65,9 @@ static method test() → dynamic {
let final self::Foo #t1 = foo in #t1 == null ?{core::int?} null : #t1.{self::Foo::field} = 5;
self::Foo::staticField = 5;
let final self::Foo #t2 = foo in #t2.{self::Foo::field}{core::int} == null ?{core::int} #t2.{self::Foo::field} = 5 : null;
self::Foo::staticField == null ?{core::int} self::Foo::staticField = 5 : null;
self::Foo::staticField == null ?{core::int?} self::Foo::staticField = 5 : null;
let final self::Foo #t3 = foo in #t3 == null ?{core::int?} null : #t3.{self::Foo::field}{core::int} == null ?{core::int} #t3.{self::Foo::field} = 5 : null;
self::Foo::staticField == null ?{core::int} self::Foo::staticField = 5 : null;
self::Foo::staticField == null ?{core::int?} self::Foo::staticField = 5 : null;
core::int intValue = let final core::int #t4 = foo.{self::Foo::field}{core::int} in #t4 == null ?{core::int} 6 : #t4;
core::num numValue = let final core::int #t5 = foo.{self::Foo::field}{core::int} in #t5 == null ?{core::num} 4.5 : #t5;
}

View file

@ -65,9 +65,9 @@ static method test() → dynamic {
let final self::Foo #t1 = foo in #t1 == null ?{core::int?} null : #t1.{self::Foo::field} = 5;
self::Foo::staticField = 5;
let final self::Foo #t2 = foo in #t2.{self::Foo::field}{core::int} == null ?{core::int} #t2.{self::Foo::field} = 5 : null;
self::Foo::staticField == null ?{core::int} self::Foo::staticField = 5 : null;
self::Foo::staticField == null ?{core::int?} self::Foo::staticField = 5 : null;
let final self::Foo #t3 = foo in #t3 == null ?{core::int?} null : #t3.{self::Foo::field}{core::int} == null ?{core::int} #t3.{self::Foo::field} = 5 : null;
self::Foo::staticField == null ?{core::int} self::Foo::staticField = 5 : null;
self::Foo::staticField == null ?{core::int?} self::Foo::staticField = 5 : null;
core::int intValue = let final core::int #t4 = foo.{self::Foo::field}{core::int} in #t4 == null ?{core::int} 6 : #t4;
core::num numValue = let final core::int #t5 = foo.{self::Foo::field}{core::int} in #t5 == null ?{core::num} 4.5 : #t5;
}

View file

@ -65,9 +65,9 @@ static method test() → dynamic {
let final self::Foo #t1 = foo in #t1 == null ?{core::int?} null : #t1.{self::Foo::field} = 5;
self::Foo::staticField = 5;
let final self::Foo #t2 = foo in #t2.{self::Foo::field}{core::int} == null ?{core::int} #t2.{self::Foo::field} = 5 : null;
self::Foo::staticField == null ?{core::int} self::Foo::staticField = 5 : null;
self::Foo::staticField == null ?{core::int?} self::Foo::staticField = 5 : null;
let final self::Foo #t3 = foo in #t3 == null ?{core::int?} null : #t3.{self::Foo::field}{core::int} == null ?{core::int} #t3.{self::Foo::field} = 5 : null;
self::Foo::staticField == null ?{core::int} self::Foo::staticField = 5 : null;
self::Foo::staticField == null ?{core::int?} self::Foo::staticField = 5 : null;
core::int intValue = let final core::int #t4 = foo.{self::Foo::field}{core::int} in #t4 == null ?{core::int} 6 : #t4;
core::num numValue = let final core::int #t5 = foo.{self::Foo::field}{core::int} in #t5 == null ?{core::num} 4.5 : #t5;
}

View file

@ -283,7 +283,7 @@ library from "org-dartlang-test:///main.dart" as main {
dart._internal::Sort::sort<dart.core::int>(this, let final (dart.core::int, dart.core::int) →? dart.core::int #t4 = compare in #t4 == null ?{(dart.core::int, dart.core::int) → dart.core::int} #C6 : #t4{(dart.core::int, dart.core::int) → dart.core::int});
}
method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([dart.math::Random? random = #C2]) → void {
random == null ?{dart.math::Random} random = dart.math::Random::•() : null;
random == null ?{dart.math::Random?} random = dart.math::Random::•() : null;
dart.core::int length = this.{dart.core::List::length}{dart.core::int};
while (length.{dart.core::num::>}(1){(dart.core::num) → dart.core::bool}) {
dart.core::int pos = random{dart.math::Random}.{dart.math::Random::nextInt}(length){(dart.core::int) → dart.core::int};
@ -303,7 +303,7 @@ library from "org-dartlang-test:///main.dart" as main {
} =>#t5;
method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(dart.core::int start, [dart.core::int? end = #C2]) → dart.core::List<dart.core::int> {
dart.core::int listLength = this.{dart.core::List::length}{dart.core::int};
end == null ?{dart.core::int} end = listLength : null;
end == null ?{dart.core::int?} end = listLength : null;
dart.core::RangeError::checkValidRange(start, end{dart.core::int}, listLength);
return dart.core::List::from<dart.core::int>(this.{dart.collection::ListBase::getRange}(start, end{dart.core::int}){(dart.core::int, dart.core::int) → dart.core::Iterable<dart.core::int>});
}

View file

@ -283,7 +283,7 @@ library from "org-dartlang-test:///main.dart" as main {
dart._internal::Sort::sort<dart.core::int>(this, let final (dart.core::int, dart.core::int) →? dart.core::int #t4 = compare in #t4 == null ?{(dart.core::int, dart.core::int) → dart.core::int} #C6 : #t4{(dart.core::int, dart.core::int) → dart.core::int});
}
method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([dart.math::Random? random = #C2]) → void {
random == null ?{dart.math::Random} random = dart.math::Random::•() : null;
random == null ?{dart.math::Random?} random = dart.math::Random::•() : null;
dart.core::int length = this.{dart.core::List::length}{dart.core::int};
while (length.{dart.core::num::>}(1){(dart.core::num) → dart.core::bool}) {
dart.core::int pos = random{dart.math::Random}.{dart.math::Random::nextInt}(length){(dart.core::int) → dart.core::int};
@ -303,7 +303,7 @@ library from "org-dartlang-test:///main.dart" as main {
} =>#t5;
method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(dart.core::int start, [dart.core::int? end = #C2]) → dart.core::List<dart.core::int> {
dart.core::int listLength = this.{dart.core::List::length}{dart.core::int};
end == null ?{dart.core::int} end = listLength : null;
end == null ?{dart.core::int?} end = listLength : null;
dart.core::RangeError::checkValidRange(start, end{dart.core::int}, listLength);
return dart.core::List::from<dart.core::int>(this.{dart.collection::ListBase::getRange}(start, end{dart.core::int}){(dart.core::int, dart.core::int) → dart.core::Iterable<dart.core::int>});
}

View file

@ -91,7 +91,7 @@ static method main() → void {
self::C::property.{core::List::[]}(0){(core::int) → core::int};
self::C::property.{core::List::[]=}(0, 0){(core::int, core::int) → void};
let final core::Map<core::int, core::int?> #t1 = self::C::property2 in let final core::int #t2 = 0 in #t1.{core::Map::[]}(#t2){(core::Object?) → core::int?} == null ?{core::int} #t1.{core::Map::[]=}(#t2, 0){(core::int, core::int?) → void} : null;
self::C::staticMember2 == null ?{core::int} self::C::staticMember2 = 42 : null;
self::C::staticMember2 == null ?{core::int?} self::C::staticMember2 = 42 : null;
self::C::staticMember = self::C::staticMember.{core::num::+}(2){(core::num) → core::int};
self::C::staticMember = self::C::staticMember.{core::num::+}(1){(core::num) → core::int};
self::C::staticMember = self::C::staticMember.{core::num::-}(1){(core::num) → core::int};

View file

@ -91,7 +91,7 @@ static method main() → void {
self::C::property.{core::List::[]}(0){(core::int) → core::int};
self::C::property.{core::List::[]=}(0, 0){(core::int, core::int) → void};
let final core::Map<core::int, core::int?> #t1 = self::C::property2 in let final core::int #t2 = 0 in #t1.{core::Map::[]}(#t2){(core::Object?) → core::int?} == null ?{core::int} #t1.{core::Map::[]=}(#t2, 0){(core::int, core::int?) → void} : null;
self::C::staticMember2 == null ?{core::int} self::C::staticMember2 = 42 : null;
self::C::staticMember2 == null ?{core::int?} self::C::staticMember2 = 42 : null;
self::C::staticMember = self::C::staticMember.{core::num::+}(2){(core::num) → core::int};
self::C::staticMember = self::C::staticMember.{core::num::+}(1){(core::num) → core::int};
self::C::staticMember = self::C::staticMember.{core::num::-}(1){(core::num) → core::int};

View file

@ -91,7 +91,7 @@ static method main() → void {
self::C::property.{core::List::[]}(0){(core::int) → core::int};
self::C::property.{core::List::[]=}(0, 0){(core::int, core::int) → void};
let final core::Map<core::int, core::int?> #t1 = self::C::property2 in let final core::int #t2 = 0 in #t1.{core::Map::[]}(#t2){(core::Object?) → core::int?} == null ?{core::int} #t1.{core::Map::[]=}(#t2, 0){(core::int, core::int?) → void} : null;
self::C::staticMember2 == null ?{core::int} self::C::staticMember2 = 42 : null;
self::C::staticMember2 == null ?{core::int?} self::C::staticMember2 = 42 : null;
self::C::staticMember = self::C::staticMember.{core::num::+}(2){(core::num) → core::int};
self::C::staticMember = self::C::staticMember.{core::num::+}(1){(core::num) → core::int};
self::C::staticMember = self::C::staticMember.{core::num::-}(1){(core::num) → core::int};

View file

@ -91,7 +91,7 @@ static method main() → void {
self::C::property.{core::List::[]}(0){(core::int) → core::int};
self::C::property.{core::List::[]=}(0, 0){(core::int, core::int) → void};
let final core::Map<core::int, core::int?> #t1 = self::C::property2 in let final core::int #t2 = 0 in #t1.{core::Map::[]}(#t2){(core::Object?) → core::int?} == null ?{core::int} #t1.{core::Map::[]=}(#t2, 0){(core::int, core::int?) → void} : null;
self::C::staticMember2 == null ?{core::int} self::C::staticMember2 = 42 : null;
self::C::staticMember2 == null ?{core::int?} self::C::staticMember2 = 42 : null;
self::C::staticMember = self::C::staticMember.{core::num::+}(2){(core::num) → core::int};
self::C::staticMember = self::C::staticMember.{core::num::+}(1){(core::num) → core::int};
self::C::staticMember = self::C::staticMember.{core::num::-}(1){(core::num) → core::int};

View file

@ -91,7 +91,7 @@ static method main() → void {
self::C::property.{core::List::[]}(0){(core::int) → core::int};
self::C::property.{core::List::[]=}(0, 0){(core::int, core::int) → void};
let final core::Map<core::int, core::int?> #t1 = self::C::property2 in let final core::int #t2 = 0 in #t1.{core::Map::[]}(#t2){(core::Object?) → core::int?} == null ?{core::int} #t1.{core::Map::[]=}(#t2, 0){(core::int, core::int?) → void} : null;
self::C::staticMember2 == null ?{core::int} self::C::staticMember2 = 42 : null;
self::C::staticMember2 == null ?{core::int?} self::C::staticMember2 = 42 : null;
self::C::staticMember = self::C::staticMember.{core::num::+}(2){(core::num) → core::int};
self::C::staticMember = self::C::staticMember.{core::num::+}(1){(core::num) → core::int};
self::C::staticMember = self::C::staticMember.{core::num::-}(1){(core::num) → core::int};

View file

@ -135,7 +135,7 @@ class C extends core::Object {
this.{self::C::property}{self::C}.{self::C::[]}(0){(core::int) → core::int?};
this.{self::C::property}{self::C}.{self::C::[]=}(0, 0){(core::int, core::int) → void};
let final self::C #t2 = this.{self::C::property}{self::C} in let final core::int #t3 = 0 in #t2.{self::C::[]}(#t3){(core::int) → core::int?} == null ?{core::int} #t2.{self::C::[]=}(#t3, 0){(core::int, core::int) → void} : null;
this.{self::C::m1}{core::int?} == null ?{core::int} this.{self::C::m1} = 42 : null;
this.{self::C::m1}{core::int?} == null ?{core::int?} this.{self::C::m1} = 42 : null;
this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(2){(core::num) → core::int};
this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(1){(core::num) → core::int};
this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::-}(1){(core::num) → core::int};

View file

@ -135,7 +135,7 @@ class C extends core::Object {
this.{self::C::property}{self::C}.{self::C::[]}(0){(core::int) → core::int?};
this.{self::C::property}{self::C}.{self::C::[]=}(0, 0){(core::int, core::int) → void};
let final self::C #t2 = this.{self::C::property}{self::C} in let final core::int #t3 = 0 in #t2.{self::C::[]}(#t3){(core::int) → core::int?} == null ?{core::int} #t2.{self::C::[]=}(#t3, 0){(core::int, core::int) → void} : null;
this.{self::C::m1}{core::int?} == null ?{core::int} this.{self::C::m1} = 42 : null;
this.{self::C::m1}{core::int?} == null ?{core::int?} this.{self::C::m1} = 42 : null;
this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(2){(core::num) → core::int};
this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(1){(core::num) → core::int};
this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::-}(1){(core::num) → core::int};

View file

@ -135,7 +135,7 @@ class C extends core::Object {
this.{self::C::property}{self::C}.{self::C::[]}(0){(core::int) → core::int?};
this.{self::C::property}{self::C}.{self::C::[]=}(0, 0){(core::int, core::int) → void};
let final self::C #t2 = this.{self::C::property}{self::C} in let final core::int #t3 = 0 in #t2.{self::C::[]}(#t3){(core::int) → core::int?} == null ?{core::int} #t2.{self::C::[]=}(#t3, 0){(core::int, core::int) → void} : null;
this.{self::C::m1}{core::int?} == null ?{core::int} this.{self::C::m1} = 42 : null;
this.{self::C::m1}{core::int?} == null ?{core::int?} this.{self::C::m1} = 42 : null;
this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(2){(core::num) → core::int};
this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(1){(core::num) → core::int};
this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::-}(1){(core::num) → core::int};

View file

@ -135,7 +135,7 @@ class C extends core::Object {
this.{self::C::property}{self::C}.{self::C::[]}(0){(core::int) → core::int?};
this.{self::C::property}{self::C}.{self::C::[]=}(0, 0){(core::int, core::int) → void};
let final self::C #t2 = this.{self::C::property}{self::C} in let final core::int #t3 = 0 in #t2.{self::C::[]}(#t3){(core::int) → core::int?} == null ?{core::int} #t2.{self::C::[]=}(#t3, 0){(core::int, core::int) → void} : null;
this.{self::C::m1}{core::int?} == null ?{core::int} this.{self::C::m1} = 42 : null;
this.{self::C::m1}{core::int?} == null ?{core::int?} this.{self::C::m1} = 42 : null;
this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(2){(core::num) → core::int};
this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(1){(core::num) → core::int};
this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::-}(1){(core::num) → core::int};

View file

@ -135,7 +135,7 @@ class C extends core::Object {
this.{self::C::property}{self::C}.{self::C::[]}(0){(core::int) → core::int?};
this.{self::C::property}{self::C}.{self::C::[]=}(0, 0){(core::int, core::int) → void};
let final self::C #t2 = this.{self::C::property}{self::C} in let final core::int #t3 = 0 in #t2.{self::C::[]}(#t3){(core::int) → core::int?} == null ?{core::int} #t2.{self::C::[]=}(#t3, 0){(core::int, core::int) → void} : null;
this.{self::C::m1}{core::int?} == null ?{core::int} this.{self::C::m1} = 42 : null;
this.{self::C::m1}{core::int?} == null ?{core::int?} this.{self::C::m1} = 42 : null;
this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(2){(core::num) → core::int};
this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(1){(core::num) → core::int};
this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::-}(1){(core::num) → core::int};

View file

@ -136,7 +136,7 @@ static method warning(core::String s, core::List<core::String> l, core::Map<core
#t3.{core::String::length}{core::int};
} =>#t3;
let final core::String #t4 = s in #t4 == null ?{core::String} "foo" : #t4;
s == null ?{core::String} s = "foo" : null;
s == null ?{core::String?} s = "foo" : null;
{
final core::List<core::String> #t5 = <core::String>[];
final core::Iterable<core::String>? #t6 = l;

View file

@ -136,7 +136,7 @@ static method warning(core::String s, core::List<core::String> l, core::Map<core
#t3.{core::String::length}{core::int};
} =>#t3;
let final core::String #t4 = s in #t4 == null ?{core::String} "foo" : #t4;
s == null ?{core::String} s = "foo" : null;
s == null ?{core::String?} s = "foo" : null;
{
final core::List<core::String> #t5 = core::_GrowableList::•<core::String>(0);
final core::Iterable<core::String>? #t6 = l;

View file

@ -136,7 +136,7 @@ static method warning(core::String s, core::List<core::String> l, core::Map<core
#t3.{core::String::length}{core::int};
} =>#t3;
let final core::String #t4 = s in #t4 == null ?{core::String} "foo" : #t4;
s == null ?{core::String} s = "foo" : null;
s == null ?{core::String?} s = "foo" : null;
{
final core::List<core::String> #t5 = <core::String>[];
final core::Iterable<core::String>? #t6 = l;

View file

@ -136,7 +136,7 @@ static method warning(core::String s, core::List<core::String> l, core::Map<core
#t3.{core::String::length}{core::int};
} =>#t3;
let final core::String #t4 = s in #t4 == null ?{core::String} "foo" : #t4;
s == null ?{core::String} s = "foo" : null;
s == null ?{core::String?} s = "foo" : null;
{
final core::List<core::String> #t5 = <core::String>[];
final core::Iterable<core::String>? #t6 = l;

View file

@ -136,7 +136,7 @@ static method warning(core::String s, core::List<core::String> l, core::Map<core
#t3.{core::String::length}{core::int};
} =>#t3;
let final core::String #t4 = s in #t4 == null ?{core::String} "foo" : #t4;
s == null ?{core::String} s = "foo" : null;
s == null ?{core::String?} s = "foo" : null;
{
final core::List<core::String> #t5 = core::_GrowableList::•<core::String>(0);
final core::Iterable<core::String>? #t6 = l;

View file

@ -478,7 +478,7 @@ static method ifNullPropertySetOptInForEffect(core::int i) → dynamic {
static method ifNullSetOptIn(core::int i) → dynamic
return let final core::int #t65 = i in #t65 == null ?{core::int} i = 42 : #t65;
static method ifNullSetOptInForEffect(core::int i) → dynamic {
i == null ?{core::int} i = 42 : null;
i == null ?{core::int?} i = 42 : null;
}
static method ifNullSuperIndexSetOptIn(core::int i) → dynamic
return new uns::OptInClass4::•().{uns::OptInClass4::method}(i){(core::int) → dynamic};

View file

@ -478,7 +478,7 @@ static method ifNullPropertySetOptInForEffect(core::int i) → dynamic {
static method ifNullSetOptIn(core::int i) → dynamic
return let final core::int #t65 = i in #t65 == null ?{core::int} i = 42 : #t65;
static method ifNullSetOptInForEffect(core::int i) → dynamic {
i == null ?{core::int} i = 42 : null;
i == null ?{core::int?} i = 42 : null;
}
static method ifNullSuperIndexSetOptIn(core::int i) → dynamic
return new uns::OptInClass4::•().{uns::OptInClass4::method}(i){(core::int) → dynamic};

View file

@ -478,7 +478,7 @@ static method ifNullPropertySetOptInForEffect(core::int i) → dynamic {
static method ifNullSetOptIn(core::int i) → dynamic
return let final core::int #t65 = i in #t65 == null ?{core::int} i = 42 : #t65;
static method ifNullSetOptInForEffect(core::int i) → dynamic {
i == null ?{core::int} i = 42 : null;
i == null ?{core::int?} i = 42 : null;
}
static method ifNullSuperIndexSetOptIn(core::int i) → dynamic
return new uns::OptInClass4::•().{uns::OptInClass4::method}(i){(core::int) → dynamic};

View file

@ -358,7 +358,7 @@ abstract class _CustomList&Object&ListMixin<E extends core::Object? = dynamic> e
_in::Sort::sort<cac::_CustomList&Object&ListMixin::E%>(this, let final (cac::_CustomList&Object&ListMixin::E%, cac::_CustomList&Object&ListMixin::E%) →? core::int #t6 = compare in #t6 == null ?{(cac::_CustomList&Object&ListMixin::E%, cac::_CustomList&Object&ListMixin::E%) → core::int} #C9 : #t6{(cac::_CustomList&Object&ListMixin::E%, cac::_CustomList&Object&ListMixin::E%) → core::int});
}
method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([math::Random? random = #C5]) → void {
random == null ?{math::Random} random = math::Random::•() : null;
random == null ?{math::Random?} random = math::Random::•() : null;
core::int length = this.{core::List::length}{core::int};
while (length.{core::num::>}(1){(core::num) → core::bool}) {
core::int pos = random{math::Random}.{math::Random::nextInt}(length){(core::int) → core::int};
@ -378,7 +378,7 @@ abstract class _CustomList&Object&ListMixin<E extends core::Object? = dynamic> e
} =>#t7;
method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(core::int start, [core::int? end = #C5]) → core::List<cac::_CustomList&Object&ListMixin::E%> {
core::int listLength = this.{core::List::length}{core::int};
end == null ?{core::int} end = listLength : null;
end == null ?{core::int?} end = listLength : null;
core::RangeError::checkValidRange(start, end{core::int}, listLength);
return core::List::from<cac::_CustomList&Object&ListMixin::E%>(this.{col::ListBase::getRange}(start, end{core::int}){(core::int, core::int) → core::Iterable<cac::_CustomList&Object&ListMixin::E%>});
}

View file

@ -358,7 +358,7 @@ abstract class _CustomList&Object&ListMixin<E extends core::Object? = dynamic> e
_in::Sort::sort<cac::_CustomList&Object&ListMixin::E%>(this, let final (cac::_CustomList&Object&ListMixin::E%, cac::_CustomList&Object&ListMixin::E%) →? core::int #t6 = compare in #t6 == null ?{(cac::_CustomList&Object&ListMixin::E%, cac::_CustomList&Object&ListMixin::E%) → core::int} #C9 : #t6{(cac::_CustomList&Object&ListMixin::E%, cac::_CustomList&Object&ListMixin::E%) → core::int});
}
method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([math::Random? random = #C5]) → void {
random == null ?{math::Random} random = math::Random::•() : null;
random == null ?{math::Random?} random = math::Random::•() : null;
core::int length = this.{core::List::length}{core::int};
while (length.{core::num::>}(1){(core::num) → core::bool}) {
core::int pos = random{math::Random}.{math::Random::nextInt}(length){(core::int) → core::int};
@ -378,7 +378,7 @@ abstract class _CustomList&Object&ListMixin<E extends core::Object? = dynamic> e
} =>#t7;
method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(core::int start, [core::int? end = #C5]) → core::List<cac::_CustomList&Object&ListMixin::E%> {
core::int listLength = this.{core::List::length}{core::int};
end == null ?{core::int} end = listLength : null;
end == null ?{core::int?} end = listLength : null;
core::RangeError::checkValidRange(start, end{core::int}, listLength);
return core::List::from<cac::_CustomList&Object&ListMixin::E%>(this.{col::ListBase::getRange}(start, end{core::int}){(core::int, core::int) → core::Iterable<cac::_CustomList&Object&ListMixin::E%>});
}

View file

@ -161,8 +161,8 @@ abstract class _MyMap&Object&MapMixin<K extends core::Object? = dynamic, V exten
return result.{core::StringBuffer::toString}(){() → core::String};
}
static method /* from org-dartlang-sdk:///sdk/lib/collection/maps.dart */ _fillMapWithMappedIterable(core::Map<core::Object?, core::Object?> map, core::Iterable<core::Object?> iterable, (core::Object?) →? core::Object? key, (core::Object?) →? core::Object? value) → void {
key == null ?{(core::Object?) → core::Object?} key = #C2 : null;
value == null ?{(core::Object?) → core::Object?} value = #C2 : null;
key == null ?{(core::Object?) →? core::Object?} key = #C2 : null;
value == null ?{(core::Object?) →? core::Object?} value = #C2 : null;
{
synthesized core::Iterator<core::Object?> :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<core::Object?>};
for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {

View file

@ -161,8 +161,8 @@ abstract class _MyMap&Object&MapMixin<K extends core::Object? = dynamic, V exten
return result.{core::StringBuffer::toString}(){() → core::String};
}
static method /* from org-dartlang-sdk:///sdk/lib/collection/maps.dart */ _fillMapWithMappedIterable(core::Map<core::Object?, core::Object?> map, core::Iterable<core::Object?> iterable, (core::Object?) →? core::Object? key, (core::Object?) →? core::Object? value) → void {
key == null ?{(core::Object?) → core::Object?} key = #C2 : null;
value == null ?{(core::Object?) → core::Object?} value = #C2 : null;
key == null ?{(core::Object?) →? core::Object?} key = #C2 : null;
value == null ?{(core::Object?) →? core::Object?} value = #C2 : null;
{
synthesized core::Iterator<core::Object?> :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<core::Object?>};
for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {

View file

@ -287,7 +287,7 @@ abstract class _A&Object&ListMixin extends core::Object implements col::ListBase
_in::Sort::sort<core::int>(this, let final (core::int, core::int) →? core::int #t4 = compare in #t4 == null ?{(core::int, core::int) → core::int} #C6 : #t4{(core::int, core::int) → core::int});
}
method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([math::Random? random = #C2]) → void {
random == null ?{math::Random} random = math::Random::•() : null;
random == null ?{math::Random?} random = math::Random::•() : null;
core::int length = this.{core::List::length}{core::int};
while (length.{core::num::>}(1){(core::num) → core::bool}) {
core::int pos = random{math::Random}.{math::Random::nextInt}(length){(core::int) → core::int};
@ -307,7 +307,7 @@ abstract class _A&Object&ListMixin extends core::Object implements col::ListBase
} =>#t5;
method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(core::int start, [core::int? end = #C2]) → core::List<core::int> {
core::int listLength = this.{core::List::length}{core::int};
end == null ?{core::int} end = listLength : null;
end == null ?{core::int?} end = listLength : null;
core::RangeError::checkValidRange(start, end{core::int}, listLength);
return core::List::from<core::int>(this.{col::ListBase::getRange}(start, end{core::int}){(core::int, core::int) → core::Iterable<core::int>});
}

View file

@ -287,7 +287,7 @@ abstract class _A&Object&ListMixin extends core::Object implements col::ListBase
_in::Sort::sort<core::int>(this, let final (core::int, core::int) →? core::int #t4 = compare in #t4 == null ?{(core::int, core::int) → core::int} #C6 : #t4{(core::int, core::int) → core::int});
}
method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([math::Random? random = #C2]) → void {
random == null ?{math::Random} random = math::Random::•() : null;
random == null ?{math::Random?} random = math::Random::•() : null;
core::int length = this.{core::List::length}{core::int};
while (length.{core::num::>}(1){(core::num) → core::bool}) {
core::int pos = random{math::Random}.{math::Random::nextInt}(length){(core::int) → core::int};
@ -307,7 +307,7 @@ abstract class _A&Object&ListMixin extends core::Object implements col::ListBase
} =>#t5;
method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(core::int start, [core::int? end = #C2]) → core::List<core::int> {
core::int listLength = this.{core::List::length}{core::int};
end == null ?{core::int} end = listLength : null;
end == null ?{core::int?} end = listLength : null;
core::RangeError::checkValidRange(start, end{core::int}, listLength);
return core::List::from<core::int>(this.{col::ListBase::getRange}(start, end{core::int}){(core::int, core::int) → core::Iterable<core::int>});
}

View file

@ -287,7 +287,7 @@ abstract class _NegativeLengthList&Object&ListMixin<E extends core::Object? = dy
_in::Sort::sort<self::_NegativeLengthList&Object&ListMixin::E%>(this, let final (self::_NegativeLengthList&Object&ListMixin::E%, self::_NegativeLengthList&Object&ListMixin::E%) →? core::int #t4 = compare in #t4 == null ?{(self::_NegativeLengthList&Object&ListMixin::E%, self::_NegativeLengthList&Object&ListMixin::E%) → core::int} #C6 : #t4{(self::_NegativeLengthList&Object&ListMixin::E%, self::_NegativeLengthList&Object&ListMixin::E%) → core::int});
}
method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([math::Random? random = #C2]) → void {
random == null ?{math::Random} random = math::Random::•() : null;
random == null ?{math::Random?} random = math::Random::•() : null;
core::int length = this.{core::List::length}{core::int};
while (length.{core::num::>}(1){(core::num) → core::bool}) {
core::int pos = random{math::Random}.{math::Random::nextInt}(length){(core::int) → core::int};
@ -307,7 +307,7 @@ abstract class _NegativeLengthList&Object&ListMixin<E extends core::Object? = dy
} =>#t5;
method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(core::int start, [core::int? end = #C2]) → core::List<self::_NegativeLengthList&Object&ListMixin::E%> {
core::int listLength = this.{core::List::length}{core::int};
end == null ?{core::int} end = listLength : null;
end == null ?{core::int?} end = listLength : null;
core::RangeError::checkValidRange(start, end{core::int}, listLength);
return core::List::from<self::_NegativeLengthList&Object&ListMixin::E%>(this.{col::ListBase::getRange}(start, end{core::int}){(core::int, core::int) → core::Iterable<self::_NegativeLengthList&Object&ListMixin::E%>});
}

View file

@ -287,7 +287,7 @@ abstract class _NegativeLengthList&Object&ListMixin<E extends core::Object? = dy
_in::Sort::sort<self::_NegativeLengthList&Object&ListMixin::E%>(this, let final (self::_NegativeLengthList&Object&ListMixin::E%, self::_NegativeLengthList&Object&ListMixin::E%) →? core::int #t4 = compare in #t4 == null ?{(self::_NegativeLengthList&Object&ListMixin::E%, self::_NegativeLengthList&Object&ListMixin::E%) → core::int} #C6 : #t4{(self::_NegativeLengthList&Object&ListMixin::E%, self::_NegativeLengthList&Object&ListMixin::E%) → core::int});
}
method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([math::Random? random = #C2]) → void {
random == null ?{math::Random} random = math::Random::•() : null;
random == null ?{math::Random?} random = math::Random::•() : null;
core::int length = this.{core::List::length}{core::int};
while (length.{core::num::>}(1){(core::num) → core::bool}) {
core::int pos = random{math::Random}.{math::Random::nextInt}(length){(core::int) → core::int};
@ -307,7 +307,7 @@ abstract class _NegativeLengthList&Object&ListMixin<E extends core::Object? = dy
} =>#t5;
method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(core::int start, [core::int? end = #C2]) → core::List<self::_NegativeLengthList&Object&ListMixin::E%> {
core::int listLength = this.{core::List::length}{core::int};
end == null ?{core::int} end = listLength : null;
end == null ?{core::int?} end = listLength : null;
core::RangeError::checkValidRange(start, end{core::int}, listLength);
return core::List::from<self::_NegativeLengthList&Object&ListMixin::E%>(this.{col::ListBase::getRange}(start, end{core::int}){(core::int, core::int) → core::Iterable<self::_NegativeLengthList&Object&ListMixin::E%>});
}

View file

@ -16,7 +16,7 @@ class Sub extends self::Base {
get hashCode() → core::int
return let final core::int? #t1 = this.{self::Sub::_hashCode}{core::int?} in #t1 == null ?{core::int} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1{core::int};
method foo() → dynamic {
this.{self::Sub::_hashCode}{core::int?} == null ?{core::int} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
this.{self::Sub::_hashCode}{core::int?} == null ?{core::int?} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
}
}
static method main() → dynamic {

View file

@ -16,7 +16,7 @@ class Sub extends self::Base {
get hashCode() → core::int
return let final core::int? #t1 = this.{self::Sub::_hashCode}{core::int?} in #t1 == null ?{core::int} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1{core::int};
method foo() → dynamic {
this.{self::Sub::_hashCode}{core::int?} == null ?{core::int} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
this.{self::Sub::_hashCode}{core::int?} == null ?{core::int?} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
}
}
static method main() → dynamic {

View file

@ -16,7 +16,7 @@ class Sub extends self::Base {
get hashCode() → core::int
return let final core::int? #t1 = this.{self::Sub::_hashCode}{core::int?} in #t1 == null ?{core::int} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1{core::int};
method foo() → dynamic {
this.{self::Sub::_hashCode}{core::int?} == null ?{core::int} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
this.{self::Sub::_hashCode}{core::int?} == null ?{core::int?} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
}
}
static method main() → dynamic {

View file

@ -16,7 +16,7 @@ class Sub extends self::Base {
get hashCode() → core::int
return let final core::int? #t1 = this.{self::Sub::_hashCode}{core::int?} in #t1 == null ?{core::int} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1{core::int};
method foo() → dynamic {
this.{self::Sub::_hashCode}{core::int?} == null ?{core::int} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
this.{self::Sub::_hashCode}{core::int?} == null ?{core::int?} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
}
}
static method main() → dynamic {

View file

@ -16,7 +16,7 @@ class Sub extends self::Base {
get hashCode() → core::int
return let final core::int? #t1 = this.{self::Sub::_hashCode}{core::int?} in #t1 == null ?{core::int} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1{core::int};
method foo() → dynamic {
this.{self::Sub::_hashCode}{core::int?} == null ?{core::int} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
this.{self::Sub::_hashCode}{core::int?} == null ?{core::int?} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
}
}
static method main() → dynamic {

View file

@ -322,7 +322,7 @@ Try correcting the name to the name of an existing method, or defining a method
self::use(let final core::int #t11 = #C1 in #t11 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
use(Foo.staticConstant ??= 87);
^^^^^^^^^^^^^^" : #t11);
self::Foo::staticField == null ?{core::int} self::Foo::staticField = 87 : null;
self::Foo::staticField == null ?{core::int?} self::Foo::staticField = 87 : null;
self::use(let final core::int #t12 = self::Foo::staticField in #t12 == null ?{core::int} self::Foo::staticField = 87 : #t12);
#C2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
Foo.staticFunction ??= 87;

View file

@ -322,7 +322,7 @@ Try correcting the name to the name of an existing method, or defining a method
self::use(let final core::int #t11 = #C1 in #t11 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
use(Foo.staticConstant ??= 87);
^^^^^^^^^^^^^^" : #t11);
self::Foo::staticField == null ?{core::int} self::Foo::staticField = 87 : null;
self::Foo::staticField == null ?{core::int?} self::Foo::staticField = 87 : null;
self::use(let final core::int #t12 = self::Foo::staticField in #t12 == null ?{core::int} self::Foo::staticField = 87 : #t12);
#C2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
Foo.staticFunction ??= 87;

View file

@ -322,7 +322,7 @@ Try correcting the name to the name of an existing method, or defining a method
self::use(let final core::int #t11 = #C1 in #t11 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
use(Foo.staticConstant ??= 87);
^^^^^^^^^^^^^^" : #t11);
self::Foo::staticField == null ?{core::int} self::Foo::staticField = 87 : null;
self::Foo::staticField == null ?{core::int?} self::Foo::staticField = 87 : null;
self::use(let final core::int #t12 = self::Foo::staticField in #t12 == null ?{core::int} self::Foo::staticField = 87 : #t12);
#C2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
Foo.staticFunction ??= 87;

View file

@ -322,7 +322,7 @@ Try correcting the name to the name of an existing method, or defining a method
self::use(let final core::int #t11 = #C1 in #t11 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
use(Foo.staticConstant ??= 87);
^^^^^^^^^^^^^^" : #t11);
self::Foo::staticField == null ?{core::int} self::Foo::staticField = 87 : null;
self::Foo::staticField == null ?{core::int?} self::Foo::staticField = 87 : null;
self::use(let final core::int #t12 = self::Foo::staticField in #t12 == null ?{core::int} self::Foo::staticField = 87 : #t12);
#C2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
Foo.staticFunction ??= 87;

View file

@ -322,7 +322,7 @@ Try correcting the name to the name of an existing method, or defining a method
self::use(let final core::int #t11 = #C1 in #t11 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
use(Foo.staticConstant ??= 87);
^^^^^^^^^^^^^^" : #t11);
self::Foo::staticField == null ?{core::int} self::Foo::staticField = 87 : null;
self::Foo::staticField == null ?{core::int?} self::Foo::staticField = 87 : null;
self::use(let final core::int #t12 = self::Foo::staticField in #t12 == null ?{core::int} self::Foo::staticField = 87 : #t12);
#C2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
Foo.staticFunction ??= 87;

View file

@ -625,7 +625,7 @@ Try removing the extra positional arguments.
self::use(let final () → void #t50 = super.{self::A::m} in #t50 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/super.dart:198:15: Error: Superclass has no setter named 'm'.
use(super.m ??= 42);
^" : #t50);
super.{self::A::n} == null ?{core::Object} super.{self::A::n} = 42 : null;
super.{self::A::n} == null ?{core::Object?} super.{self::A::n} = 42 : null;
self::use(let final () → void #t51 = super.{self::A::n} in #t51 == null ?{core::Object} super.{self::A::n} = 42 : #t51);
super.{self::A::a} = super.{self::A::a}{dynamic}.+(42);
self::use(super.{self::A::a} = super.{self::A::a}{dynamic}.+(42));

View file

@ -625,7 +625,7 @@ Try removing the extra positional arguments.
self::use(let final () → void #t50 = super.{self::A::m} in #t50 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/super.dart:198:15: Error: Superclass has no setter named 'm'.
use(super.m ??= 42);
^" : #t50);
super.{self::A::n} == null ?{core::Object} super.{self::A::n} = 42 : null;
super.{self::A::n} == null ?{core::Object?} super.{self::A::n} = 42 : null;
self::use(let final () → void #t51 = super.{self::A::n} in #t51 == null ?{core::Object} super.{self::A::n} = 42 : #t51);
super.{self::A::a} = super.{self::A::a}{dynamic}.+(42);
self::use(super.{self::A::a} = super.{self::A::a}{dynamic}.+(42));

View file

@ -625,7 +625,7 @@ Try removing the extra positional arguments.
self::use(let final () → void #t50 = super.{self::A::m} in #t50 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/super.dart:198:15: Error: Superclass has no setter named 'm'.
use(super.m ??= 42);
^" : #t50);
super.{self::A::n} == null ?{core::Object} super.{self::A::n} = 42 : null;
super.{self::A::n} == null ?{core::Object?} super.{self::A::n} = 42 : null;
self::use(let final () → void #t51 = super.{self::A::n} in #t51 == null ?{core::Object} super.{self::A::n} = 42 : #t51);
super.{self::A::a} = super.{self::A::a}{dynamic}.+(42);
self::use(super.{self::A::a} = super.{self::A::a}{dynamic}.+(42));

View file

@ -625,7 +625,7 @@ Try removing the extra positional arguments.
self::use(let final () → void #t50 = super.{self::A::m} in #t50 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/super.dart:198:15: Error: Superclass has no setter named 'm'.
use(super.m ??= 42);
^" : #t50);
super.{self::A::n} == null ?{core::Object} super.{self::A::n} = 42 : null;
super.{self::A::n} == null ?{core::Object?} super.{self::A::n} = 42 : null;
self::use(let final () → void #t51 = super.{self::A::n} in #t51 == null ?{core::Object} super.{self::A::n} = 42 : #t51);
super.{self::A::a} = super.{self::A::a}{dynamic}.+(42);
self::use(super.{self::A::a} = super.{self::A::a}{dynamic}.+(42));

View file

@ -625,7 +625,7 @@ Try removing the extra positional arguments.
self::use(let final () → void #t50 = super.{self::A::m} in #t50 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/super.dart:198:15: Error: Superclass has no setter named 'm'.
use(super.m ??= 42);
^" : #t50);
super.{self::A::n} == null ?{core::Object} super.{self::A::n} = 42 : null;
super.{self::A::n} == null ?{core::Object?} super.{self::A::n} = 42 : null;
self::use(let final () → void #t51 = super.{self::A::n} in #t51 == null ?{core::Object} super.{self::A::n} = 42 : #t51);
super.{self::A::a} = super.{self::A::a}{dynamic}.+(42);
self::use(super.{self::A::a} = super.{self::A::a}{dynamic}.+(42));