Index: pkg/kernel/testcases/closures/type_variables.dart |
diff --git a/pkg/kernel/testcases/closures/type_variables.dart b/pkg/kernel/testcases/closures/type_variables.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cdfd4c21e86ffed09fe2b9a57a54bad23e7bb2d5 |
--- /dev/null |
+++ b/pkg/kernel/testcases/closures/type_variables.dart |
@@ -0,0 +1,39 @@ |
+// Copyright (c) 2016, 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. |
+ |
+class C<T, S> { |
+ foo(S s) => (T x) { |
+ T y = x; |
+ Object z = y; |
+ C<T, S> self = this; |
+ return z as T; |
+ }; |
+ |
+ bar() { |
+ C<T, S> self = this; |
+ } |
+ |
+ baz() { |
+ return () => () => new C<T, S>(); |
+ } |
+ |
+ factory C() { |
+ local() { |
+ C<T, S> self = new C<T, S>.internal(); |
+ return self; |
+ } |
+ return local(); |
+ } |
+ C.internal(); |
+} |
+ |
+main(arguments) { |
+ print(new C<String, String>().foo(null)(arguments.first)); |
+ dynamic c = new C<int, int>().baz()()(); |
+ if (c is! C<int, int>) throw "$c fails type test 'is C<int, int>'"; |
+ if (c is C<String, String>) { |
+ throw "$c passes type test 'is C<String, String>'"; |
+ } |
+ print(c); |
+} |