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

// @dart = 2.9

import "package:expect/expect.dart";

int i = 0;

// Tests super calls and constructors.
main() {
  Sub sub = new Sub(1, 2);
  Expect.equals(1, sub.x);
  Expect.equals(2, sub.y);
  Expect.equals(3, sub.z);
  Expect.equals(1, sub.v);
  Expect.equals(2, sub.w);
  Expect.equals(3, sub.u);

  sub = new Sub.stat();
  Expect.equals(2, sub.x);
  Expect.equals(3, sub.y);
  Expect.equals(0, sub.v);
  Expect.equals(1, sub.w);
  Expect.equals(4, sub.z);
  Expect.equals(5, sub.u);
}

class Sup {
  var x, y, z;

  Sup(a, b)
      : this.x = a,
        this.y = b {
    z = a + b;
  }

  Sup.stat()
      : this.x = i++,
        this.y = i++ {
    z = i++;
  }
}

class Sub extends Sup {
  var u, v, w;

  Sub(a, b)
      : this.v = a,
        this.w = b,
        super(a, b) {
    u = a + b;
  }

  Sub.stat()
      : this.v = i++,
        this.w = i++,
        super.stat() {
    u = i++;
  }
}
