// Copyright (c) 2015, 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 = 2.9

// Regression test for issue 22822. The assignment in the finally block
// used to crash because it was executed at context level 1 instead of
// context level 2.

import 'package:expect/expect.dart';

test(b) {
  try {
    for (int i = 0; i < 10; i++) {
      // Closurizing i and b, thus the return statement
      // executes at context level 2, and the code in
      // the finally block runs at context level 1.
      return () => i + b;
    }
  } finally {
    b = 10;
  }
}

main() {
  var c = test(0);
  Expect.equals(10, c());
}
