| // 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); |
| } |