| 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);
|
| +}
|
|
|