blob: f595151ea66db5f2aaefe602e9139f82ddc7328b [file] [log] [blame]
// Copyright (c) 2011, 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.
// This test ensures that the finally block executes correctly when
// there are throw, break and return statements in the finally block.
// @dart = 2.9
import "package:expect/expect.dart";
class Hello {
static var sum;
static foo() {
sum = 0;
try {
sum += 1;
return 'hi';
} finally {
sum += 1;
throw 'ball';
sum += 1;
}
}
static foo1() {
bool loop = true;
sum = 0;
L:
while (loop) {
try {
sum += 1;
return 'hi';
} finally {
sum += 1;
break L;
sum += 1;
}
}
}
static foo2() {
bool loop = true;
sum = 0;
try {
sum += 1;
return 'hi';
} finally {
sum += 1;
return 10;
sum += 1;
}
}
static foo3() {
sum = 0;
try {
sum += 1;
return 'hi';
} finally {
sum += 1;
return 10;
sum += 1;
}
}
static void main() {
foo1();
Expect.equals(2, sum);
foo2();
Expect.equals(2, sum);
foo3();
Expect.equals(2, sum);
try {
foo();
} catch (e) {}
Expect.equals(2, sum);
}
}
main() {
Hello.main();
}