/*
 * Copyright (c) 2020, 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 The implicit tear-off conversion which converts uses of instances
 * of classes with call methods to the tear-off of their .call method when the
 * context type is a function type is performed when the context type is a
 * function type, or the nullable version of a context type.
 *
 * @description Check that the implicit tear-off conversion which converts uses
 * of instances of classes with call methods to the tear-off of their .call
 * method when the context type is a function type is performed when the context
 * type is a nullable version of a context type
 * @author sgrekhov@unipro.ru
 */
// Requirements=nnbd-strong
import "../../Utils/expect.dart";

typedef int Foo();

class C {
  int call() => 42;
}

main() {
  C c = new C();
  Function? f = c;
  if (f !=  null) {
    Expect.equals(42, f());
  }
  test(c);
}

test(Foo? f) {
  if (f != null) {
    Expect.equals(42, f());
  }
}
