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

// Regression test for dart2js that used to optimistically infer the
// wrong types for fields because of generative constructors being
// inlined.

import "package:expect/expect.dart";
import "../compiler_annotations.dart";

class A {
  var foo;
  var bar;

  @DontInline()
  A() {
    // Currently defeat inlining by using a closure.
    bar = () => 42;
    foo = 54;
  }
  A.inline();
}

main() {
  // Make sure A's constructor is analyzed first by surrounding the
  // body by two allocations.
  new A();
  bar();
  new A();
}

class B {
  var bar;
  var closure;
  @DontInline()
  B() {
    // Currently defeat inlining by using a closure.
    closure = () => 42;
    bar = new A().foo;
  }
}

@DontInline()
bar() {
  // Make sure B's constructor is analyzed first by surrounding the
  // body by two allocations.
  new B();
  // Currently defeat inlining by using a closure.
  Expect.throwsNoSuchMethodError(() => new A.inline().foo + 42);
  codegenLast();
  new B();
}

@DontInline()
codegenLast() {
  // This assignment currently defeats simple type inference, but not
  // the optimistic inferrer.
  new A().foo = new B().bar;
  // Currently defeat inlining by using a closure.
  new B().closure = () => 42;
}
