// Copyright (c) 2016, 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 Evaluation of an assignment a of the form v = e proceeds as
/// follows:
/// Let d be the innermost declaration whose name is v or v =, if it exists.
/// If d is the declaration of a local variable, ...
/// If d is the declaration of a library variable, top level getter or top level
/// setter, ...
/// Otherwise, if d is the declaration of a static variable, static getter or
/// static setter in class C, ...
/// Otherwise, If a occurs inside a top level or static function (be it function,
/// method, getter, or setter) or variable initializer, evaluation of a causes e
/// to be evaluated, after which a NoSuchMethodError is thrown.
/// @description Checks that if an assignment a is inside a top level function
/// then evaluation of a causes e to be evaluated, after which a
/// NoSuchMethodError is thrown.
/// @author sgrekhov@unipro.ru


import '../../../Utils/expect.dart';

bool evaluated = false;

int e() {
  evaluated = true;
  return 0;
}

void f() {
  dynamic x = new Object();
  Expect.throws(() {x.v = e();}, (e) => e is NoSuchMethodError);
}

main() {
  f();
  Expect.isTrue(evaluated);
}
