| library; |
| import self as self; |
| import "dart:core" as core; |
| import "dart:_internal" as _in; |
| |
| static method main() → void { |
| core::List<core::int> list = core::_GrowableList::_literal3<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 core::bool* #t2 = #0#1#isSet = true in #0#1 = #0#0.{core::List::length}{core::int}).{core::num::<=}(#C1){(core::num) → core::bool}) { |
| #t1 = core::_GrowableList::•<core::List<self::subs::A%>>(0); |
| 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 core::bool* #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::_GrowableList::•<core::List<self::subs::A%>>(0); |
| { |
| synthesized core::Iterator<core::List<self::subs::A%>> :sync-for-iterator = self::subs<self::subs::A%>(xs).{core::Iterable::iterator}{core::Iterator<core::List<self::subs::A%>>}; |
| for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) { |
| core::List<self::subs::A%> ys = :sync-for-iterator.{core::Iterator::current}{core::List<self::subs::A%>}; |
| #t4.{core::List::addAll}{Invariant}(core::_GrowableList::_literal2<core::List<self::subs::A%>>(core::_GrowableList::_literal1<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}(core::_GrowableList::_literal1<self::subs::A%>(x)){(core::List<self::subs::A%>) → void}; |
| } =>#t4; |
| break #L1; |
| } |
| } |
| throw{for-error-handling} new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable type."); |
| } |
| } =>#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 core::bool* #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 core::bool* #t7 = #0#1#isSet = true in #0#1 = #0#0.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} #C2) { |
| #t5 = core::_GrowableList::_literal1<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 core::bool* #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::_GrowableList::•<core::List<self::perms::A%>>(0); |
| 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}) { |
| synthesized core::Iterator<core::List<self::perms::A%>> :sync-for-iterator = self::perms<self::perms::A%>(xs).{core::Iterable::iterator}{core::Iterator<core::List<self::perms::A%>>}; |
| for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) { |
| core::List<self::perms::A%> perm = :sync-for-iterator.{core::Iterator::current}{core::List<self::perms::A%>}; |
| #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; |
| } |
| } |
| throw{for-error-handling} new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable type."); |
| } |
| } =>#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 core::bool* #t12 = #0#4#isSet = true in #0#4 = (#0#2#isSet ?{core::int} #0#2{core::int} : let final core::bool* #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 core::bool* #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 core::bool* #t15 = #0#7#isSet = true in #0#7 = (#0#6#isSet ?{core::int} #0#6{core::int} : let final core::bool* #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 core::bool* #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 core::bool* #t18 = #0#9#isSet = true in #0#9 = (#0#2#isSet ?{core::int} #0#2{core::int} : let final core::bool* #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 core::bool* #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 core::bool* #t21 = #0#7#isSet = true in #0#7 = (#0#6#isSet ?{core::int} #0#6{core::int} : let final core::bool* #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 core::bool* #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 core::bool* #t24 = #0#4#isSet = true in #0#4 = (#0#2#isSet ?{core::int} #0#2{core::int} : let final core::bool* #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 core::bool* #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 core::bool* #t27 = #0#11#isSet = true in #0#11 = (#0#6#isSet ?{core::int} #0#6{core::int} : let final core::bool* #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 core::bool* #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 core::bool* #t30 = #0#9#isSet = true in #0#9 = (#0#2#isSet ?{core::int} #0#2{core::int} : let final core::bool* #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 core::bool* #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 self::equals::A% #t33 = l = (#0#1#isSet ?{core::List<self::equals::A%>} #0#1{core::List<self::equals::A%>} : let final core::bool* #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 core::List<self::equals::A%> #t35 = ls = (#0#1#isSet ?{core::List<self::equals::A%>} #0#1{core::List<self::equals::A%>} : let final core::bool* #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 core::bool* #t37 = #0#11#isSet = true in #0#11 = (#0#6#isSet ?{core::int} #0#6{core::int} : let final core::bool* #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 core::bool* #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 core::bool* #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 core::bool* #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; |
| } |
| } |
| throw{for-error-handling} new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable type."); |
| } |
| } =>#t11; |
| |
| constants { |
| #C1 = 0 |
| #C2 = 1 |
| } |