| /* |
| * 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. |
| */ |
| /** |
| * @assertion Execution of a finally clause finally s of a try statement |
| * proceeds as follows: |
| * Let x be the current exception and let t be the active stack trace.Then |
| * the current exception and the active stack trace both become undefined. The |
| * statement s is executed. Then, if x is defined, it is rethrown as if by a |
| * rethrow statement enclosed in a catch clause of the form catch (vx, vt) where |
| * vx and vt are fresh variables bound to x and t respectively. |
| * @description Explicitly checks that if no matching catch clause was found for |
| * the current exception, control is transferred to the nearest dynamically |
| * enclosing exception handler. |
| * @author rodionov |
| */ |
| import '../../../Utils/expect.dart'; |
| |
| |
| void main() { |
| bool flag1 = false, flag2 = false; |
| |
| try { |
| try { |
| do { |
| try { |
| for (int i = 0; i < 10; i++) { |
| try { |
| throw new Exception("fail"); |
| } on int catch (e) { |
| } finally {} |
| } |
| } on String catch (s) {} |
| } while (false); |
| } finally { |
| flag1 = true; |
| } |
| } catch (ok) { |
| flag2 = true; |
| } |
| |
| Expect.isTrue(flag1); |
| Expect.isTrue(flag2); |
| } |