library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;

static method guard() → dynamic
  return true;
static method main() → dynamic {
  core::int a;
  {
    final synthesized dynamic #0#0 = core::_GrowableList::_literal1<core::int>(5);
    if(!(#0#0{core::List<core::int>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final core::int #t1 = a = #0#0{core::List<core::int>}.{core::List::[]}(0){(core::int) → core::int} in true)))
      throw new core::StateError::•("Pattern matching error");
  }
  core::int b;
  block {
    final synthesized dynamic #2#0 = block {
      final core::List<core::int> #t2 = core::_GrowableList::•<core::int>(0);
      {
        final synthesized core::int #1#0 = a;
        if(#1#0 =={core::num::==}{(core::Object) → core::bool} #C2 && self::guard() as{TypeError,ForNonNullableByDefault} core::bool)
          #t2.{core::List::add}{Invariant}(5){(core::int) → void};
      }
    } =>#t2;
    if(!(#2#0{core::List<core::int>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final core::int #t3 = b = #2#0{core::List<core::int>}.{core::List::[]}(0){(core::int) → core::int} in true)))
      throw new core::StateError::•("Pattern matching error");
  } =>#2#0;
  {
    final synthesized core::int #3#0 = a;
    if(#3#0 =={core::num::==}{(core::Object) → core::bool} #C2 && self::guard() as{TypeError,ForNonNullableByDefault} core::bool) {
      a = 6;
    }
  }
  core::int c = block {
    core::int #t4;
    final synthesized core::int #4#0 = a;
    #L1:
    {
      {
        core::int d;
        if(#4#0 is{ForNonNullableByDefault} core::int && (let final core::int #t5 = d = #4#0 in true) && self::guard() as{TypeError,ForNonNullableByDefault} core::bool) {
          #t4 = d;
          break #L1;
        }
      }
      {
        if(true) {
          #t4 = 0;
          break #L1;
        }
      }
      throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable type.");
    }
  } =>#t4;
  #L2:
  {
    final synthesized core::int #5#0 = b;
    {
      core::int e;
      if(#5#0 is{ForNonNullableByDefault} core::int && (let final core::int #t6 = e = #5#0 in true) && self::guard() as{TypeError,ForNonNullableByDefault} core::bool) {
        {
          core::print(a);
        }
      }
    }
  }
  core::Map<core::int, core::int> d = block {
    final core::Map<core::int, core::int> #t7 = <core::int, core::int>{};
    {
      final synthesized core::int #6#0 = a;
      if(#6#0 =={core::num::==}{(core::Object) → core::bool} #C2 && self::guard() as{TypeError,ForNonNullableByDefault} core::bool)
        #t7.{core::Map::[]=}{Invariant}(5, 6){(core::int, core::int) → void};
    }
  } =>#t7;
}

constants  {
  #C1 = 1
  #C2 = 5
}
