// Copyright (c) 2012, 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.
// Dart test for capturing.

// @dart = 2.9

import "package:expect/expect.dart";

// Regression test for issue 5991015.

class V {
  notCalled(Function x) {
    return x();
  }

  foofoo(x) {
    return x;
  }

  hoop(input, n) {
    while (n-- > 0) {
      Expect.equals(5, input);
      continue; // This continue statement must properly unchain the context.
      switch (input) {
        case 3:
          var values = foofoo;
          notCalled(() => values(input));
      }
    }
  }
}

main() {
  new V().hoop(5, 3);
}
