blob: 875c5e6cefb29ad6688e13b9c45e8f659c1620da [file] [log] [blame]
// 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 static method 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;
}
class C {
static void f() {
dynamic x = new Object();
Expect.throws(() {x.v = e();}, (e) => e is NoSuchMethodError);
}
}
main() {
C.f();
Expect.isTrue(evaluated);
}