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::int #t1;
    final synthesized core::List<core::int> #0#0 = list;
    #L1:
    {
      {
        if(true) {
          #t1 = 1;
          break #L1;
        }
      }
      throw{for-error-handling} new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable type.");
    }
  }
  {
    core::int #t2;
    final synthesized core::List<core::int> #1#0 = list;
    synthesized core::int #1#1;
    synthesized core::bool #1#1#isSet = false;
    #L2:
    {
      {
        if((#1#1#isSet ?{core::int} #1#1{core::int} : let final core::bool* #t3 = #1#1#isSet = true in #1#1 = #1#0.{core::List::length}{core::int}).{core::num::<=}(#C1){(core::num) → core::bool}) {
          #t2 = 1;
          break #L2;
        }
      }
      {
        if((#1#1#isSet ?{core::int} #1#1{core::int} : let final core::bool* #t4 = #1#1#isSet = true in #1#1 = #1#0.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) {
          #t2 = 2;
          break #L2;
        }
      }
      throw{for-error-handling} new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable type.");
    }
  }
  {
    core::int #t5;
    final synthesized core::List<core::int> #2#0 = list;
    synthesized core::int #2#1;
    synthesized core::bool #2#1#isSet = false;
    #L3:
    {
      {
        if((#2#1#isSet ?{core::int} #2#1{core::int} : let final core::bool* #t6 = #2#1#isSet = true in #2#1 = #2#0.{core::List::length}{core::int}).{core::num::<=}(#C1){(core::num) → core::bool}) {
          #t5 = 1;
          break #L3;
        }
      }
      {
        if((#2#1#isSet ?{core::int} #2#1{core::int} : let final core::bool* #t7 = #2#1#isSet = true in #2#1 = #2#0.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} #C2) {
          #t5 = 2;
          break #L3;
        }
      }
      {
        if((#2#1#isSet ?{core::int} #2#1{core::int} : let final core::bool* #t8 = #2#1#isSet = true in #2#1 = #2#0.{core::List::length}{core::int}).{core::num::>=}(#C3){(core::num) → core::bool}) {
          #t5 = 3;
          break #L3;
        }
      }
      throw{for-error-handling} new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable type.");
    }
  }
}

constants  {
  #C1 = 0
  #C2 = 1
  #C3 = 2
}
