// 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.
// Test that we invalidate parameter type optimization in the presence
// of optional parameters.

// @dart = 2.9

import "package:expect/expect.dart";

class A {
  void foo(bool firstInvocation, [a = 42, b = 'foo']) {
    if (firstInvocation) {
      Expect.isTrue(a is String);
      Expect.isTrue(b is int);
    } else {
      Expect.isTrue(a is int);
      Expect.isTrue(b is String);
    }
  }
}

test() {
  // This call to [A.foo] will be in the queue after [A.foo] has been
  // compiled with the optimistic type assumptions.
  new A().foo(false);
}

main() {
  test();
  // This call to [A.foo] will be the first in the queue, and dart2js
  // will optimize the method with these parameter types.
  new A().foo(true, 'bar', 42);
}
