// Copyright (c) 2014, 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 = 2.9

library test.local_function_is_static;

import 'dart:mirrors';
import 'package:expect/expect.dart';

topLevel() => 1;
topLevelLocal() => () => 2;

class C {
  static klass() => 3;
  static klassLocal() => () => 4;
  instance() => 5;
  instanceLocal() => () => 6;
}

main() {
  var f = topLevel;
  Expect.equals(1, f());
  Expect.isTrue((reflect(f) as ClosureMirror).function.isStatic);

  f = topLevelLocal();
  Expect.equals(2, f());
  Expect.isTrue((reflect(f) as ClosureMirror).function.isStatic);

  f = C.klass;
  Expect.equals(3, f());
  Expect.isTrue((reflect(f) as ClosureMirror).function.isStatic);

  f = C.klassLocal();
  Expect.equals(4, f());
  Expect.isTrue((reflect(f) as ClosureMirror).function.isStatic);

  f = new C().instance;
  Expect.equals(5, f());
  Expect.isFalse((reflect(f) as ClosureMirror).function.isStatic);

  f = new C().instanceLocal();
  Expect.equals(6, f());
  Expect.isFalse((reflect(f) as ClosureMirror).function.isStatic);
}
