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

// @dart = 2.9

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);
}
