/*
 * 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 the return statement returns a value received after
 * evaluating the return expression and if this evaluation results in a runtime
 * exception the control is transferred to the appropriate handler.
 *
 * @author vasya
 */
import '../../../Utils/expect.dart';

foo(x, y) {
  return (x + y);
}

bar(var x) {
  return x.run();
}

class A {
  run() {
    throw 1;
  }
}

main() {
  Expect.equals(3, foo(1, 2));
  Expect.equals("foobar", foo("foo", "bar"));

  try {
    Expect.equals(100, bar(new A())); // can't be true, can it?
    Expect.fail("Exception expected when evaluating a return statement!");
  } on int catch (ok) {}
}
