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

static method test(dynamic value) → dynamic {
  dynamic result;
  #L1:
  switch(value) {
    #L2:
    case 1:
      {
        result = 1;
        break #L1;
      }
    #L3:
    case 2:
      {
        result = 2;
        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 35);
      }
    #L4:
    case 3:
      {
        result = 3;
        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 36);
      }
    #L5:
    default:
      {
        result = 4;
      }
  }
  return result;
}
static method testEmptyCases(dynamic value) → dynamic {
  dynamic result;
  #L6:
  switch(value) {
    #L7:
    case 1:
    case 2:
      {
        result = 1;
        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 46);
      }
    #L8:
    case 3:
    case 4:
      {
        result = 2;
        break #L6;
      }
    #L9:
    case 5:
    case 6:
    default:
      {}
  }
  return result;
}
static method main() → dynamic {}
