// 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";

class A {
  var field;
  A(this.field);
}

dynamic c = () => new List(42)[0];

main() {
  bar();
  // Defeat type inferencing.
  new A(c());
  doIt();
  bar();
}

@pragma('vm:never-inline')
@pragma('dart2js:noInline')
doIt() {
  () => 42;
  var c = new A(null);
  Expect.throwsNoSuchMethodError(() => c.field + 42);
}

@pragma('vm:never-inline')
@pragma('dart2js:noInline')
bar() {
  () => 42;
  return inlineLevel1();
}

inlineLevel1() {
  return inlineLevel2();
}

inlineLevel2() {
  return inlineLevel3();
}

inlineLevel3() {
  return inlineLevel4();
}

inlineLevel4() {
  return new A(42);
}
