| // 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 When inferring the super-constructor invocation, s, targeting the |
| /// super constructor D, we include the implicit super-parameters from the |
| /// constructor parameter list: |
| /// |
| /// The super-constructor invocation s infers a super-constructor invocation s’ |
| /// such that |
| /// ... |
| /// For each super parameter p in C, in source order, where p has parameter name |
| /// n, (inferred or declared) type T, associated super-constructor parameter q, |
| /// and where S is the type of the parameter q: |
| /// |
| /// Let xn be an identifier for then name n. As an expression, xn denotes the |
| /// final variable introduced into the initializer list scope by p. |
| /// Then s’ has an argument following the previously mentioned arguments: |
| /// xn if p is positional, or |
| /// xn: xn if q is named. |
| /// |
| /// @description Check that super-constructor invocation has correct parameters |
| /// @author sgrekhov@unipro.ru |
| |
| // SharedOptions=--enable-experiment=super-parameters |
| |
| import "../../Utils/expect.dart"; |
| |
| class S<T> { |
| num n; |
| T t; |
| S(this.n, this.t); |
| S.named(this.t, this.n); |
| } |
| |
| class C<T> extends S<T> { |
| C.constr1(super.n, String s, super.t); |
| C.constr2(int i, super.n, String s, super.t) : super(); |
| C.constr3(int i, super.t, String s, super.n) : super.named(); |
| } |
| |
| main() { |
| var c11 = C.constr1(1, "Lily was here", 42); |
| Expect.equals(1, c11.n); |
| Expect.equals(42, c11.t); |
| |
| var c12 = C.constr1(1, "Lily was here", "42"); |
| Expect.equals(1, c12.n); |
| Expect.equals("42", c12.t); |
| |
| var c21 = C.constr2(1, 2, "Lily was here", 42); |
| Expect.equals(2, c21.n); |
| Expect.equals(42, c21.t); |
| |
| var c22 = C.constr2(1, 2, "Lily was here", "42"); |
| Expect.equals(2, c22.n); |
| Expect.equals("42", c22.t); |
| |
| var c31 = C.constr3(1, 3.14, "Lily was here", 42); |
| Expect.equals(42, c31.n); |
| Expect.equals(3.14, c31.t); |
| |
| var c32 = C.constr3(1, "", "Lily was here", 3.14); |
| Expect.equals(3.14, c32.n); |
| Expect.equals("", c32.t); |
| } |