// Copyright (c) 2011, 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 that if, while etc create an implicit scope if the body
// is not a compound statement.

class ImplicitScopeTest {
  static bool alwaysTrue() {
    return 1 + 1 == 2;
  }
  static testMain() {
    var a = "foo";
    var b;
    if (alwaysTrue()) var a = "bar"; else var b = a;
    Expect.equals("foo", a);
    Expect.equals(null, b);

    while (!alwaysTrue()) var a = "bar", b = "baz";
    Expect.equals("foo", a);
    Expect.equals(null, b);

    for (int i = 0; i < 10; i++) var a = "bar", b = "baz";
    Expect.equals("foo", a);
    Expect.equals(null, b);

    do var a = "bar", b = "baz"; while("black" == "white");
    Expect.equals("foo", a);
    Expect.equals(null, b);
  }
}

main() {
  ImplicitScopeTest.testMain();
}
