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) {
    #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
}
