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

static method main() → void {
  core::List<core::String> whereWasI = core::_GrowableList::•<core::String>(0);
  core::int outer = 1;
  core::int inner = 0;
  #L1:
  switch(outer) {
    #L2:
    case #C1:
      {
        whereWasI.{core::List::add}("outer 0"){(core::String) → void};
        break #L1;
      }
    #L3:
    case #C2:
      {
        (() → Null {
          switch(inner) {
            #L4:
            case #C1:
              {
                whereWasI.{core::List::add}("inner 0"){(core::String) → void};
                continue #L5;
              }
            #L5:
            case #C2:
              {
                whereWasI.{core::List::add}("inner 1"){(core::String) → void};
              }
          }
        })(){() → Null};
      }
  }
  if(!(whereWasI.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 2) || !(whereWasI.{core::List::[]}(0){(core::int) → core::String} =={core::String::==}{(core::Object) → core::bool} "inner 0") || !(whereWasI.{core::List::[]}(1){(core::int) → core::String} =={core::String::==}{(core::Object) → core::bool} "inner 1")) {
    throw "Unexpected path.";
  }
  core::print(whereWasI);
}

constants  {
  #C1 = 0
  #C2 = 1
}
