diff --git a/LanguageFeatures/Super-parameters/semantics_A06_t14.dart b/LanguageFeatures/Super-parameters/semantics_A06_t14.dart
index 5f65c7f..87dac0b 100644
--- a/LanguageFeatures/Super-parameters/semantics_A06_t14.dart
+++ b/LanguageFeatures/Super-parameters/semantics_A06_t14.dart
@@ -30,7 +30,7 @@
   int s1;
   int s2;
   S(this.s1, this.s2);
-  S.named(this.s1, {this.s2});
+  S.named(this.s1, {this.s2 = 0});
 }
 
 class C extends S {
diff --git a/LanguageFeatures/Super-parameters/semantics_A06_t15.dart b/LanguageFeatures/Super-parameters/semantics_A06_t15.dart
new file mode 100644
index 0000000..76be55c
--- /dev/null
+++ b/LanguageFeatures/Super-parameters/semantics_A06_t15.dart
@@ -0,0 +1,47 @@
+// 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 Let C be a non-redirecting generative constructor with, implicit
+/// or explicit, super-constructor invocation s at the end of its initializer
+/// list. Let D be the superclass constructor targeted by s (which must exist).
+///
+/// We define the associated super-constructor parameter for each
+/// super-parameter p of C as follows:
+///
+/// If p is a positional parameter, let j be the number of positional
+/// super-parameters of C up to and including p in source order. The associated
+/// super-constructor parameter of p is the jth positional parameter of D
+/// (1-based), if D has that many positional parameters.
+/// If p is a named parameter with name n, the associated super-constructor
+/// parameter is the named parameter of D with name n, if D has a named
+/// parameter with that name.
+///
+/// It’s a compile-time error if a non-redirecting generative
+/// constructor has a super-parameter with no associated super-constructor
+/// parameter.
+///
+/// @description Check that it is a compile-time error if a non-redirecting
+/// generative constructor has a super-parameter with no associated
+/// super-constructor parameter.
+/// @author sgrekhov@unipro.ru
+
+class S {
+  int s1;
+  int s2;
+  S(this.s1, {this.s2 = 0});
+  factory S.f(int s1, int s2) => S(s1, s2: s2);
+}
+
+class C extends S {
+  int i1;
+  int i2;
+  C(this.i1, super.s1, int x, super.s2) : this.i2 = x;
+//                            ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  C(1, 2, 3, 4);
+}
diff --git a/LanguageFeatures/Super-parameters/semantics_A06_t16.dart b/LanguageFeatures/Super-parameters/semantics_A06_t16.dart
new file mode 100644
index 0000000..5689971
--- /dev/null
+++ b/LanguageFeatures/Super-parameters/semantics_A06_t16.dart
@@ -0,0 +1,47 @@
+// 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 Let C be a non-redirecting generative constructor with, implicit
+/// or explicit, super-constructor invocation s at the end of its initializer
+/// list. Let D be the superclass constructor targeted by s (which must exist).
+///
+/// We define the associated super-constructor parameter for each
+/// super-parameter p of C as follows:
+///
+/// If p is a positional parameter, let j be the number of positional
+/// super-parameters of C up to and including p in source order. The associated
+/// super-constructor parameter of p is the jth positional parameter of D
+/// (1-based), if D has that many positional parameters.
+/// If p is a named parameter with name n, the associated super-constructor
+/// parameter is the named parameter of D with name n, if D has a named
+/// parameter with that name.
+///
+/// It’s a compile-time error if a non-redirecting generative
+/// constructor has a super-parameter with no associated super-constructor
+/// parameter.
+///
+/// @description Check that it is a compile-time error if a non-redirecting
+/// generative constructor has a super-parameter with no associated
+/// super-constructor parameter.
+/// @author sgrekhov@unipro.ru
+
+class S {
+  int s1;
+  int s2;
+  S(this.s1, this.s2);
+  S.named(this.s1, {this.s2 = 0});
+}
+
+class C extends S {
+  int i1;
+  int i2;
+  C(this.i1, super.s1, int x, super.s2) : this.i2 = x, super.named();
+//                            ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  C(1, 2, 3, 4);
+}
diff --git a/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t01.dart b/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t01.dart
new file mode 100644
index 0000000..00b2845
--- /dev/null
+++ b/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t01.dart
@@ -0,0 +1,36 @@
+// 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
+///
+/// The same constructor is targeted by s’ as by s (same leading super or
+/// super.id constructor reference).
+///
+/// @description Check that the same constructor is targeted by s’ as by s
+/// @author sgrekhov@unipro.ru
+
+import "../../Utils/expect.dart";
+
+class S {
+  int s1;
+  int s2;
+  String log;
+  S(this.s1, {this.s2 = 0}) : log = "S";
+  S.named(this.s1, {this.s2 = 0}) : log = "S.named";
+}
+
+class C extends S {
+  int i1;
+  int i2;
+  C(this.i1, super.s1, int x, {super.s2}) : this.i2 = x, super.named();
+}
+
+main() {
+  Expect.equals("S.named", C(1, 2, 3, s2: 4).log);
+}
diff --git a/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t02.dart b/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t02.dart
new file mode 100644
index 0000000..ec28719
--- /dev/null
+++ b/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t02.dart
@@ -0,0 +1,36 @@
+// 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
+///
+/// The same constructor is targeted by s’ as by s (same leading super or
+/// super.id constructor reference).
+///
+/// @description Check that the same constructor is targeted by s’ as by s
+/// @author sgrekhov@unipro.ru
+
+import "../../Utils/expect.dart";
+
+class S {
+  int s1;
+  int s2;
+  String log;
+  S(this.s1, this.s2) : log = "S";
+  S.named(this.s1, this.s2) : log = "S.named";
+}
+
+class C extends S {
+  int i1;
+  int i2;
+  C(this.i1, super.s1, int x, super.s2) : this.i2 = x, super.named();
+}
+
+main() {
+  Expect.equals("S.named", C(1, 2, 3, 4).log);
+}
diff --git a/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t03.dart b/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t03.dart
new file mode 100644
index 0000000..22b0566
--- /dev/null
+++ b/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t03.dart
@@ -0,0 +1,36 @@
+// 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
+///
+/// The same constructor is targeted by s’ as by s (same leading super or
+/// super.id constructor reference).
+///
+/// @description Check that the same constructor is targeted by s’ as by s
+/// @author sgrekhov@unipro.ru
+
+import "../../Utils/expect.dart";
+
+class S {
+  int s1;
+  int s2;
+  String log;
+  S(this.s1, this.s2) : log = "S";
+  S.named(this.s1, this.s2) : log = "S.named";
+}
+
+class C extends S {
+  int i1;
+  int i2;
+  C(this.i1, super.s1, int x, super.s2) : this.i2 = x, super();
+}
+
+main() {
+  Expect.equals("S", C(1, 2, 3, 4).log);
+}
diff --git a/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t04.dart b/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t04.dart
new file mode 100644
index 0000000..868ff4b
--- /dev/null
+++ b/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t04.dart
@@ -0,0 +1,36 @@
+// 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
+///
+/// The same constructor is targeted by s’ as by s (same leading super or
+/// super.id constructor reference).
+///
+/// @description Check that the same constructor is targeted by s’ as by s
+/// @author sgrekhov@unipro.ru
+
+import "../../Utils/expect.dart";
+
+class S {
+  int s1;
+  int s2;
+  String log;
+  S(this.s1, this.s2) : log = "S";
+  S.named(this.s1, this.s2) : log = "S.named";
+}
+
+class C extends S {
+  int i1;
+  int i2;
+  C(this.i1, super.s1, int x, super.s2) : this.i2 = x;
+}
+
+main() {
+  Expect.equals("S", C(1, 2, 3, 4).log);
+}
diff --git a/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t05.dart b/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t05.dart
new file mode 100644
index 0000000..0970775
--- /dev/null
+++ b/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t05.dart
@@ -0,0 +1,36 @@
+// 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
+///
+/// The same constructor is targeted by s’ as by s (same leading super or
+/// super.id constructor reference).
+///
+/// @description Check that the same constructor is targeted by s’ as by s
+/// @author sgrekhov@unipro.ru
+
+import "../../Utils/expect.dart";
+
+class S {
+  int? s1;
+  int? s2;
+  String log;
+  S(this.s1, {this.s2}) : log = "S";
+  S.named(this.s1, {this.s2}) : log = "S.named";
+}
+
+class C extends S {
+  int i1;
+  int i2;
+  C(this.i1, super.s1, int x, {super.s2}) : this.i2 = x;
+}
+
+main() {
+  Expect.equals("S", C(1, 2, 3, 4).log);
+}
diff --git a/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t06.dart b/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t06.dart
new file mode 100644
index 0000000..b376b22
--- /dev/null
+++ b/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t06.dart
@@ -0,0 +1,36 @@
+// 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
+///
+/// The same constructor is targeted by s’ as by s (same leading super or
+/// super.id constructor reference).
+///
+/// @description Check that the same constructor is targeted by s’ as by s
+/// @author sgrekhov@unipro.ru
+
+import "../../Utils/expect.dart";
+
+class S {
+  int? s1;
+  int? s2;
+  String log;
+  S(this.s1, [this.s2]) : log = "S";
+  S.named(this.s1, [this.s2]) : log = "S.named";
+}
+
+class C extends S {
+  int i1;
+  int i2;
+  C(this.i1, super.s1, int x, [super.s2]) : this.i2 = x;
+}
+
+main() {
+  Expect.equals("S", C(1, 2, 3, 4).log);
+}
diff --git a/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t07.dart b/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t07.dart
new file mode 100644
index 0000000..fc17fda
--- /dev/null
+++ b/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t07.dart
@@ -0,0 +1,36 @@
+// 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
+///
+/// The same constructor is targeted by s’ as by s (same leading super or
+/// super.id constructor reference).
+///
+/// @description Check that the same constructor is targeted by s’ as by s
+/// @author sgrekhov@unipro.ru
+
+import "../../Utils/expect.dart";
+
+class S {
+  int? s1;
+  int? s2;
+  String log;
+  S(this.s1, [this.s2]) : log = "S";
+  S.named(this.s1, [this.s2]) : log = "S.named";
+}
+
+class C extends S {
+  int i1;
+  int i2;
+  C(this.i1, super.s1, int x, [super.s2]) : this.i2 = x, super.named();
+}
+
+main() {
+  Expect.equals("S.named", C(1, 2, 3, 4).log);
+}
diff --git a/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t08.dart b/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t08.dart
new file mode 100644
index 0000000..afcec6a
--- /dev/null
+++ b/LanguageFeatures/Super-parameters/super_constructor_invocation_A01_t08.dart
@@ -0,0 +1,38 @@
+// 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
+///
+/// The same constructor is targeted by s’ as by s (same leading super or
+/// super.id constructor reference).
+///
+/// @description Check that the same constructor is targeted by s’ as by s
+/// @author sgrekhov@unipro.ru
+
+class S {
+  int? s1;
+  int? s2;
+  String log;
+  S(this.s1, this.s2) : log = "S";
+  S.named(this.s1, this.s2) : log = "S.named";
+  factory S.f(int s1, int s2) => S(s1, s2);
+}
+
+class C extends S {
+  int i1;
+  int i2;
+  C(this.i1, super.s1, int x, super.s2) : this.i2 = x, super.f();
+//                                                     ^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  C(1, 2, 3, 4);
+}
