// 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 and its SsaConstructionFieldTypes
// phase.

import "package:expect/expect.dart";

class A {
  var _field;
  final other;
  get field => _field;
  A(this._field) : other = null;
  A.fromOther(this.other) {
    _field = other.field;
  }
}

class B {
  var a;
  B() {
    try {
      // Defeat inlining.
      // An inlined generative constructor call used to confuse
      // dart2js.
      a = new A(42);
    } catch (e) {
      rethrow;
    }
  }
}

var array = [new A(42), new B()];

main() {
  // Surround the call to [analyzeAfterB] by two [: new B() :] calls
  // to ensure the [B] constructor will be analyzed first.
  new B();
  var a = analyzeAfterB();
  new B();
  Expect.equals(42, a._field);
}

analyzeAfterB() {
  try {
    // Defeat inlining.
    return new A.fromOther(array[0]);
  } catch (e) {
    rethrow;
  }
}
