| library; |
| import self as self; |
| import "dart:core" as core; |
| |
| static method main() → void { |
| core::List<core::int> list = <core::int>[1, 2, 3]; |
| core::print(self::subs<core::int>(list)); |
| core::print(self::perms<core::int>(list)); |
| core::print(self::equals<core::int>(list, list)); |
| } |
| static method subs<A extends core::Object? = dynamic>(core::List<self::subs::A%> list) → core::List<core::List<self::subs::A%>> |
| return block { |
| core::List<core::List<self::subs::A%>> #t1; |
| final synthesized core::List<self::subs::A%> #0#0 = list; |
| synthesized core::int #0#1; |
| synthesized core::bool #0#1#isSet = false; |
| #L1: |
| { |
| { |
| if((#0#1#isSet ?{core::int} #0#1{core::int} : let final dynamic #t2 = #0#1#isSet = true in #0#1 = #0#0.{core::List::length}{core::int}).{core::num::<=}(#C1){(core::num) → core::bool}) { |
| #t1 = <core::List<self::subs::A%>>[]; |
| break #L1; |
| } |
| } |
| { |
| hoisted self::subs::A% x; |
| hoisted core::List<self::subs::A%> xs; |
| if((#0#1#isSet ?{core::int} #0#1{core::int} : let final dynamic #t3 = #0#1#isSet = true in #0#1 = #0#0.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) { |
| x = #0#0.{core::List::[]}(0){(core::int) → self::subs::A%}; |
| xs = #0#0.{core::List::sublist}(1){(core::int, [core::int?]) → core::List<self::subs::A%>}; |
| #t1 = block { |
| final core::List<core::List<self::subs::A%>> #t4 = <core::List<self::subs::A%>>[]; |
| for (core::List<self::subs::A%> ys in self::subs<self::subs::A%>(xs)) |
| #t4.{core::List::addAll}{Invariant}(<core::List<self::subs::A%>>[<self::subs::A%>[x].{core::List::+}(ys){(core::List<self::subs::A%>) → core::List<self::subs::A%>}, ys]){(core::Iterable<core::List<self::subs::A%>>) → void}; |
| #t4.{core::List::add}{Invariant}(<self::subs::A%>[x]){(core::List<self::subs::A%>) → void}; |
| } =>#t4; |
| break #L1; |
| } |
| } |
| } |
| } =>#t1; |
| static method perms<A extends core::Object? = dynamic>(core::List<self::perms::A%> list) → core::List<core::List<self::perms::A%>> |
| return block { |
| core::List<core::List<self::perms::A%>> #t5; |
| final synthesized core::List<self::perms::A%> #0#0 = list; |
| synthesized core::int #0#1; |
| synthesized core::bool #0#1#isSet = false; |
| #L2: |
| { |
| { |
| if((#0#1#isSet ?{core::int} #0#1{core::int} : let final dynamic #t6 = #0#1#isSet = true in #0#1 = #0#0.{core::List::length}{core::int}).{core::num::<=}(#C1){(core::num) → core::bool} || (#0#1#isSet ?{core::int} #0#1{core::int} : let final dynamic #t7 = #0#1#isSet = true in #0#1 = #0#0.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} #C2) { |
| #t5 = <core::List<self::perms::A%>>[list]; |
| break #L2; |
| } |
| } |
| { |
| hoisted self::perms::A% x; |
| hoisted core::List<self::perms::A%> xs; |
| if((#0#1#isSet ?{core::int} #0#1{core::int} : let final dynamic #t8 = #0#1#isSet = true in #0#1 = #0#0.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) { |
| x = #0#0.{core::List::[]}(0){(core::int) → self::perms::A%}; |
| xs = #0#0.{core::List::sublist}(1){(core::int, [core::int?]) → core::List<self::perms::A%>}; |
| #t5 = block { |
| final core::List<core::List<self::perms::A%>> #t9 = <core::List<self::perms::A%>>[]; |
| for (core::int i = 0; i.{core::num::<}(list.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) |
| for (core::List<self::perms::A%> perm in self::perms<self::perms::A%>(xs)) |
| #t9.{core::List::add}{Invariant}( block { |
| final core::List<self::perms::A%> #t10 = core::List::of<self::perms::A%>(perm.{core::Iterable::take}(i){(core::int) → core::Iterable<self::perms::A%>}); |
| #t10.{core::List::add}{Invariant}(x){(self::perms::A%) → void}; |
| #t10.{core::List::addAll}{Invariant}(perm.{core::Iterable::skip}(i){(core::int) → core::Iterable<self::perms::A%>}){(core::Iterable<self::perms::A%>) → void}; |
| } =>#t10){(core::List<self::perms::A%>) → void}; |
| } =>#t9; |
| break #L2; |
| } |
| } |
| } |
| } =>#t5; |
| static method equals<A extends core::Object? = dynamic>(core::List<self::equals::A%> a, core::List<self::equals::A%> b) → core::bool |
| return block { |
| core::bool #t11; |
| final synthesized(core::List<self::equals::A%>, core::List<self::equals::A%>) #0#0 = (a, b); |
| synthesized core::bool #0#4; |
| synthesized core::bool #0#4#isSet = false; |
| synthesized core::int #0#2; |
| synthesized core::bool #0#2#isSet = false; |
| synthesized core::List<self::equals::A%> #0#1; |
| synthesized core::bool #0#1#isSet = false; |
| synthesized core::bool #0#7; |
| synthesized core::bool #0#7#isSet = false; |
| synthesized core::int #0#6; |
| synthesized core::bool #0#6#isSet = false; |
| synthesized core::List<self::equals::A%> #0#5; |
| synthesized core::bool #0#5#isSet = false; |
| synthesized core::bool #0#9; |
| synthesized core::bool #0#9#isSet = false; |
| synthesized core::bool #0#11; |
| synthesized core::bool #0#11#isSet = false; |
| #L3: |
| { |
| { |
| if((#0#4#isSet ?{core::bool} #0#4{core::bool} : let final dynamic #t12 = #0#4#isSet = true in #0#4 = (#0#2#isSet ?{core::int} #0#2{core::int} : let final dynamic #t13 = #0#2#isSet = true in #0#2 = (#0#1#isSet ?{core::List<self::equals::A%>} #0#1{core::List<self::equals::A%>} : let final dynamic #t14 = #0#1#isSet = true in #0#1 = #0#0.$1{core::List<self::equals::A%>}).{core::List::length}{core::int}).{core::num::<=}(#C1){(core::num) → core::bool}) && (#0#7#isSet ?{core::bool} #0#7{core::bool} : let final dynamic #t15 = #0#7#isSet = true in #0#7 = (#0#6#isSet ?{core::int} #0#6{core::int} : let final dynamic #t16 = #0#6#isSet = true in #0#6 = (#0#5#isSet ?{core::List<self::equals::A%>} #0#5{core::List<self::equals::A%>} : let final dynamic #t17 = #0#5#isSet = true in #0#5 = #0#0.$2{core::List<self::equals::A%>}).{core::List::length}{core::int}).{core::num::<=}(#C1){(core::num) → core::bool})) { |
| #t11 = true; |
| break #L3; |
| } |
| } |
| { |
| if((#0#9#isSet ?{core::bool} #0#9{core::bool} : let final dynamic #t18 = #0#9#isSet = true in #0#9 = (#0#2#isSet ?{core::int} #0#2{core::int} : let final dynamic #t19 = #0#2#isSet = true in #0#2 = (#0#1#isSet ?{core::List<self::equals::A%>} #0#1{core::List<self::equals::A%>} : let final dynamic #t20 = #0#1#isSet = true in #0#1 = #0#0.$1{core::List<self::equals::A%>}).{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) && (#0#7#isSet ?{core::bool} #0#7{core::bool} : let final dynamic #t21 = #0#7#isSet = true in #0#7 = (#0#6#isSet ?{core::int} #0#6{core::int} : let final dynamic #t22 = #0#6#isSet = true in #0#6 = (#0#5#isSet ?{core::List<self::equals::A%>} #0#5{core::List<self::equals::A%>} : let final dynamic #t23 = #0#5#isSet = true in #0#5 = #0#0.$2{core::List<self::equals::A%>}).{core::List::length}{core::int}).{core::num::<=}(#C1){(core::num) → core::bool})) { |
| #t11 = false; |
| break #L3; |
| } |
| } |
| { |
| if((#0#4#isSet ?{core::bool} #0#4{core::bool} : let final dynamic #t24 = #0#4#isSet = true in #0#4 = (#0#2#isSet ?{core::int} #0#2{core::int} : let final dynamic #t25 = #0#2#isSet = true in #0#2 = (#0#1#isSet ?{core::List<self::equals::A%>} #0#1{core::List<self::equals::A%>} : let final dynamic #t26 = #0#1#isSet = true in #0#1 = #0#0.$1{core::List<self::equals::A%>}).{core::List::length}{core::int}).{core::num::<=}(#C1){(core::num) → core::bool}) && (#0#11#isSet ?{core::bool} #0#11{core::bool} : let final dynamic #t27 = #0#11#isSet = true in #0#11 = (#0#6#isSet ?{core::int} #0#6{core::int} : let final dynamic #t28 = #0#6#isSet = true in #0#6 = (#0#5#isSet ?{core::List<self::equals::A%>} #0#5{core::List<self::equals::A%>} : let final dynamic #t29 = #0#5#isSet = true in #0#5 = #0#0.$2{core::List<self::equals::A%>}).{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool})) { |
| #t11 = false; |
| break #L3; |
| } |
| } |
| { |
| hoisted self::equals::A% l; |
| hoisted core::List<self::equals::A%> ls; |
| hoisted self::equals::A% r; |
| hoisted core::List<self::equals::A%> rs; |
| if((#0#9#isSet ?{core::bool} #0#9{core::bool} : let final dynamic #t30 = #0#9#isSet = true in #0#9 = (#0#2#isSet ?{core::int} #0#2{core::int} : let final dynamic #t31 = #0#2#isSet = true in #0#2 = (#0#1#isSet ?{core::List<self::equals::A%>} #0#1{core::List<self::equals::A%>} : let final dynamic #t32 = #0#1#isSet = true in #0#1 = #0#0.$1{core::List<self::equals::A%>}).{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) && (let final dynamic #t33 = l = (#0#1#isSet ?{core::List<self::equals::A%>} #0#1{core::List<self::equals::A%>} : let final dynamic #t34 = #0#1#isSet = true in #0#1 = #0#0.$1{core::List<self::equals::A%>}).{core::List::[]}(0){(core::int) → self::equals::A%} in true) && (let final dynamic #t35 = ls = (#0#1#isSet ?{core::List<self::equals::A%>} #0#1{core::List<self::equals::A%>} : let final dynamic #t36 = #0#1#isSet = true in #0#1 = #0#0.$1{core::List<self::equals::A%>}).{core::List::sublist}(1){(core::int, [core::int?]) → core::List<self::equals::A%>} in true) && (#0#11#isSet ?{core::bool} #0#11{core::bool} : let final dynamic #t37 = #0#11#isSet = true in #0#11 = (#0#6#isSet ?{core::int} #0#6{core::int} : let final dynamic #t38 = #0#6#isSet = true in #0#6 = (#0#5#isSet ?{core::List<self::equals::A%>} #0#5{core::List<self::equals::A%>} : let final dynamic #t39 = #0#5#isSet = true in #0#5 = #0#0.$2{core::List<self::equals::A%>}).{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool})) { |
| r = (#0#5#isSet ?{core::List<self::equals::A%>} #0#5{core::List<self::equals::A%>} : let final dynamic #t40 = #0#5#isSet = true in #0#5 = #0#0.$2{core::List<self::equals::A%>}).{core::List::[]}(0){(core::int) → self::equals::A%}; |
| rs = (#0#5#isSet ?{core::List<self::equals::A%>} #0#5{core::List<self::equals::A%>} : let final dynamic #t41 = #0#5#isSet = true in #0#5 = #0#0.$2{core::List<self::equals::A%>}).{core::List::sublist}(1){(core::int, [core::int?]) → core::List<self::equals::A%>}; |
| #t11 = l =={core::Object::==}{(core::Object) → core::bool} r && self::equals<self::equals::A%>(ls, rs); |
| break #L3; |
| } |
| } |
| } |
| } =>#t11; |
| |
| constants { |
| #C1 = 0 |
| #C2 = 1 |
| } |