library;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;

static method test1(core::List<dynamic> list) → core::String {
  return block {
    core::String #t1;
    final synthesized core::List<dynamic> #0#0 = list;
    #L1:
    {
      {
        hoisted core::List<core::int> r1;
        if(#0#0 is core::List<core::int> && #0#0{core::List<core::int>}.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool} && #C2 =={core::num::==}{(core::Object) → core::bool} #0#0{core::List<core::int>}.{core::List::[]}(0){(core::int) → core::int} && #C3 =={core::num::==}{(core::Object) → core::bool} #0#0{core::List<core::int>}.{core::List::[]}(1){(core::int) → core::int} && #C4 =={core::num::==}{(core::Object) → core::bool} #0#0{core::List<core::int>}.{core::List::[]}(2){(core::int) → core::int} && #C1 =={core::num::==}{(core::Object) → core::bool} #0#0{core::List<core::int>}.{core::List::[]}(3){(core::int) → core::int}) {
          r1 = #0#0{core::List<core::int>}.{core::List::sublist}(4){(core::int, [core::int?]) → core::List<core::int>};
          #t1 = r1.{core::Object::toString}(){() → core::String};
          break #L1;
        }
      }
      {
        if(true) {
          #t1 = "default";
          break #L1;
        }
      }
      throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable type.");
    }
  } =>#t1;
}
static method main() → dynamic {
  self::test1(<dynamic>[1, 2, 3, 4, 5, 6]);
}

constants  {
  #C1 = 4
  #C2 = 1
  #C3 = 2
  #C4 = 3
}
