blob: 69e3dba2560413bf53f01dbe5b1256be865ed23c [file] [log] [blame]
library;
import self as self;
import "dart:core" as core;
static method test1(dynamic x) dynamic
return block {
final core::List<core::int> #t1 = <core::int>[];
hoisted core::int i;
hoisted core::int n;
{
final synthesized dynamic #0#0 = x as{TypeError,ForDynamic} core::List<core::int>;
late final synthesized dynamic #0#6 = (#0#0 as{Unchecked} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic};
late final synthesized dynamic #0#7 = (#0#0 as{Unchecked} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic};
if(!(#0#0 is core::List<dynamic> && #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#0#6 is core::int && (let final dynamic #t2 = i = #0#6{core::int} in true)) && (#0#7 is core::int && (let final dynamic #t3 = n = #0#7{core::int} in true))))
throw new core::StateError::•("Pattern matching error");
}
final core::int #t4 = i;
final core::int #t5 = n;
for (core::int i = #t4, core::int n = #t5; i.{core::num::<}(n){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
#t1.{core::List::add}{Invariant}(i){(core::int) → void};
} =>#t1;
static method test2(dynamic x) dynamic
return block {
final core::Map<core::int, core::int> #t6 = <core::int, core::int>{};
#t6.{core::Map::[]=}{Invariant}(1.{core::int::unary-}(){() → core::int}, 1.{core::int::unary-}(){() → core::int}){(core::int, core::int) → void};
hoisted core::int i;
hoisted core::int n;
{
final synthesized dynamic #0#0 = x as{TypeError,ForDynamic} core::List<core::int>;
late final synthesized dynamic #0#6 = (#0#0 as{Unchecked} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic};
late final synthesized dynamic #0#7 = (#0#0 as{Unchecked} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic};
if(!(#0#0 is core::List<dynamic> && #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#0#6 is core::int && (let final dynamic #t7 = i = #0#6{core::int} in true)) && (#0#7 is core::int && (let final dynamic #t8 = n = #0#7{core::int} in true))))
throw new core::StateError::•("Pattern matching error");
}
final core::int #t9 = i;
final core::int #t10 = n;
for (core::int i = #t9, core::int n = #t10; i.{core::num::<}(n){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
#t6.{core::Map::[]=}{Invariant}(i, i){(core::int, core::int) → void};
#t6.{core::Map::[]=}{Invariant}(2.{core::int::unary-}(){() → core::int}, 2.{core::int::unary-}(){() → core::int}){(core::int, core::int) → void};
} =>#t6;
static method test3(dynamic x, dynamic another) dynamic
return block {
final core::Map<dynamic, dynamic> #t11 = <dynamic, dynamic>{};
#t11.{core::Map::[]=}{Invariant}(1.{core::int::unary-}(){() → core::int}, 1.{core::int::unary-}(){() → core::int}){(dynamic, dynamic) → void};
hoisted core::int i1;
hoisted dynamic n1;
{
final synthesized dynamic #0#0 = x as{TypeError,ForDynamic} core::List<core::int>;
late final synthesized dynamic #0#6 = (#0#0 as{Unchecked} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic};
if(!(#0#0 is core::List<dynamic> && #0#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool} && (#0#6 is core::int && (let final dynamic #t12 = i1 = #0#6{core::int} in true)) && (let final dynamic #t13 = n1 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)))
throw new core::StateError::•("Pattern matching error");
}
final core::int #t14 = i1;
final dynamic #t15 = n1;
for (core::int i1 = #t14, dynamic n1 = #t15; i1.{core::num::<}(n1 as{TypeError,ForDynamic} core::num){(core::num) → core::bool}; i1 = i1.{core::num::+}(1){(core::num) → core::int}) {
hoisted core::int i2;
hoisted dynamic n2;
{
final synthesized dynamic #1#0 = x as{TypeError,ForDynamic} core::List<core::int>;
late final synthesized dynamic #1#8 = (#1#0 as{Unchecked} core::List<dynamic>).{core::List::[]}(2){(core::int) → dynamic};
if(!(#1#0 is core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C2){(core::num) → core::bool} && (#1#8 is core::int && (let final dynamic #t16 = i2 = #1#8{core::int} in true)) && (let final dynamic #t17 = n2 = #1#0{core::List<dynamic>}.{core::List::[]}(3){(core::int) → dynamic} in true)))
throw new core::StateError::•("Pattern matching error");
}
final core::int #t18 = i2;
final dynamic #t19 = n2;
for (core::int i2 = #t18, dynamic n2 = #t19; i2.{core::num::<}(n2 as{TypeError,ForDynamic} core::num){(core::num) → core::bool}; i2 = i2.{core::num::+}(1){(core::num) → core::int})
#t11.{core::Map::addAll}{Invariant}(another as{TypeError,ForDynamic} core::Map<dynamic, dynamic>){(core::Map<dynamic, dynamic>) → void};
}
#t11.{core::Map::[]=}{Invariant}(2.{core::int::unary-}(){() → core::int}, 2.{core::int::unary-}(){() → core::int}){(dynamic, dynamic) → void};
} =>#t11;
static method main() dynamic {
self::expectEquals(self::listToString(self::test1(<core::int>[0, 3]) as{TypeError,ForDynamic} core::List<dynamic>), self::listToString(<dynamic>[0, 1, 2]));
self::expectEquals(self::listToString(self::test1(<core::int>[0, 0]) as{TypeError,ForDynamic} core::List<dynamic>), self::listToString(<dynamic>[]));
self::expectThrows(() void => self::test1(<dynamic, dynamic>{}));
self::expectEquals(self::mapToString(self::test2(<core::int>[0, 3]) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>), self::mapToString(<dynamic, dynamic>{2.{core::int::unary-}(){() core::int}: 2.{core::int::unary-}(){() core::int}, 1.{core::int::unary-}(){() core::int}: 1.{core::int::unary-}(){() core::int}, 0: 0, 1: 1, 2: 2}));
self::expectEquals(self::mapToString(self::test2(<core::int>[0, 0]) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>), self::mapToString(<dynamic, dynamic>{2.{core::int::unary-}(){() core::int}: 2.{core::int::unary-}(){() core::int}, 1.{core::int::unary-}(){() core::int}: 1.{core::int::unary-}(){() core::int}}));
self::expectThrows(() void => self::test1(<dynamic>[]));
self::expectEquals(self::mapToString(self::test3(<core::int>[0, 0, 0, 0], <core::int, core::int>{0: 0}) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>), self::mapToString(<dynamic, dynamic>{1.{core::int::unary-}(){() core::int}: 1.{core::int::unary-}(){() core::int}, 2.{core::int::unary-}(){() core::int}: 2.{core::int::unary-}(){() core::int}}));
self::expectEquals(self::mapToString(self::test3(<core::int>[0, 1, 0, 1], <core::int, core::int>{0: 0}) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>), self::mapToString(<dynamic, dynamic>{1.{core::int::unary-}(){() core::int}: 1.{core::int::unary-}(){() core::int}, 2.{core::int::unary-}(){() core::int}: 2.{core::int::unary-}(){() core::int}, 0: 0}));
self::expectThrows(() void => self::test3(<dynamic>[], <dynamic, dynamic>{}));
}
static method expectEquals(dynamic x, dynamic y) dynamic {
if(!(x =={core::Object::==}{(core::Object) core::bool} y)) {
throw "Expected '${x}' to be equal to '${y}'.";
}
}
static method listToString(core::List<dynamic> list) dynamic
return "[${list.{core::Iterable::map}<core::String>((dynamic e) → core::String => "${e}"){((dynamic) → core::String) → core::Iterable<core::String>}.{core::Iterable::join}(","){([core::String]) → core::String}}]";
static method expectThrows(() void f) dynamic {
core::bool hasThrown = true;
try {
f(){() void};
hasThrown = false;
}
on core::Object catch(final core::Object e) {
}
if(!hasThrown) {
throw "Expected the function to throw.";
}
}
static method mapToString(core::Map<dynamic, dynamic> map) dynamic {
core::List<core::String> entryStrings = block {
final core::List<core::String> #t20 = <core::String>[];
for (core::MapEntry<dynamic, dynamic> entry in map.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
#t20.{core::List::add}{Invariant}("${entry.{core::MapEntry::key}{dynamic}}:${entry.{core::MapEntry::value}{dynamic}}"){(core::String) → void};
} =>#t20;
entryStrings.{core::List::sort}(){([(core::String, core::String) →? core::int]) void};
return "[${entryStrings.{core::Iterable::join}(","){([core::String]) → core::String}}]";
}
constants {
#C1 = 2
#C2 = 4
}