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

// Test to make sure the do/while loop exit condition is generated.

var global;

class A {
  var array;

  initArray() {
    if (global[0] == null) {
      return [2];
    } else {
      var map = new Map();
      map[0] = 2;
      return map;
    }
  }

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


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

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