// Copyright (c) 2018, 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

// Verify that prefix sharing optimization is taken into account when
// concatenating type arguments vectors.

import "package:expect/expect.dart";

class C0 {}

class C1 {}

class C2 {}

class C3 {}

class Wrong {}

void bar<T0, T1>() {
  void baz<T2, T3>() {
    Expect.equals(C0, T0);
    Expect.equals(C1, T1);
    Expect.equals(C2, T2);
    Expect.equals(C3, T3);
  }

  baz<C2, C3>();
}

class A<X, Y, Z> {
  void foo() {
    bar<X, Y>();
  }
}

void main() {
  new A<C0, C1, Wrong>().foo();
}
