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

static method main() → void {
  core::List<core::String> whereWasI = <core::String>[];
  core::int outer = 1;
  core::int inner = 0;
  #L1:
  switch(outer) /* core::int */ {
    #L2:
    case #C1:
      {
        whereWasI.{core::List::add}("outer 0"){(core::String) → void};
        break #L1;
      }
    #L3:
    case #C2:
      {
        (() → Null {
          #L4:
          switch(inner) /* core::int */ {
            #L5:
            case #C1:
              {
                whereWasI.{core::List::add}("inner 0"){(core::String) → void};
                continue #L6;
              }
            #L6:
            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
}
