// Copyright (c) 2021, 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 Effectively, each super parameters, super.p:
/// ...
/// Implicitly adds that variable as an implicit argument to the
/// super-constructor invocation.
///
/// @description Check that super parameter is implicitly added to
/// super-constructor invocation
/// @author sgrekhov@unipro.ru

// SharedOptions=--enable-experiment=super-parameters

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

class S {
  int s1, s2;
  String log;
  S(int x, {int p = 0}) : s1 = x, s2 = p, log = "S";
  S.n(int x, {int p = 0}) : s1 = x, s2 = p, log = "S.n";
}

class C extends S {
  int c;
  C(this.c, super.x, int y);
  C.n(this.c, super.x, int y, {super.p}) : super.n();
}

main() {
  var c1 = C(1, 2, 3);
  Expect.equals("S", c1.log);
  Expect.equals(1, c1.s1);
  Expect.equals(0, c1.s2);

  var c2 = C.n(1, 2, 3, p: 4);
  Expect.equals("S.n", c2.log);
  Expect.equals(1, c2.s1);
  Expect.equals(4, c2.s2);
}
