// Copyright (c) 2014, 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.
// VMOptions=--optimization-counter-threshold=100 --no-background-compilation
// VMOptions=--optimization-counter-threshold=100 --no-background-compilation --no-use-field-guards

// @dart = 2.9

// Test lazy deoptimization at type checks with deferred loading.

import "package:expect/expect.dart";
import "cha_deopt2_lib.dart";
import "cha_deopt2_deferred_lib.dart" deferred as d;

var loaded = false;

main() {
  for (var i = 0; i < 2000; i++) bla();
  Expect.equals(1, bla());
  d.loadLibrary().then((_) {
    loaded = true;
    Expect.equals(1, bla());
  });
}

make_array() {
  try {
    if (loaded) {
      return [new A(), new B(), new C(), new D(), new E(), d.make_u()];
    } else {
      return [new A(), new B(), new C(), new D(), new E(), new T()];
    }
  } catch (e) {}
}

bla() {
  var count = 0;
  for (var x in make_array()) {
    if (x is T) count++;
  }
  return count;
}
