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