| // 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 Executing a return statement return e; proceeds as follows: |
| /// First the expression e is evaluated, producing an object o. Next: |
| /// • The current return value is set to o and the current exception and active |
| /// stack trace become undefined. |
| /// • Let c be the finally clause of the innermost enclosing try-finally |
| /// statement, if any. If c is defined, let h be the handler induced by c. If |
| /// h is defined, control is transferred to h. |
| /// • Otherwise execution of the current method terminates. |
| /// @description Checks that a finally statement is executed if the control |
| /// is transferred from a try block using a return statement. |
| /// @author iefremov |
| |
| import '../../../Utils/expect.dart'; |
| |
| foo() { |
| try { |
| return 1; |
| } finally { |
| return 2; |
| } |
| } |
| |
| main() { |
| Expect.equals(2, foo(), "A finally clause was not executed correctly!"); |
| } |