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

import 'package:expect/expect.dart';

final dynamic l = <dynamic>[A(), A1(), B()];

main() {
  // Switchable call site goes from UnlinkedCall -> Monomorphic.
  Expect.equals('C(42)', bar(0, 42));
  // Switchable call site goes from Monomorphic -> SingleTarget.
  Expect.equals('C(42)', bar(1, 42));
  // Switchable call site goes from SingleTarget -> Polymorphic.
  // It has to retain the fact that call site is dyn:*.
  Expect.throwsTypeError(() => bar(2, 'a'));
  Expect.equals('B(43)', bar(2, 42));
}

@pragma('vm:never-inline')
bar(int j, dynamic arg) => l[j].foo(arg);

class A {
  // This will not get a dyn:* forwarder because it's parameter type is
  // top-type.
  String foo(Object a) => 'C($a)';
}

class A1 extends A {
  // A different receiver cid but with same target (i.e. we do not override A).
}

class B {
  // This will get a dyn:* forwarder because it's parameter type is not
  // top-type (and neither covariant)
  String foo(int a) => 'B(${a + 1})';
}
