// 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.
// Dart test program for testing invocation of implicit closures.
// VMOptions=
// VMOptions=--use_slow_path

// @dart = 2.9

import "package:expect/expect.dart";

class First {
  First() {}
  static int get a {
    return 10;
  }

  static var b;
  static int foo() {
    return 30;
  }
}

class StaticImplicitClosureTest {
  static void testMain() {
    Function func = () => 20;
    Expect.equals(10, First.a);
    First.b = First.a;
    Expect.equals(10, First.b);
    First.b = func;
    Expect.equals(20, First.b());
    Function fa = First.foo;
    Expect.equals(30, fa());
  }
}

main() {
  StaticImplicitClosureTest.testMain();
}
