// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// Test nested switch statement using labels.

// VMOptions=
// VMOptions=--force-switch-dispatch-type=0
// VMOptions=--force-switch-dispatch-type=1
// VMOptions=--force-switch-dispatch-type=2

library nested_switch_label;

import "package:expect/expect.dart";

void main() {
  doSwitch(0, ['0', '2:0', '1', 'default']);
  doSwitch(2, ['2:2', '2:1', '2', '1', 'default']);
}

void doSwitch(int target, List expect) {
  List list = [];
  switch (target) {
    outer0:
    case 0:
      list.add('0');
      continue outer2;
    outer1:
    case 1:
      list.add('1');
      continue outerDefault;
    outer2:
    case 2:
      switch (target) {
        inner0:
        case 0:
          list.add('2:0');
          continue outer1;
        inner2:
        case 2:
          list.add('2:2');
          continue inner1;
        inner1:
        case 1:
          list.add('2:1');
      }
      list.add('2');
      continue outer1;
    outerDefault:
    default:
      list.add('default');
  }
  Expect.listEquals(expect, list);
}
