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

import "package:expect/expect.dart";

class A {
  var _x, _y;
  A(x, [y = 10]) : _x = x++, _y = y++ {
    // Check that value of modified constructor parameters
    // is remembered in the constructor body.
    Expect.equals(x, _x + 1);
    Expect.equals(y, _y + 1);
  }
}

class B extends A {
  var _a, _b;
  // The super call in the middle of the initializer list conceptually
  // forces two super call chains, one for initializer list and a second
  // one for the constructor bodies.
  B(a, b) : _a = a++, _b = b++, super(a + b++) {
    Expect.equals(a, _a + 1);
    Expect.equals(b, _b + 2);
    Expect.equals(a + (b - 2), _x - 1);
  }
}

main() {
  dynamic o = new B(3, 5);
  Expect.equals(3, o._a);
  Expect.equals(5, o._b);
  Expect.equals(10, o._x);
  Expect.equals(10, o._y);
  o = new A(3);
  Expect.equals(3, o._x);
  Expect.equals(10, o._y);
}
