blob: 7d4f6dc9bf91a848092ed1b88c9068d9c5282a56 [file] [log] [blame]
// Copyright (c) 2021, 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 These grammar changes allows type parameters without following
/// parenthesized arguments in places where we previously did not allow them.
/// For example, this means that <typeArguments> becomes a selector by itself,
/// not just followed by arguments.
//
// It applies to instance methods as well as local, static and top-level
// function declarations. For instance methods, it applies to references of the
// form
//
// instanceMethod<int> (with implicit this),
// object.instanceMethod<int> (including this) and super.instanceMethod<int>.
///
/// @description Checks tear-off of generic static method
/// @author sgrekhov@unipro.ru
// SharedOptions=--enable-experiment=constructor-tearoffs
import "../../Utils/expect.dart";
class C {
static T staticMethod<T>(T t) => t;
}
main() {
var x = C.staticMethod<int>;
Expect.equals(42, x(42));
dynamic d1 = -42;
Expect.isTrue(x(d1) is int);
Expect.isFalse(x(d1) is double); // to check that returned type is not dynamic
dynamic d2 = 3.14;
Expect.throws(() {x(d2);});
}