/*
 * Copyright (c) 2011, 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.
 */
/**
 * @assertion The type parameters of a generic G are in scope in the bounds of
 * all of the type parameters of G. The type parameters of a generic class
 * declaration G are also in scope in the extends and implements clauses of G
 * (if these exist) and in the body of G.
 * @description Checks that type parameters are in scope in the extends and
 * implements clauses of G (if G is a generic class declaration).
 * @Issue 29388
 * @author iefremov
 */

class C<T, U> {}

class A<N, S, U> extends C<S, U> implements I<S, U, N> {}

abstract class J<U, V> {}

abstract class I<X, Y, Z> extends J<Y, Z> {}

main() {
  new A<num, double, A>();
}
