blob: 57a3f6dabce175c0da15f15156afc8beec02acca [file] [log] [blame]
// Copyright (c) 2017, 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.
// VMOptions=--reify-generic-functions
import 'package:expect/expect.dart';
void foo(F f<F>(F f)) {}
B bar<B>(B g<F>(F f)) => null;
Function baz<B>() {
B foo<F>(F f) => null;
return foo;
}
class C<T> {
void foo(F f<F>(T t, F f)) => null;
B bar<B>(B g<F>(T t, F f)) => null;
Function baz<B>() {
B foo<F>(T t, F f) => null;
return foo;
}
}
main() {
Expect.equals("(<F>(F) => F) => void", foo.runtimeType.toString());
Expect.equals("<B>(<F>(F) => B) => B", bar.runtimeType.toString());
Expect.equals("<F>(F) => int", baz<int>().runtimeType.toString());
var c = new C<bool>();
Expect.equals("(<F>(bool, F) => F) => void", c.foo.runtimeType.toString());
Expect.equals("<B>(<F>(bool, F) => B) => B", c.bar.runtimeType.toString());
Expect.equals("<F>(bool, F) => int", c.baz<int>().runtimeType.toString());
}