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

/// @assertion The formal parameter list of a function introduces a new scope
/// known as the function's formal parameter scope. The formal parameter scope
/// of a function f is enclosed in the scope where f is declared. Every formal
/// parameter introduces a local variable into the formal parameter scope.
/// The body of a function introduces a new scope known as the function's body
/// scope. The body scope of a function f is enclosed in the scope introduced by
/// the formal parameter scope of f.
/// @description Trivially checks that the function scopes are indeed nested
/// in the described order.
/// @author rodionov

import "../../../Utils/expect.dart";


class C {
  static const foo = 1;

  void test() {
    f(var foo) {
      Expect.equals(2, foo);
    }
    f(foo + 1);

    g([var foo = foo + 10]) {
      Expect.equals(11, foo);
    }
    g();

    h({var foo: foo + 10}) {
      Expect.equals(11, foo);
    }
    h();
  }
}

void main() {
  new C().test();
}
