| Index: tests/language/src/CyclicTypeVariableTest.dart
|
| diff --git a/tests/language/src/CyclicTypeVariableTest.dart b/tests/language/src/CyclicTypeVariableTest.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d842252707d6df59d25a3e4e89a94320d532e6b2
|
| --- /dev/null
|
| +++ b/tests/language/src/CyclicTypeVariableTest.dart
|
| @@ -0,0 +1,61 @@
|
| +// Copyright (c) 2012, 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.
|
| +
|
| +// Tests cyclic reference to type variables in type expressions
|
| +
|
| +class Base<T> {}
|
| +
|
| +class Derived extends Base<Derived> {} // legal
|
| +
|
| +typedef void funcType<T
|
| +extends T /// 01: static type error
|
| +>(T arg);
|
| +
|
| +class DerivedFunc extends Base<funcType<DerivedFunc>> { }
|
| +
|
| +
|
| +interface A<S
|
| +extends S /// 02: static type error
|
| +> {
|
| + S field;
|
| +}
|
| +
|
| +interface B<U extends Base<U>> { // legal
|
| + U field;
|
| +}
|
| +
|
| +class C1<V
|
| +extends V /// 03: static type error
|
| +> {
|
| + V field;
|
| +}
|
| +
|
| +class C2<V
|
| +extends V /// 04: static type error
|
| +> implements A<V> {
|
| + V field;
|
| +}
|
| +
|
| +class D1<W extends Base<W>> { // legal
|
| + W field;
|
| +}
|
| +
|
| +class D2<W extends Base<W>> implements B<W>{ // legal
|
| + W field;
|
| +}
|
| +
|
| +class E<X extends Base<funcType<X>>> { // legal
|
| +
|
| + X field;
|
| +}
|
| +
|
| +
|
| +main() {
|
| + new C1<int>();
|
| + new C2<int>();
|
| + new D1<Derived>();
|
| + new D2<Derived>();
|
| + new E<DerivedFunc>();
|
| + funcType<Object> val = null;
|
| +}
|
|
|