// Copyright (c) 2012, 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 a parameter used in two different closures defined in a
// constructor initializer, is properly boxed.

import "package:expect/expect.dart";

class A {
  var f;
  var g;
  A(a)
      : f = (() => 42 + a),
        g = (() => ++a) {
    a = 4;
  }
}

class B extends A {
  B() : super(42);
}

class C extends A {
  var h;
  C(a)
      : h = (() => ++a),
        super(42);
}

main() {
  dynamic a = new A(1);
  Expect.equals(46, a.f());
  Expect.equals(5, a.g());
  Expect.equals(47, a.f());

  a = new B();
  Expect.equals(46, a.f());
  Expect.equals(5, a.g());
  Expect.equals(47, a.f());

  a = new C(0);
  Expect.equals(46, a.f());
  Expect.equals(5, a.g());
  Expect.equals(47, a.f());
  Expect.equals(1, a.h());
  Expect.equals(2, a.h());
  Expect.equals(47, a.f());
  Expect.equals(6, a.g());
  Expect.equals(48, a.f());
}
