2528bf8666
This flag is set when a variable declaration is moved earlier in order to be available for subsequent code that couldn't contain its declaration. For instance variables declared in patterns which needs to be declared before the matching expressions that initialize them. TEST=existing expectations tests Change-Id: I80ab1138f08f725f3e01905c1a57a1483f809328 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/291820 Commit-Queue: Johnni Winther <johnniwinther@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
115 lines
6.4 KiB
Plaintext
115 lines
6.4 KiB
Plaintext
library /*isNonNullableByDefault*/;
|
|
import self as self;
|
|
import "dart:core" as core;
|
|
|
|
static method test(dynamic o, [dynamic expectedRest = #C1]) → dynamic {
|
|
#L1:
|
|
{
|
|
final synthesized dynamic #0#0 = o;
|
|
late final synthesized core::int #0#2 = #0#0{core::List<dynamic>}.{core::List::length}{core::int};
|
|
late final synthesized core::bool #0#4 = #0#2.{core::num::>=}(#C2){(core::num) → core::bool};
|
|
late final synthesized core::bool #0#8 = #C3 =={core::num::==}{(core::Object) → core::bool} #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
|
|
late final synthesized dynamic #0#9 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic};
|
|
late final synthesized dynamic #0#12 = #0#0{core::List<dynamic>}.{core::List::[]}(#0#2.{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic};
|
|
late final synthesized core::bool #0#19 = #0#2.{core::num::>=}(#C4){(core::num) → core::bool};
|
|
late final synthesized core::List<dynamic> #0#22 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, #0#2.{core::num::-}(2){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>};
|
|
late final synthesized core::bool #0#24 = #C2 =={core::num::==}{(core::Object) → core::bool} #0#0{core::List<dynamic>}.{core::List::[]}(#0#2.{core::num::-}(2){(core::num) → core::int}){(core::int) → dynamic};
|
|
late final synthesized core::bool #0#26 = #C5 =={core::num::==}{(core::Object) → core::bool} #0#12;
|
|
late final synthesized core::int #0#29 = #0#22.{core::List::length}{core::int};
|
|
{
|
|
if(#0#0 is{ForNonNullableByDefault} core::List<dynamic> && #0#4 && #0#8 && #C6 =={core::num::==}{(core::Object) → core::bool} #0#9) {
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
{
|
|
if(#0#0 is{ForNonNullableByDefault} core::List<dynamic> && #0#4 && #0#8 && #C6 =={core::num::==}{(core::Object) → core::bool} #0#12) {
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
{
|
|
hoisted core::List<dynamic> rest;
|
|
if(#0#0 is{ForNonNullableByDefault} core::List<dynamic> && #0#4 && #0#8 && #C2 =={core::num::==}{(core::Object) → core::bool} #0#9 && (let final dynamic #t1 = rest = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>} in true)) {
|
|
{
|
|
self::expect(expectedRest, rest);
|
|
return 2;
|
|
}
|
|
}
|
|
}
|
|
{
|
|
hoisted core::List<dynamic> rest;
|
|
if(#0#0 is{ForNonNullableByDefault} core::List<dynamic> && #0#4 && #0#8 && (let final dynamic #t2 = rest = #0#0{core::List<dynamic>}.{core::List::sublist}(1, #0#2.{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>} in true) && #C2 =={core::num::==}{(core::Object) → core::bool} #0#12) {
|
|
{
|
|
self::expect(expectedRest, rest);
|
|
return 3;
|
|
}
|
|
}
|
|
}
|
|
{
|
|
hoisted core::List<dynamic> rest;
|
|
if(#0#0 is{ForNonNullableByDefault} core::List<dynamic> && #0#19 && #0#8 && #C4 =={core::num::==}{(core::Object) → core::bool} #0#9 && (let final dynamic #t3 = rest = #0#22 in true) && #0#24 && #0#26) {
|
|
{
|
|
self::expect(expectedRest, rest);
|
|
return 4;
|
|
}
|
|
}
|
|
}
|
|
{
|
|
hoisted core::List<dynamic> rest;
|
|
if(#0#0 is{ForNonNullableByDefault} core::List<dynamic> && #0#19 && #0#8 && #C7 =={core::num::==}{(core::Object) → core::bool} #0#9 && (#0#29.{core::num::>=}(#C2){(core::num) → core::bool} && #C6 =={core::num::==}{(core::Object) → core::bool} #0#22.{core::List::[]}(0){(core::int) → dynamic} && (let final dynamic #t4 = rest = #0#22.{core::List::sublist}(1, #0#29.{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>} in true) && #C2 =={core::num::==}{(core::Object) → core::bool} #0#22.{core::List::[]}(#0#29.{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic}) && #0#24 && #0#26) {
|
|
{
|
|
self::expect(expectedRest, rest);
|
|
return 5;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
static method main() → dynamic {
|
|
self::expect(0, self::test(<core::int>[0, 1]));
|
|
self::expect(0, self::test(<core::int>[0, 1, 2]));
|
|
self::expect(1, self::test(<core::int>[0, 2, 1]));
|
|
self::expect(1, self::test(<core::int>[0, 2, 3, 1]));
|
|
self::expect(2, self::test(<core::int>[0, 2], <dynamic>[]));
|
|
self::expect(2, self::test(<core::int>[0, 2, 2], <core::int>[2]));
|
|
self::expect(2, self::test(<core::int>[0, 2, 3], <core::int>[3]));
|
|
self::expect(2, self::test(<core::int>[0, 2, 3, 4], <core::int>[3, 4]));
|
|
self::expect(3, self::test(<core::int>[0, 3, 4, 2], <core::int>[3, 4]));
|
|
self::expect(3, self::test(<core::int>[0, 3, 4, 5, 2], <core::int>[3, 4, 5]));
|
|
self::expect(4, self::test(<core::int>[0, 4, 2, 3], <dynamic>[]));
|
|
self::expect(4, self::test(<core::int>[0, 4, 2, 2, 3], <core::int>[2]));
|
|
self::expect(4, self::test(<core::int>[0, 4, 2, 3, 2, 3], <core::int>[2, 3]));
|
|
self::expect(null, self::test(<core::int>[0, 5, 3, 2, 3]));
|
|
self::expect(null, self::test(<core::Object>[0, 5, <dynamic>[], 2, 3]));
|
|
self::expect(null, self::test(<core::Object>[0, 5, <core::int>[0, 1], 2, 3]));
|
|
self::expect(5, self::test(<core::int>[0, 5, 1, 2, 2, 3], <dynamic>[]));
|
|
self::expect(5, self::test(<core::int>[0, 5, 1, 3, 2, 2, 3], <core::int>[3]));
|
|
}
|
|
static method expect(dynamic expected, dynamic actual) → dynamic {
|
|
if(expected is{ForNonNullableByDefault} core::List<dynamic> && actual is{ForNonNullableByDefault} core::List<dynamic>) {
|
|
if(expected{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} actual{core::List<dynamic>}.{core::List::length}{core::int}) {
|
|
for (core::int i = 0; i.{core::num::<}(expected{core::List<dynamic>}.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
|
|
if(!(expected{core::List<dynamic>}.{core::List::[]}(i){(core::int) → dynamic} =={core::Object::==}{(core::Object) → core::bool} actual{core::List<dynamic>}.{core::List::[]}(i){(core::int) → dynamic})) {
|
|
throw "Expected ${expected{core::List<dynamic>}.{core::List::[]}(i){(core::int) → dynamic}}, actual ${actual{core::List<dynamic>}.{core::List::[]}(i){(core::int) → dynamic}} @ index ${i}";
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
|
|
throw "Expected ${expected}, actual ${actual}";
|
|
}
|
|
|
|
constants {
|
|
#C1 = null
|
|
#C2 = 2
|
|
#C3 = 0
|
|
#C4 = 4
|
|
#C5 = 3
|
|
#C6 = 1
|
|
#C7 = 5
|
|
}
|