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

import "package:expect/expect.dart";

// Test to make sure the bailout environment in dart2js is correct.

var global;

class A {
  var array;

  initArray() {
    return global[0] == null ? [null] : new Map();
  }

  bar() {
    array = initArray();
    do {
      var element = array[0]; // bailout here
      if (element is Map) continue;
      if (element == null) break;
    } while (true);
    return global[0]; // bailout here
  }

  baz() {
    do {
      var element = bar();
      if (element == null) return global[0]; // bailout here
      if (element is Map) continue;
      if (element is num) break;
    } while (true);
    return global[0]; // bailout here
  }
}

void main() {
  global = [1];
  for (int i = 0; i < 2; i++) {
    Expect.equals(1, new A().baz());
    Expect.equals(1, new A().bar());
  }
  global = new Map();
  for (int i = 0; i < 2; i++) {
    Expect.equals(null, new A().baz());
    Expect.equals(null, new A().bar());
  }

  global[0] = 42;
  for (int i = 0; i < 2; i++) {
    Expect.equals(42, new A().baz());
    Expect.equals(42, new A().bar());
  }
}
