Index: pkg/kernel/testcases/closures/closure_types.dart |
diff --git a/pkg/kernel/testcases/closures/closure_types.dart b/pkg/kernel/testcases/closures/closure_types.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..86fc3e08e20f3b8ec1d2c883cdce060501ce35ab |
--- /dev/null |
+++ b/pkg/kernel/testcases/closures/closure_types.dart |
@@ -0,0 +1,55 @@ |
+// 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.md file. |
+// |
+// This tests checks that the runtime types of converted closures are asessed |
+// correctly in is-tests. |
+ |
+class C<T> { |
+ void getf() { |
+ T fn(T x) { |
+ return x; |
+ } |
+ |
+ ; |
+ return fn; |
+ } |
+} |
+ |
+typedef void ct(int x); |
+ |
+void test_c() { |
+ var x = new C<int>().getf(); |
+ assert(x is ct); |
+ |
+ var y = new C<String>().getf(); |
+ assert(y is! ct); |
+} |
+ |
+class D<T> { |
+ void getf<S>() { |
+ T fn(S y) { |
+ return null; |
+ } |
+ |
+ return fn; |
+ } |
+} |
+ |
+typedef String dt(int x); |
+ |
+void test_d() { |
+ var x = new D<String>().getf<int>(); |
+ assert(x is dt); |
+ |
+ var y = new D<int>().getf<int>(); |
+ assert(y is! dt); |
+ |
+ var z = new D<int>().getf<String>(); |
+ assert(z is! dt); |
+} |
+ |
+main() { |
+ test_c(); |
+ test_d(); |
+} |