blob: 4e1d5836fa3d2916a72e8a830f2cc27c2da22b00 [file] [log] [blame]
// 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.
// @dart = 2.9
// 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: compile-time error
>(T arg);
class DerivedFunc extends Base<funcType<DerivedFunc>> {}
abstract class A<
S
extends S //# 02: compile-time error
> {
S field;
}
abstract class B<U extends Base<U>> {
// legal
U field;
}
class C1<
V
extends V // //# 03: compile-time error
> {
V field;
}
class C2<
V
extends V // //# 04: compile-time 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;
}