library;
import self as self;
import "dart:core" as core;
import "package:expect/expect.dart" as exp;

class ImplicitScopeTest extends core::Object {
  synthetic constructor •() → self::ImplicitScopeTest
    : super core::Object::•()
    ;
  static method alwaysTrue() → core::bool {
    return 1.{core::num::+}(1).{core::num::==}(2);
  }
  static method testMain() → dynamic {
    core::String a = "foo";
    dynamic b;
    if(self::ImplicitScopeTest::alwaysTrue()) {
      core::String a = "bar";
    }
    else {
      core::String b = a;
    }
    exp::Expect::equals("foo", a);
    exp::Expect::equals(null, b);
    while (!self::ImplicitScopeTest::alwaysTrue()) {
      core::String a = "bar";
      core::String b = "baz";
    }
    exp::Expect::equals("foo", a);
    exp::Expect::equals(null, b);
    for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
      core::String a = "bar";
      core::String b = "baz";
    }
    exp::Expect::equals("foo", a);
    exp::Expect::equals(null, b);
    do {
      core::String a = "bar";
      core::String b = "baz";
    }
    while ("black".{core::String::==}("white"))
    exp::Expect::equals("foo", a);
    exp::Expect::equals(null, b);
  }
}
static method main() → dynamic {
  self::ImplicitScopeTest::testMain();
}
