// 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 for dart2js to make sure the computed bailout environment is
// correct.

var global;

class A {
  var array;

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

void main() {
  var a = new A();
  a.array = [42];
  global = 42;

  for (int i = 0; i < 2; i++) {
    Expect.equals(42, a.foo());
  }

  a.array = new Map();
  a.array[0] = 42;
  for (int i = 0; i < 2; i++) {
    Expect.equals(42, a.foo());
  }
  global = null;
}
