library;
import self as self;
import "dart:core" as core;
import "dart:collection" as col;

static method test1(dynamic x, dynamic another) → core::Iterable<dynamic> {
  return block {
    final core::Set<dynamic> #t1 = new col::_Set::•<dynamic>();
    hoisted core::int i;
    hoisted core::int n;
    {
      final synthesized dynamic #0#0 = x as{TypeError,ForDynamic} core::List<core::int>;
      synthesized dynamic #0#6;
      synthesized core::bool #0#6#isSet = false;
      synthesized dynamic #0#7;
      synthesized core::bool #0#7#isSet = false;
      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#isSet ?{dynamic} #0#6{dynamic} : let final core::bool #t2 = #0#6#isSet = true in #0#6 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) is core::int && (let final core::int #t3 = i = (#0#6#isSet ?{dynamic} #0#6{dynamic} : let final core::bool #t4 = #0#6#isSet = true in #0#6 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::int in true)) && ((#0#7#isSet ?{dynamic} #0#7{dynamic} : let final core::bool #t5 = #0#7#isSet = true in #0#7 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) is core::int && (let final core::int #t6 = n = (#0#7#isSet ?{dynamic} #0#7{dynamic} : let final core::bool #t7 = #0#7#isSet = true in #0#7 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) as{Unchecked} core::int in true))))
        throw{for-error-handling} new core::StateError::•("Pattern matching error");
    }
    final core::int #t8 = i;
    final core::int #t9 = n;
    for (core::int i = #t8, core::int n = #t9; i.{core::num::<}(n){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
      synthesized core::Iterator<dynamic> :sync-for-iterator = (another as{TypeError,ForDynamic} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final dynamic #t10 = :sync-for-iterator.{core::Iterator::current}{dynamic};
        {
          final dynamic #t11 = #t10 as{TypeError} dynamic;
          #t1.{core::Set::add}{Invariant}(#t11){(dynamic) → core::bool};
        }
      }
    }
  } =>#t1;
}
static method test2(dynamic x, dynamic another) → core::Iterable<dynamic> {
  return block {
    final core::Set<dynamic> #t12 = new col::_Set::•<dynamic>();
    {
      final synthesized dynamic #0#0 = x;
      if(#0#0 is core::String) {
        synthesized core::Iterator<invalid-type> :sync-for-iterator = another.{core::Iterable::iterator}{core::Iterator<invalid-type>};
        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
          final dynamic #t13 = :sync-for-iterator.{core::Iterator::current}{invalid-type};
          {
            final dynamic #t14 = #t13 as{TypeError} dynamic;
            #t12.{core::Set::add}{Invariant}(#t14){(dynamic) → core::bool};
          }
        }
      }
    }
  } =>#t12;
}
static method test3(dynamic x, dynamic another) → core::Iterable<dynamic> {
  return block {
    final core::Set<dynamic> #t15 = new col::_Set::•<dynamic>();
    {
      synthesized core::Iterator<dynamic> :sync-for-iterator = (x as{TypeError,ForDynamic} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final dynamic #t16 = :sync-for-iterator.{core::Iterator::current}{dynamic};
        {
          {
            final synthesized dynamic #0#0 = #t16;
            if(!(#0#0 is core::List<dynamic> && #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2 && #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} is core::int))
              throw{for-error-handling} new core::StateError::•("Pattern matching error");
          }
          {
            synthesized core::Iterator<dynamic> :sync-for-iterator = (another as{TypeError,ForDynamic} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
              final dynamic #t17 = :sync-for-iterator.{core::Iterator::current}{dynamic};
              {
                final dynamic #t18 = #t17 as{TypeError} dynamic;
                #t15.{core::Set::add}{Invariant}(#t18){(dynamic) → core::bool};
              }
            }
          }
        }
      }
    }
  } =>#t15;
}
static method main() → dynamic {
  self::expectSetEquals(self::test1(core::_GrowableList::_literal2<core::int>(0, 2), block {
    final core::Set<core::int> #t19 = new col::_Set::•<core::int>();
    #t19.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
    #t19.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
    #t19.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
  } =>#t19) as core::Set<dynamic>, block {
    final core::Set<dynamic> #t20 = new col::_Set::•<dynamic>();
    #t20.{core::Set::add}{Invariant}(1){(dynamic) → core::bool};
    #t20.{core::Set::add}{Invariant}(2){(dynamic) → core::bool};
    #t20.{core::Set::add}{Invariant}(3){(dynamic) → core::bool};
  } =>#t20);
  self::expectSetEquals(self::test2(core::_GrowableList::_literal2<core::int>(0, 0), block {
    final core::Set<core::int> #t21 = new col::_Set::•<core::int>();
    #t21.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
    #t21.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
    #t21.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
  } =>#t21) as core::Set<dynamic>, block {
    final core::Set<dynamic> #t22 = new col::_Set::•<dynamic>();
  } =>#t22);
  self::expectThrows(() → void => self::test1(core::_GrowableList::•<dynamic>(0), <dynamic, dynamic>{}));
  self::expectSetEquals(self::test2("foo", block {
    final core::Set<core::int> #t23 = new col::_Set::•<core::int>();
    #t23.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
    #t23.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
    #t23.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
  } =>#t23) as core::Set<dynamic>, block {
    final core::Set<dynamic> #t24 = new col::_Set::•<dynamic>();
    #t24.{core::Set::add}{Invariant}(1){(dynamic) → core::bool};
    #t24.{core::Set::add}{Invariant}(2){(dynamic) → core::bool};
    #t24.{core::Set::add}{Invariant}(3){(dynamic) → core::bool};
  } =>#t24);
  self::expectSetEquals(self::test2(false, block {
    final core::Set<core::int> #t25 = new col::_Set::•<core::int>();
    #t25.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
    #t25.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
    #t25.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
  } =>#t25) as core::Set<dynamic>, block {
    final core::Set<dynamic> #t26 = new col::_Set::•<dynamic>();
  } =>#t26);
  self::expectSetEquals(self::test3(core::_GrowableList::_literal2<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(0), core::_GrowableList::_literal1<core::int>(1)), block {
    final core::Set<core::int> #t27 = new col::_Set::•<core::int>();
    #t27.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
    #t27.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
    #t27.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
  } =>#t27) as core::Set<dynamic>, block {
    final core::Set<dynamic> #t28 = new col::_Set::•<dynamic>();
    #t28.{core::Set::add}{Invariant}(1){(dynamic) → core::bool};
    #t28.{core::Set::add}{Invariant}(2){(dynamic) → core::bool};
    #t28.{core::Set::add}{Invariant}(3){(dynamic) → core::bool};
  } =>#t28);
  self::expectThrows(() → void => self::test3(core::_GrowableList::_literal1<Null>(null), <dynamic, dynamic>{}));
}
static method expectSetEquals(core::Set<dynamic> x, core::Set<dynamic> y) → dynamic {
  if(!x.{core::Set::containsAll}(y){(core::Iterable<core::Object?>) → core::bool} || !y.{core::Set::containsAll}(x){(core::Iterable<core::Object?>) → core::bool}) {
    throw "Expected sets '${x}' and '${y}' to be equal.";
  }
}
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.";
  }
}

constants  {
  #C1 = 2
  #C2 = 1
}
