diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A01_t01.dart
index 7f23d2d..d83715b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A01_t01.dart
@@ -33,31 +33,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -65,18 +63,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -91,8 +84,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -116,25 +107,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A01_t02.dart
index 4e18f7e..970627c 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A01_t02.dart
@@ -37,21 +37,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -72,31 +71,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -106,7 +97,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -126,17 +116,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A01_t03.dart
index 033642d..b9ddd6f 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A01_t03.dart
@@ -35,11 +35,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -59,12 +59,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -72,13 +68,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -100,11 +91,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A02_t01.dart
index c3f1086..98959e5 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A02_t01.dart
@@ -36,31 +36,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -68,18 +66,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -94,8 +87,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -119,25 +110,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A02_t02.dart
index 606c1b6..0087663 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A02_t02.dart
@@ -40,21 +40,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -75,31 +74,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -109,7 +100,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -129,17 +119,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A02_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A02_t03.dart
index a68f64e..6ff1fcd 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A02_t03.dart
@@ -38,11 +38,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -62,12 +62,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -75,13 +71,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -103,11 +94,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A03_t01.dart
index 71bc5d8..09d8084 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A03_t01.dart
@@ -36,31 +36,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -68,18 +66,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -94,8 +87,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -119,25 +110,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A03_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A03_t02.dart
index 5a1b83f..98529b0 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A03_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A03_t02.dart
@@ -40,21 +40,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -75,31 +74,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -109,7 +100,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -129,17 +119,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A03_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A03_t03.dart
index 89288a4..cccb8df 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A03_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A03_t03.dart
@@ -38,11 +38,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -62,12 +62,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -75,13 +71,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -103,11 +94,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A04_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A04_t01.dart
index a0d8f35..7a2d62a 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A04_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A04_t01.dart
@@ -35,31 +35,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -67,18 +65,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -93,8 +86,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -118,25 +109,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A04_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A04_t02.dart
index c688a92..d1f3d90 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A04_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A04_t02.dart
@@ -39,21 +39,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -74,31 +73,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -108,7 +99,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -128,17 +118,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A04_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A04_t03.dart
index 27b83c2..4763e6a 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A04_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A04_t03.dart
@@ -37,11 +37,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -61,12 +61,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -74,13 +70,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -102,11 +93,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A05_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A05_t01.dart
index 44f43ec..9d19c21 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A05_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A05_t01.dart
@@ -35,31 +35,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -67,18 +65,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -93,8 +86,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -118,25 +109,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A05_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A05_t02.dart
index 12d41a9..f311c97 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A05_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A05_t02.dart
@@ -39,21 +39,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -74,31 +73,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -108,7 +99,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -128,17 +118,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A05_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A05_t03.dart
index 09119e6..feb8866 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A05_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A05_t03.dart
@@ -37,11 +37,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -61,12 +61,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -74,13 +70,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -102,11 +93,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A06_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A06_t01.dart
index 3affbab..d00bfa7 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A06_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A06_t01.dart
@@ -35,31 +35,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -67,18 +65,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -93,8 +86,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -118,25 +109,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A06_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A06_t02.dart
index 11057c8..97735cd 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A06_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A06_t02.dart
@@ -39,21 +39,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -74,31 +73,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -108,7 +99,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -128,17 +118,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A06_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A06_t03.dart
index 7832586..2e6f210 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A06_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A06_t03.dart
@@ -37,11 +37,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -61,12 +61,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -74,13 +70,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -102,11 +93,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A07_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A07_t01.dart
index 276ef2d..f6c0c5f 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A07_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A07_t01.dart
@@ -35,31 +35,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -67,18 +65,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -93,8 +86,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -118,25 +109,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A07_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A07_t02.dart
index 49dfb3f..1d82a11 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A07_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A07_t02.dart
@@ -39,21 +39,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -74,31 +73,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -108,7 +99,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -128,17 +118,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A07_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A07_t03.dart
index e9ac602..11065d9 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A07_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A07_t03.dart
@@ -37,11 +37,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -61,12 +61,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -74,13 +70,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -102,11 +93,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A08_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A08_t01.dart
index 8dc4a6d..c2b5937 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A08_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A08_t01.dart
@@ -35,31 +35,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -67,18 +65,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -93,8 +86,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -118,25 +109,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A08_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A08_t02.dart
index 1435c5f..a19643b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A08_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A08_t02.dart
@@ -39,21 +39,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -74,31 +73,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -108,7 +99,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -128,17 +118,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A08_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A08_t03.dart
index 787da16..f07cd5d 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A08_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A08_t03.dart
@@ -37,11 +37,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -61,12 +61,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -74,13 +70,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -102,11 +93,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A09_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A09_t01.dart
index 63246e4..b145d41 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A09_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A09_t01.dart
@@ -35,31 +35,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -67,18 +65,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -93,8 +86,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -118,25 +109,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A09_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A09_t02.dart
index cbaaefc..f0d7eed 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A09_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A09_t02.dart
@@ -39,21 +39,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -74,31 +73,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -108,7 +99,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -128,17 +118,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A09_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A09_t03.dart
index d29c9b5..a1408a6 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A09_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A09_t03.dart
@@ -37,11 +37,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -61,12 +61,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -74,13 +70,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -102,11 +93,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A10_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A10_t01.dart
index 9bd23a7..96d8e64 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A10_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A10_t01.dart
@@ -36,31 +36,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -68,18 +66,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -94,8 +87,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -119,25 +110,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A10_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A10_t02.dart
index ae5fcd3..2591ade 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A10_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A10_t02.dart
@@ -40,21 +40,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -75,31 +74,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -109,7 +100,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -129,17 +119,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A10_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A10_t03.dart
index 20a6d07..8ac382f 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A10_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A10_t03.dart
@@ -38,11 +38,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -62,12 +62,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -75,13 +71,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -103,11 +94,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A11_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A11_t01.dart
index 4e561b9..9ec656d 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A11_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A11_t01.dart
@@ -37,31 +37,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -69,18 +67,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -95,8 +88,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -120,25 +111,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A11_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A11_t02.dart
index c56f013..8fcacb8 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A11_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A11_t02.dart
@@ -41,21 +41,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -76,31 +75,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -110,7 +101,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -130,17 +120,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A11_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A11_t03.dart
index 6de693f..8485d1b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A11_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A11_t03.dart
@@ -39,11 +39,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -63,12 +63,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -76,13 +72,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -104,11 +95,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A12_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A12_t01.dart
index 817523c..396f8af 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A12_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A12_t01.dart
@@ -37,31 +37,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -69,18 +67,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -95,8 +88,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -120,25 +111,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A12_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A12_t02.dart
index a7134dd..4c766e1 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A12_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A12_t02.dart
@@ -41,21 +41,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -76,31 +75,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -110,7 +101,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -130,17 +120,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A12_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A12_t03.dart
index 652b363..8a9aa62 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A12_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A12_t03.dart
@@ -39,11 +39,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -63,12 +63,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -76,13 +72,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -104,11 +95,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A13_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A13_t01.dart
index 8cf597b..1c0b872 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A13_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A13_t01.dart
@@ -36,31 +36,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -68,18 +66,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -94,8 +87,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -119,25 +110,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A13_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A13_t02.dart
index 3f9da32..393eb49 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A13_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A13_t02.dart
@@ -40,21 +40,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -75,31 +74,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -109,7 +100,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -129,17 +119,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A13_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A13_t03.dart
index 6a6f41e..26d9651 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A13_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A13_t03.dart
@@ -38,11 +38,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -62,12 +62,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -75,13 +71,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -103,11 +94,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A14_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A14_t01.dart
index e604125..2cd1548 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A14_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A14_t01.dart
@@ -36,31 +36,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -68,18 +66,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -94,8 +87,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -119,25 +110,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A14_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A14_t02.dart
index 45d66e6..3d88a46 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A14_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A14_t02.dart
@@ -40,21 +40,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -75,31 +74,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -109,7 +100,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -129,17 +119,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A14_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A14_t03.dart
index d2277fd..a35928d 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A14_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A14_t03.dart
@@ -38,11 +38,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -62,12 +62,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -75,13 +71,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -103,11 +94,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A15_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A15_t01.dart
index cd769eb..62daf76 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A15_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A15_t01.dart
@@ -36,31 +36,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -68,18 +66,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -94,8 +87,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -119,25 +110,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A15_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A15_t02.dart
index 037f4b6..dff2154 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A15_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A15_t02.dart
@@ -40,21 +40,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -75,31 +74,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -109,7 +100,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -129,17 +119,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A15_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A15_t03.dart
index a72d03e..65ebe34 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A15_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A15_t03.dart
@@ -38,11 +38,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -62,12 +62,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -75,13 +71,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -103,11 +94,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A16_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A16_t01.dart
index 721c4d4..6bd9b8e 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A16_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A16_t01.dart
@@ -37,31 +37,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -69,18 +67,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -95,8 +88,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -120,25 +111,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A16_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A16_t02.dart
index 470ba3b..3aeb322 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A16_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A16_t02.dart
@@ -41,21 +41,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -76,31 +75,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -110,7 +101,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -130,17 +120,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A16_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A16_t03.dart
index 6d82850..47bfb4e 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A16_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A16_t03.dart
@@ -39,11 +39,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -63,12 +63,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -76,13 +72,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -104,11 +95,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A17_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A17_t01.dart
index aefc648..ccaaf72 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A17_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A17_t01.dart
@@ -36,31 +36,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -68,18 +66,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -94,8 +87,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -119,25 +110,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A17_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A17_t02.dart
index a543087..f01c86c 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A17_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A17_t02.dart
@@ -40,21 +40,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -75,31 +74,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -109,7 +100,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -129,17 +119,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A17_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A17_t03.dart
index 3e99051..2c9aacb 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A17_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A17_t03.dart
@@ -38,11 +38,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -62,12 +62,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -75,13 +71,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -103,11 +94,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A18_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A18_t01.dart
index e28d235..9244280 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A18_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A18_t01.dart
@@ -36,31 +36,29 @@
 
 
 
+namedArgumentsFunc1(Function t1, {Function t2 = t1Default}) {}
+positionalArgumentsFunc1(Function t1, [Function t2 = t1Default]) {}
 
-namedArgumentsFunc1(Function t1, {Function t2}) {}
-positionalArgumentsFunc1(Function t1, [Function t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Function t1) {}
 
-  ArgumentsBindingClass.named(Function t1, {Function t2}) {}
-  ArgumentsBindingClass.positional(Function t1, [Function t2]) {}
+  ArgumentsBindingClass.named(Function t1, {Function t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Function t1, [Function t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2}) {
+  factory ArgumentsBindingClass.fNamed(Function t1, {Function t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2]) {
+  factory ArgumentsBindingClass.fPositional(Function t1, [Function t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Function t1, {Function t2}) {}
-  static positionalArgumentsStaticMethod(Function t1, [Function t2]) {}
+  static namedArgumentsStaticMethod(Function t1, {Function t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Function t1, [Function t2 = t1Default]) {}
 
-  namedArgumentsMethod(Function t1, {Function t2}) {}
-  positionalArgumentsMethod(Function t1, [Function t2]) {}
+  namedArgumentsMethod(Function t1, {Function t2 = t1Default}) {}
+  positionalArgumentsMethod(Function t1, [Function t2 = t1Default]) {}
 
   set testSetter(Function val) {}
 }
@@ -68,18 +66,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -94,8 +87,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -119,25 +110,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Function>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Function>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Function> instance2 =
       new ArgumentsBindingGen<Function>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Function>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Function>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A18_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A18_t02.dart
index ec04e24..e26c59b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A18_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A18_t02.dart
@@ -40,21 +40,20 @@
 class ArgumentsBindingSuper1_t02 {
   Function m;
 
-  ArgumentsBindingSuper1_t02(Function value) {}
-  ArgumentsBindingSuper1_t02.named(Function value, {Function val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2]) {}
+  ArgumentsBindingSuper1_t02(Function value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Function value, {Function val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Function value, [Function val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -75,31 +74,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -109,7 +100,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -129,17 +119,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Function> c2 =
     new ArgumentsBinding2_t02<Function>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Function>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Function>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A18_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A18_t03.dart
index f360d65..6fb661a 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A18_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/function_type_function_arguments_binding_A18_t03.dart
@@ -38,11 +38,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Function m;
+  Function m = t1Default;
 
   void superTest(Function val) {}
-  void superTestPositioned(Function val, [Function val2]) {}
-  void superTestNamed(Function val, {Function val2}) {}
+  void superTestPositioned(Function val, [Function val2 = t1Default]) {}
+  void superTestNamed(Function val, {Function val2 = t1Default}) {}
   Function get superGetter => m;
   void set superSetter(Function val) {}
 }
@@ -62,12 +62,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -75,13 +71,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -103,11 +94,7 @@
   ArgumentsBinding2_t03<Function> c2 = new ArgumentsBinding2_t03<Function>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A01_t01.dart
index 487b8de..c201045 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A01_t01.dart
@@ -43,31 +43,29 @@
 
 
 
+namedArgumentsFunc1(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2 = t1Default}) {}
+positionalArgumentsFunc1(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2 = t1Default]) {}
 
-namedArgumentsFunc1(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2}) {}
-positionalArgumentsFunc1(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(C0<U0, U1, U2> t1) {}
 
-  ArgumentsBindingClass.named(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2}) {}
-  ArgumentsBindingClass.positional(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2]) {}
+  ArgumentsBindingClass.named(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2}) {
+  factory ArgumentsBindingClass.fNamed(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2]) {
+  factory ArgumentsBindingClass.fPositional(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2}) {}
-  static positionalArgumentsStaticMethod(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2]) {}
+  static namedArgumentsStaticMethod(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2 = t1Default]) {}
 
-  namedArgumentsMethod(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2}) {}
-  positionalArgumentsMethod(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2]) {}
+  namedArgumentsMethod(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2 = t1Default}) {}
+  positionalArgumentsMethod(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2 = t1Default]) {}
 
   set testSetter(C0<U0, U1, U2> val) {}
 }
@@ -75,18 +73,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -101,8 +94,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -126,25 +117,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<C0<U0, U1, U2>>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<C0<U0, U1, U2>>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<C0<U0, U1, U2>> instance2 =
       new ArgumentsBindingGen<C0<U0, U1, U2>>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<C0<U0, U1, U2>>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<C0<U0, U1, U2>>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<C0<U0, U1, U2>>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<C0<U0, U1, U2>>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A01_t02.dart
index 194a3f0..90908f6 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A01_t02.dart
@@ -47,21 +47,20 @@
 class ArgumentsBindingSuper1_t02 {
   C0<U0, U1, U2> m;
 
-  ArgumentsBindingSuper1_t02(C0<U0, U1, U2> value) {}
-  ArgumentsBindingSuper1_t02.named(C0<U0, U1, U2> value, {C0<U0, U1, U2> val2}) {}
-  ArgumentsBindingSuper1_t02.positional(C0<U0, U1, U2> value, [C0<U0, U1, U2> val2]) {}
+  ArgumentsBindingSuper1_t02(C0<U0, U1, U2> value): m = value {}
+  ArgumentsBindingSuper1_t02.named(C0<U0, U1, U2> value, {C0<U0, U1, U2> val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(C0<U0, U1, U2> value, [C0<U0, U1, U2> val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(C0<U0, U1, U2> val) {}
-  void superTestPositioned(C0<U0, U1, U2> val, [C0<U0, U1, U2> val2]) {}
-  void superTestNamed(C0<U0, U1, U2> val, {C0<U0, U1, U2> val2}) {}
+  void superTestPositioned(C0<U0, U1, U2> val, [C0<U0, U1, U2> val2 = t1Default]) {}
+  void superTestNamed(C0<U0, U1, U2> val, {C0<U0, U1, U2> val2 = t1Default}) {}
   C0<U0, U1, U2> get superGetter => m;
   void set superSetter(C0<U0, U1, U2> val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -82,31 +81,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -116,7 +107,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -136,17 +126,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<C0<U0, U1, U2>> c2 =
     new ArgumentsBinding2_t02<C0<U0, U1, U2>>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<C0<U0, U1, U2>>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<C0<U0, U1, U2>>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<C0<U0, U1, U2>>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<C0<U0, U1, U2>>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<C0<U0, U1, U2>>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A01_t03.dart
index da2cdce..e181e4d 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A01_t03.dart
@@ -45,11 +45,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  C0<U0, U1, U2> m;
+  C0<U0, U1, U2> m = t1Default;
 
   void superTest(C0<U0, U1, U2> val) {}
-  void superTestPositioned(C0<U0, U1, U2> val, [C0<U0, U1, U2> val2]) {}
-  void superTestNamed(C0<U0, U1, U2> val, {C0<U0, U1, U2> val2}) {}
+  void superTestPositioned(C0<U0, U1, U2> val, [C0<U0, U1, U2> val2 = t1Default]) {}
+  void superTestNamed(C0<U0, U1, U2> val, {C0<U0, U1, U2> val2 = t1Default}) {}
   C0<U0, U1, U2> get superGetter => m;
   void set superSetter(C0<U0, U1, U2> val) {}
 }
@@ -69,12 +69,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -82,13 +78,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -110,11 +101,7 @@
   ArgumentsBinding2_t03<C0<U0, U1, U2>> c2 = new ArgumentsBinding2_t03<C0<U0, U1, U2>>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A02_t01.dart
index dd2f2b6..28d4409 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A02_t01.dart
@@ -43,31 +43,29 @@
 
 
 
+namedArgumentsFunc1(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2 = t1Default}) {}
+positionalArgumentsFunc1(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2 = t1Default]) {}
 
-namedArgumentsFunc1(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2}) {}
-positionalArgumentsFunc1(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(C0<U0, U1, U2> t1) {}
 
-  ArgumentsBindingClass.named(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2}) {}
-  ArgumentsBindingClass.positional(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2]) {}
+  ArgumentsBindingClass.named(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2}) {
+  factory ArgumentsBindingClass.fNamed(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2]) {
+  factory ArgumentsBindingClass.fPositional(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2}) {}
-  static positionalArgumentsStaticMethod(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2]) {}
+  static namedArgumentsStaticMethod(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2 = t1Default]) {}
 
-  namedArgumentsMethod(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2}) {}
-  positionalArgumentsMethod(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2]) {}
+  namedArgumentsMethod(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2 = t1Default}) {}
+  positionalArgumentsMethod(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2 = t1Default]) {}
 
   set testSetter(C0<U0, U1, U2> val) {}
 }
@@ -75,18 +73,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -101,8 +94,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -126,25 +117,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<C0<U0, U1, U2>>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<C0<U0, U1, U2>>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<C0<U0, U1, U2>> instance2 =
       new ArgumentsBindingGen<C0<U0, U1, U2>>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<C0<U0, U1, U2>>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<C0<U0, U1, U2>>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<C0<U0, U1, U2>>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<C0<U0, U1, U2>>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A02_t02.dart
index 7bcff25..f0fd337 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A02_t02.dart
@@ -47,21 +47,20 @@
 class ArgumentsBindingSuper1_t02 {
   C0<U0, U1, U2> m;
 
-  ArgumentsBindingSuper1_t02(C0<U0, U1, U2> value) {}
-  ArgumentsBindingSuper1_t02.named(C0<U0, U1, U2> value, {C0<U0, U1, U2> val2}) {}
-  ArgumentsBindingSuper1_t02.positional(C0<U0, U1, U2> value, [C0<U0, U1, U2> val2]) {}
+  ArgumentsBindingSuper1_t02(C0<U0, U1, U2> value): m = value {}
+  ArgumentsBindingSuper1_t02.named(C0<U0, U1, U2> value, {C0<U0, U1, U2> val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(C0<U0, U1, U2> value, [C0<U0, U1, U2> val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(C0<U0, U1, U2> val) {}
-  void superTestPositioned(C0<U0, U1, U2> val, [C0<U0, U1, U2> val2]) {}
-  void superTestNamed(C0<U0, U1, U2> val, {C0<U0, U1, U2> val2}) {}
+  void superTestPositioned(C0<U0, U1, U2> val, [C0<U0, U1, U2> val2 = t1Default]) {}
+  void superTestNamed(C0<U0, U1, U2> val, {C0<U0, U1, U2> val2 = t1Default}) {}
   C0<U0, U1, U2> get superGetter => m;
   void set superSetter(C0<U0, U1, U2> val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -82,31 +81,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -116,7 +107,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -136,17 +126,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<C0<U0, U1, U2>> c2 =
     new ArgumentsBinding2_t02<C0<U0, U1, U2>>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<C0<U0, U1, U2>>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<C0<U0, U1, U2>>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<C0<U0, U1, U2>>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<C0<U0, U1, U2>>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<C0<U0, U1, U2>>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A02_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A02_t03.dart
index 032c2bc..9345398 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A02_t03.dart
@@ -45,11 +45,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  C0<U0, U1, U2> m;
+  C0<U0, U1, U2> m = t1Default;
 
   void superTest(C0<U0, U1, U2> val) {}
-  void superTestPositioned(C0<U0, U1, U2> val, [C0<U0, U1, U2> val2]) {}
-  void superTestNamed(C0<U0, U1, U2> val, {C0<U0, U1, U2> val2}) {}
+  void superTestPositioned(C0<U0, U1, U2> val, [C0<U0, U1, U2> val2 = t1Default]) {}
+  void superTestNamed(C0<U0, U1, U2> val, {C0<U0, U1, U2> val2 = t1Default}) {}
   C0<U0, U1, U2> get superGetter => m;
   void set superSetter(C0<U0, U1, U2> val) {}
 }
@@ -69,12 +69,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -82,13 +78,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -110,11 +101,7 @@
   ArgumentsBinding2_t03<C0<U0, U1, U2>> c2 = new ArgumentsBinding2_t03<C0<U0, U1, U2>>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_fail_arguments_binding_fail_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_fail_arguments_binding_fail_A01_t01.dart
index 1873334..d804489 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_fail_arguments_binding_fail_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_fail_arguments_binding_fail_A01_t01.dart
@@ -46,30 +46,28 @@
 
 
 
-namedArgumentsFunc1(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2}) {}
-positionalArgumentsFunc1(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2]) {}
+namedArgumentsFunc1(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2 = t1Default}) {}
+positionalArgumentsFunc1(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(C0<U0, U1, U2> t1) {}
 
-  ArgumentsBindingClass.named(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2}) {}
-  ArgumentsBindingClass.positional(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2]) {}
+  ArgumentsBindingClass.named(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2}) {
+  factory ArgumentsBindingClass.fNamed(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2}) {}
-  static positionalArgumentsStaticMethod(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2]) {}
+  static namedArgumentsStaticMethod(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2 = t1Default]) {}
 
-  namedArgumentsMethod(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2}) {}
-  positionalArgumentsMethod(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2]) {}
+  namedArgumentsMethod(C0<U0, U1, U2> t1, {C0<U0, U1, U2> t2 = t1Default}) {}
+  positionalArgumentsMethod(C0<U0, U1, U2> t1, [C0<U0, U1, U2> t2 = t1Default]) {}
 
   set testSetter(C0<U0, U1, U2> val) {}
 }
@@ -77,18 +75,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -133,14 +126,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -206,81 +191,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<C0<U0, U1, U2>>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<C0<U0, U1, U2>>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<C0<U0, U1, U2>>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<C0<U0, U1, U2>>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<C0<U0, U1, U2>>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<C0<U0, U1, U2>>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<C0<U0, U1, U2>>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<C0<U0, U1, U2>>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<C0<U0, U1, U2>>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<C0<U0, U1, U2>>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<C0<U0, U1, U2>>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<C0<U0, U1, U2>>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<C0<U0, U1, U2>>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<C0<U0, U1, U2>>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<C0<U0, U1, U2>>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<C0<U0, U1, U2>>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<C0<U0, U1, U2>>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<C0<U0, U1, U2>>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_fail_arguments_binding_fail_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_fail_arguments_binding_fail_A01_t02.dart
index 145ba56..c29b9f3 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_fail_arguments_binding_fail_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_fail_arguments_binding_fail_A01_t02.dart
@@ -49,14 +49,14 @@
 class ArgumentsBindingSuper1_t02 {
   C0<U0, U1, U2> m;
 
-  ArgumentsBindingSuper1_t02(C0<U0, U1, U2> value) {}
-  ArgumentsBindingSuper1_t02.named(C0<U0, U1, U2> value, {C0<U0, U1, U2> val2}) {}
-  ArgumentsBindingSuper1_t02.positional(C0<U0, U1, U2> value, [C0<U0, U1, U2> val2]) {}
+  ArgumentsBindingSuper1_t02(C0<U0, U1, U2> value): m = value {}
+  ArgumentsBindingSuper1_t02.named(C0<U0, U1, U2> value, {C0<U0, U1, U2> val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(C0<U0, U1, U2> value, [C0<U0, U1, U2> val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(C0<U0, U1, U2> val) {}
-  void superTestPositioned(C0<U0, U1, U2> val, [C0<U0, U1, U2> val2]) {}
-  void superTestNamed(C0<U0, U1, U2> val, {C0<U0, U1, U2> val2}) {}
+  void superTestPositioned(C0<U0, U1, U2> val, [C0<U0, U1, U2> val2 = t1Default]) {}
+  void superTestNamed(C0<U0, U1, U2> val, {C0<U0, U1, U2> val2 = t1Default}) {}
   C0<U0, U1, U2> get superGetter => forgetType(t0Instance);
   void set superSetter(C0<U0, U1, U2> val) {}
 }
@@ -69,8 +69,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -161,28 +159,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -197,42 +188,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -241,10 +196,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -298,34 +249,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -336,54 +287,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<C0<U0, U1, U2>>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<C0<U0, U1, U2>>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<C0<U0, U1, U2>>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<C0<U0, U1, U2>>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<C0<U0, U1, U2>>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<C0<U0, U1, U2>>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<C0<U0, U1, U2>>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<C0<U0, U1, U2>>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<C0<U0, U1, U2>>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<C0<U0, U1, U2>>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<C0<U0, U1, U2>>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<C0<U0, U1, U2>>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<C0<U0, U1, U2>>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<C0<U0, U1, U2>>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<C0<U0, U1, U2>>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<C0<U0, U1, U2>>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<C0<U0, U1, U2>>.valid().test();
+  new ArgumentsBinding2_t02<C0<U0, U1, U2>>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A01_t01.dart
index 38aa2e0..a86a619 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A01_t01.dart
@@ -39,31 +39,29 @@
 
 
 
+namedArgumentsFunc1(FutureOr<C> t1, {FutureOr<C> t2 = t1Default}) {}
+positionalArgumentsFunc1(FutureOr<C> t1, [FutureOr<C> t2 = t1Default]) {}
 
-namedArgumentsFunc1(FutureOr<C> t1, {FutureOr<C> t2}) {}
-positionalArgumentsFunc1(FutureOr<C> t1, [FutureOr<C> t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(FutureOr<C> t1) {}
 
-  ArgumentsBindingClass.named(FutureOr<C> t1, {FutureOr<C> t2}) {}
-  ArgumentsBindingClass.positional(FutureOr<C> t1, [FutureOr<C> t2]) {}
+  ArgumentsBindingClass.named(FutureOr<C> t1, {FutureOr<C> t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(FutureOr<C> t1, [FutureOr<C> t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(FutureOr<C> t1, {FutureOr<C> t2}) {
+  factory ArgumentsBindingClass.fNamed(FutureOr<C> t1, {FutureOr<C> t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(FutureOr<C> t1, [FutureOr<C> t2]) {
+  factory ArgumentsBindingClass.fPositional(FutureOr<C> t1, [FutureOr<C> t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(FutureOr<C> t1, {FutureOr<C> t2}) {}
-  static positionalArgumentsStaticMethod(FutureOr<C> t1, [FutureOr<C> t2]) {}
+  static namedArgumentsStaticMethod(FutureOr<C> t1, {FutureOr<C> t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(FutureOr<C> t1, [FutureOr<C> t2 = t1Default]) {}
 
-  namedArgumentsMethod(FutureOr<C> t1, {FutureOr<C> t2}) {}
-  positionalArgumentsMethod(FutureOr<C> t1, [FutureOr<C> t2]) {}
+  namedArgumentsMethod(FutureOr<C> t1, {FutureOr<C> t2 = t1Default}) {}
+  positionalArgumentsMethod(FutureOr<C> t1, [FutureOr<C> t2 = t1Default]) {}
 
   set testSetter(FutureOr<C> val) {}
 }
@@ -71,18 +69,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -97,8 +90,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -122,25 +113,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<FutureOr<C>>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<FutureOr<C>>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<FutureOr<C>> instance2 =
       new ArgumentsBindingGen<FutureOr<C>>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<FutureOr<C>>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<FutureOr<C>>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<FutureOr<C>>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<FutureOr<C>>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A01_t02.dart
index 0e9bdbf..b4c5ff8 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A01_t02.dart
@@ -43,21 +43,20 @@
 class ArgumentsBindingSuper1_t02 {
   FutureOr<C> m;
 
-  ArgumentsBindingSuper1_t02(FutureOr<C> value) {}
-  ArgumentsBindingSuper1_t02.named(FutureOr<C> value, {FutureOr<C> val2}) {}
-  ArgumentsBindingSuper1_t02.positional(FutureOr<C> value, [FutureOr<C> val2]) {}
+  ArgumentsBindingSuper1_t02(FutureOr<C> value): m = value {}
+  ArgumentsBindingSuper1_t02.named(FutureOr<C> value, {FutureOr<C> val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(FutureOr<C> value, [FutureOr<C> val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(FutureOr<C> val) {}
-  void superTestPositioned(FutureOr<C> val, [FutureOr<C> val2]) {}
-  void superTestNamed(FutureOr<C> val, {FutureOr<C> val2}) {}
+  void superTestPositioned(FutureOr<C> val, [FutureOr<C> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<C> val, {FutureOr<C> val2 = t1Default}) {}
   FutureOr<C> get superGetter => m;
   void set superSetter(FutureOr<C> val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -78,31 +77,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -112,7 +103,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -132,17 +122,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<FutureOr<C>> c2 =
     new ArgumentsBinding2_t02<FutureOr<C>>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<C>>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<FutureOr<C>>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<C>>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<C>>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<FutureOr<C>>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A01_t03.dart
index 104b9a5..b747aac 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A01_t03.dart
@@ -41,11 +41,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  FutureOr<C> m;
+  FutureOr<C> m = t1Default;
 
   void superTest(FutureOr<C> val) {}
-  void superTestPositioned(FutureOr<C> val, [FutureOr<C> val2]) {}
-  void superTestNamed(FutureOr<C> val, {FutureOr<C> val2}) {}
+  void superTestPositioned(FutureOr<C> val, [FutureOr<C> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<C> val, {FutureOr<C> val2 = t1Default}) {}
   FutureOr<C> get superGetter => m;
   void set superSetter(FutureOr<C> val) {}
 }
@@ -65,12 +65,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -78,13 +74,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -106,11 +97,7 @@
   ArgumentsBinding2_t03<FutureOr<C>> c2 = new ArgumentsBinding2_t03<FutureOr<C>>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A02_t01.dart
index 5816826..c2feb61 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A02_t01.dart
@@ -39,31 +39,29 @@
 
 
 
+namedArgumentsFunc1(FutureOr<C> t1, {FutureOr<C> t2 = t1Default}) {}
+positionalArgumentsFunc1(FutureOr<C> t1, [FutureOr<C> t2 = t1Default]) {}
 
-namedArgumentsFunc1(FutureOr<C> t1, {FutureOr<C> t2}) {}
-positionalArgumentsFunc1(FutureOr<C> t1, [FutureOr<C> t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(FutureOr<C> t1) {}
 
-  ArgumentsBindingClass.named(FutureOr<C> t1, {FutureOr<C> t2}) {}
-  ArgumentsBindingClass.positional(FutureOr<C> t1, [FutureOr<C> t2]) {}
+  ArgumentsBindingClass.named(FutureOr<C> t1, {FutureOr<C> t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(FutureOr<C> t1, [FutureOr<C> t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(FutureOr<C> t1, {FutureOr<C> t2}) {
+  factory ArgumentsBindingClass.fNamed(FutureOr<C> t1, {FutureOr<C> t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(FutureOr<C> t1, [FutureOr<C> t2]) {
+  factory ArgumentsBindingClass.fPositional(FutureOr<C> t1, [FutureOr<C> t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(FutureOr<C> t1, {FutureOr<C> t2}) {}
-  static positionalArgumentsStaticMethod(FutureOr<C> t1, [FutureOr<C> t2]) {}
+  static namedArgumentsStaticMethod(FutureOr<C> t1, {FutureOr<C> t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(FutureOr<C> t1, [FutureOr<C> t2 = t1Default]) {}
 
-  namedArgumentsMethod(FutureOr<C> t1, {FutureOr<C> t2}) {}
-  positionalArgumentsMethod(FutureOr<C> t1, [FutureOr<C> t2]) {}
+  namedArgumentsMethod(FutureOr<C> t1, {FutureOr<C> t2 = t1Default}) {}
+  positionalArgumentsMethod(FutureOr<C> t1, [FutureOr<C> t2 = t1Default]) {}
 
   set testSetter(FutureOr<C> val) {}
 }
@@ -71,18 +69,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -97,8 +90,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -122,25 +113,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<FutureOr<C>>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<FutureOr<C>>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<FutureOr<C>> instance2 =
       new ArgumentsBindingGen<FutureOr<C>>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<FutureOr<C>>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<FutureOr<C>>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<FutureOr<C>>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<FutureOr<C>>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A02_t02.dart
index a9b6cb7..b289ace 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A02_t02.dart
@@ -43,21 +43,20 @@
 class ArgumentsBindingSuper1_t02 {
   FutureOr<C> m;
 
-  ArgumentsBindingSuper1_t02(FutureOr<C> value) {}
-  ArgumentsBindingSuper1_t02.named(FutureOr<C> value, {FutureOr<C> val2}) {}
-  ArgumentsBindingSuper1_t02.positional(FutureOr<C> value, [FutureOr<C> val2]) {}
+  ArgumentsBindingSuper1_t02(FutureOr<C> value): m = value {}
+  ArgumentsBindingSuper1_t02.named(FutureOr<C> value, {FutureOr<C> val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(FutureOr<C> value, [FutureOr<C> val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(FutureOr<C> val) {}
-  void superTestPositioned(FutureOr<C> val, [FutureOr<C> val2]) {}
-  void superTestNamed(FutureOr<C> val, {FutureOr<C> val2}) {}
+  void superTestPositioned(FutureOr<C> val, [FutureOr<C> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<C> val, {FutureOr<C> val2 = t1Default}) {}
   FutureOr<C> get superGetter => m;
   void set superSetter(FutureOr<C> val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -78,31 +77,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -112,7 +103,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -132,17 +122,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<FutureOr<C>> c2 =
     new ArgumentsBinding2_t02<FutureOr<C>>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<C>>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<FutureOr<C>>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<C>>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<C>>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<FutureOr<C>>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A02_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A02_t03.dart
index f16b0a2..67659ab 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A02_t03.dart
@@ -41,11 +41,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  FutureOr<C> m;
+  FutureOr<C> m = t1Default;
 
   void superTest(FutureOr<C> val) {}
-  void superTestPositioned(FutureOr<C> val, [FutureOr<C> val2]) {}
-  void superTestNamed(FutureOr<C> val, {FutureOr<C> val2}) {}
+  void superTestPositioned(FutureOr<C> val, [FutureOr<C> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<C> val, {FutureOr<C> val2 = t1Default}) {}
   FutureOr<C> get superGetter => m;
   void set superSetter(FutureOr<C> val) {}
 }
@@ -65,12 +65,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -78,13 +74,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -106,11 +97,7 @@
   ArgumentsBinding2_t03<FutureOr<C>> c2 = new ArgumentsBinding2_t03<FutureOr<C>>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A03_t01.dart
index adf20d2..99df5a8 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A03_t01.dart
@@ -41,31 +41,29 @@
 
 
 
+namedArgumentsFunc1(FutureOr<C<A>> t1, {FutureOr<C<A>> t2 = t1Default}) {}
+positionalArgumentsFunc1(FutureOr<C<A>> t1, [FutureOr<C<A>> t2 = t1Default]) {}
 
-namedArgumentsFunc1(FutureOr<C<A>> t1, {FutureOr<C<A>> t2}) {}
-positionalArgumentsFunc1(FutureOr<C<A>> t1, [FutureOr<C<A>> t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(FutureOr<C<A>> t1) {}
 
-  ArgumentsBindingClass.named(FutureOr<C<A>> t1, {FutureOr<C<A>> t2}) {}
-  ArgumentsBindingClass.positional(FutureOr<C<A>> t1, [FutureOr<C<A>> t2]) {}
+  ArgumentsBindingClass.named(FutureOr<C<A>> t1, {FutureOr<C<A>> t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(FutureOr<C<A>> t1, [FutureOr<C<A>> t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(FutureOr<C<A>> t1, {FutureOr<C<A>> t2}) {
+  factory ArgumentsBindingClass.fNamed(FutureOr<C<A>> t1, {FutureOr<C<A>> t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(FutureOr<C<A>> t1, [FutureOr<C<A>> t2]) {
+  factory ArgumentsBindingClass.fPositional(FutureOr<C<A>> t1, [FutureOr<C<A>> t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(FutureOr<C<A>> t1, {FutureOr<C<A>> t2}) {}
-  static positionalArgumentsStaticMethod(FutureOr<C<A>> t1, [FutureOr<C<A>> t2]) {}
+  static namedArgumentsStaticMethod(FutureOr<C<A>> t1, {FutureOr<C<A>> t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(FutureOr<C<A>> t1, [FutureOr<C<A>> t2 = t1Default]) {}
 
-  namedArgumentsMethod(FutureOr<C<A>> t1, {FutureOr<C<A>> t2}) {}
-  positionalArgumentsMethod(FutureOr<C<A>> t1, [FutureOr<C<A>> t2]) {}
+  namedArgumentsMethod(FutureOr<C<A>> t1, {FutureOr<C<A>> t2 = t1Default}) {}
+  positionalArgumentsMethod(FutureOr<C<A>> t1, [FutureOr<C<A>> t2 = t1Default]) {}
 
   set testSetter(FutureOr<C<A>> val) {}
 }
@@ -73,18 +71,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -99,8 +92,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -124,25 +115,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<FutureOr<C<A>>>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<FutureOr<C<A>>>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<FutureOr<C<A>>> instance2 =
       new ArgumentsBindingGen<FutureOr<C<A>>>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<FutureOr<C<A>>>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<FutureOr<C<A>>>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<FutureOr<C<A>>>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<FutureOr<C<A>>>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A03_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A03_t02.dart
index 4b153f5..ed1bb39 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A03_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A03_t02.dart
@@ -45,21 +45,20 @@
 class ArgumentsBindingSuper1_t02 {
   FutureOr<C<A>> m;
 
-  ArgumentsBindingSuper1_t02(FutureOr<C<A>> value) {}
-  ArgumentsBindingSuper1_t02.named(FutureOr<C<A>> value, {FutureOr<C<A>> val2}) {}
-  ArgumentsBindingSuper1_t02.positional(FutureOr<C<A>> value, [FutureOr<C<A>> val2]) {}
+  ArgumentsBindingSuper1_t02(FutureOr<C<A>> value): m = value {}
+  ArgumentsBindingSuper1_t02.named(FutureOr<C<A>> value, {FutureOr<C<A>> val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(FutureOr<C<A>> value, [FutureOr<C<A>> val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(FutureOr<C<A>> val) {}
-  void superTestPositioned(FutureOr<C<A>> val, [FutureOr<C<A>> val2]) {}
-  void superTestNamed(FutureOr<C<A>> val, {FutureOr<C<A>> val2}) {}
+  void superTestPositioned(FutureOr<C<A>> val, [FutureOr<C<A>> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<C<A>> val, {FutureOr<C<A>> val2 = t1Default}) {}
   FutureOr<C<A>> get superGetter => m;
   void set superSetter(FutureOr<C<A>> val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -80,31 +79,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -114,7 +105,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -134,17 +124,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<FutureOr<C<A>>> c2 =
     new ArgumentsBinding2_t02<FutureOr<C<A>>>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<C<A>>>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<FutureOr<C<A>>>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<C<A>>>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<C<A>>>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<FutureOr<C<A>>>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A03_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A03_t03.dart
index e97cf23..a2ffce5 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A03_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A03_t03.dart
@@ -43,11 +43,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  FutureOr<C<A>> m;
+  FutureOr<C<A>> m = t1Default;
 
   void superTest(FutureOr<C<A>> val) {}
-  void superTestPositioned(FutureOr<C<A>> val, [FutureOr<C<A>> val2]) {}
-  void superTestNamed(FutureOr<C<A>> val, {FutureOr<C<A>> val2}) {}
+  void superTestPositioned(FutureOr<C<A>> val, [FutureOr<C<A>> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<C<A>> val, {FutureOr<C<A>> val2 = t1Default}) {}
   FutureOr<C<A>> get superGetter => m;
   void set superSetter(FutureOr<C<A>> val) {}
 }
@@ -67,12 +67,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -80,13 +76,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -108,11 +99,7 @@
   ArgumentsBinding2_t03<FutureOr<C<A>>> c2 = new ArgumentsBinding2_t03<FutureOr<C<A>>>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A04_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A04_t01.dart
index f801373..5a1eb64 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A04_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A04_t01.dart
@@ -42,31 +42,29 @@
 
 
 
+namedArgumentsFunc1(FutureOr<C<A>> t1, {FutureOr<C<A>> t2 = t1Default}) {}
+positionalArgumentsFunc1(FutureOr<C<A>> t1, [FutureOr<C<A>> t2 = t1Default]) {}
 
-namedArgumentsFunc1(FutureOr<C<A>> t1, {FutureOr<C<A>> t2}) {}
-positionalArgumentsFunc1(FutureOr<C<A>> t1, [FutureOr<C<A>> t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(FutureOr<C<A>> t1) {}
 
-  ArgumentsBindingClass.named(FutureOr<C<A>> t1, {FutureOr<C<A>> t2}) {}
-  ArgumentsBindingClass.positional(FutureOr<C<A>> t1, [FutureOr<C<A>> t2]) {}
+  ArgumentsBindingClass.named(FutureOr<C<A>> t1, {FutureOr<C<A>> t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(FutureOr<C<A>> t1, [FutureOr<C<A>> t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(FutureOr<C<A>> t1, {FutureOr<C<A>> t2}) {
+  factory ArgumentsBindingClass.fNamed(FutureOr<C<A>> t1, {FutureOr<C<A>> t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(FutureOr<C<A>> t1, [FutureOr<C<A>> t2]) {
+  factory ArgumentsBindingClass.fPositional(FutureOr<C<A>> t1, [FutureOr<C<A>> t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(FutureOr<C<A>> t1, {FutureOr<C<A>> t2}) {}
-  static positionalArgumentsStaticMethod(FutureOr<C<A>> t1, [FutureOr<C<A>> t2]) {}
+  static namedArgumentsStaticMethod(FutureOr<C<A>> t1, {FutureOr<C<A>> t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(FutureOr<C<A>> t1, [FutureOr<C<A>> t2 = t1Default]) {}
 
-  namedArgumentsMethod(FutureOr<C<A>> t1, {FutureOr<C<A>> t2}) {}
-  positionalArgumentsMethod(FutureOr<C<A>> t1, [FutureOr<C<A>> t2]) {}
+  namedArgumentsMethod(FutureOr<C<A>> t1, {FutureOr<C<A>> t2 = t1Default}) {}
+  positionalArgumentsMethod(FutureOr<C<A>> t1, [FutureOr<C<A>> t2 = t1Default]) {}
 
   set testSetter(FutureOr<C<A>> val) {}
 }
@@ -74,18 +72,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -100,8 +93,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -125,25 +116,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<FutureOr<C<A>>>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<FutureOr<C<A>>>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<FutureOr<C<A>>> instance2 =
       new ArgumentsBindingGen<FutureOr<C<A>>>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<FutureOr<C<A>>>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<FutureOr<C<A>>>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<FutureOr<C<A>>>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<FutureOr<C<A>>>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A04_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A04_t02.dart
index 1c0d28d..c0bc954 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A04_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A04_t02.dart
@@ -46,21 +46,20 @@
 class ArgumentsBindingSuper1_t02 {
   FutureOr<C<A>> m;
 
-  ArgumentsBindingSuper1_t02(FutureOr<C<A>> value) {}
-  ArgumentsBindingSuper1_t02.named(FutureOr<C<A>> value, {FutureOr<C<A>> val2}) {}
-  ArgumentsBindingSuper1_t02.positional(FutureOr<C<A>> value, [FutureOr<C<A>> val2]) {}
+  ArgumentsBindingSuper1_t02(FutureOr<C<A>> value): m = value {}
+  ArgumentsBindingSuper1_t02.named(FutureOr<C<A>> value, {FutureOr<C<A>> val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(FutureOr<C<A>> value, [FutureOr<C<A>> val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(FutureOr<C<A>> val) {}
-  void superTestPositioned(FutureOr<C<A>> val, [FutureOr<C<A>> val2]) {}
-  void superTestNamed(FutureOr<C<A>> val, {FutureOr<C<A>> val2}) {}
+  void superTestPositioned(FutureOr<C<A>> val, [FutureOr<C<A>> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<C<A>> val, {FutureOr<C<A>> val2 = t1Default}) {}
   FutureOr<C<A>> get superGetter => m;
   void set superSetter(FutureOr<C<A>> val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -81,31 +80,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -115,7 +106,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -135,17 +125,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<FutureOr<C<A>>> c2 =
     new ArgumentsBinding2_t02<FutureOr<C<A>>>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<C<A>>>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<FutureOr<C<A>>>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<C<A>>>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<C<A>>>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<FutureOr<C<A>>>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A04_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A04_t03.dart
index d161b41..018edb3 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A04_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_arguments_binding_A04_t03.dart
@@ -44,11 +44,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  FutureOr<C<A>> m;
+  FutureOr<C<A>> m = t1Default;
 
   void superTest(FutureOr<C<A>> val) {}
-  void superTestPositioned(FutureOr<C<A>> val, [FutureOr<C<A>> val2]) {}
-  void superTestNamed(FutureOr<C<A>> val, {FutureOr<C<A>> val2}) {}
+  void superTestPositioned(FutureOr<C<A>> val, [FutureOr<C<A>> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<C<A>> val, {FutureOr<C<A>> val2 = t1Default}) {}
   FutureOr<C<A>> get superGetter => m;
   void set superSetter(FutureOr<C<A>> val) {}
 }
@@ -68,12 +68,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -81,13 +77,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -109,11 +100,7 @@
   ArgumentsBinding2_t03<FutureOr<C<A>>> c2 = new ArgumentsBinding2_t03<FutureOr<C<A>>>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A01_t01.dart
index 9e6b9f8..3c55a64 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A01_t01.dart
@@ -40,30 +40,28 @@
 
 
 
-namedArgumentsFunc1(Future<S0> t1, {Future<S0> t2}) {}
-positionalArgumentsFunc1(Future<S0> t1, [Future<S0> t2]) {}
+namedArgumentsFunc1(Future<S0> t1, {Future<S0> t2 = t1Default}) {}
+positionalArgumentsFunc1(Future<S0> t1, [Future<S0> t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Future<S0> t1) {}
 
-  ArgumentsBindingClass.named(Future<S0> t1, {Future<S0> t2}) {}
-  ArgumentsBindingClass.positional(Future<S0> t1, [Future<S0> t2]) {}
+  ArgumentsBindingClass.named(Future<S0> t1, {Future<S0> t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(Future<S0> t1, {Future<S0> t2}) {
+  factory ArgumentsBindingClass.fNamed(Future<S0> t1, {Future<S0> t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Future<S0> t1, [Future<S0> t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(Future<S0> t1, [Future<S0> t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(Future<S0> t1, {Future<S0> t2}) {}
-  static positionalArgumentsStaticMethod(Future<S0> t1, [Future<S0> t2]) {}
+  static namedArgumentsStaticMethod(Future<S0> t1, {Future<S0> t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Future<S0> t1, [Future<S0> t2 = t1Default]) {}
 
-  namedArgumentsMethod(Future<S0> t1, {Future<S0> t2}) {}
-  positionalArgumentsMethod(Future<S0> t1, [Future<S0> t2]) {}
+  namedArgumentsMethod(Future<S0> t1, {Future<S0> t2 = t1Default}) {}
+  positionalArgumentsMethod(Future<S0> t1, [Future<S0> t2 = t1Default]) {}
 
   set testSetter(Future<S0> val) {}
 }
@@ -71,18 +69,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -127,14 +120,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -200,81 +185,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<Future<S0>>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<Future<S0>>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<Future<S0>>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<Future<S0>>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<Future<S0>>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<S0>>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Future<S0>>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<S0>>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<S0>>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<S0>>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Future<S0>>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<S0>>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<S0>>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<S0>>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Future<S0>>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<S0>>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<S0>>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Future<S0>>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A01_t02.dart
index cf27764..3169739 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A01_t02.dart
@@ -43,14 +43,14 @@
 class ArgumentsBindingSuper1_t02 {
   Future<S0> m;
 
-  ArgumentsBindingSuper1_t02(Future<S0> value) {}
-  ArgumentsBindingSuper1_t02.named(Future<S0> value, {Future<S0> val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Future<S0> value, [Future<S0> val2]) {}
+  ArgumentsBindingSuper1_t02(Future<S0> value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Future<S0> value, {Future<S0> val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Future<S0> value, [Future<S0> val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Future<S0> val) {}
-  void superTestPositioned(Future<S0> val, [Future<S0> val2]) {}
-  void superTestNamed(Future<S0> val, {Future<S0> val2}) {}
+  void superTestPositioned(Future<S0> val, [Future<S0> val2 = t1Default]) {}
+  void superTestNamed(Future<S0> val, {Future<S0> val2 = t1Default}) {}
   Future<S0> get superGetter => forgetType(t0Instance);
   void set superSetter(Future<S0> val) {}
 }
@@ -63,8 +63,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -155,28 +153,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -191,42 +182,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -235,10 +190,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -292,34 +243,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -330,54 +281,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<S0>>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<Future<S0>>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<S0>>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<S0>>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<Future<S0>>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<S0>>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Future<S0>>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<S0>>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Future<S0>>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<S0>>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Future<S0>>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<S0>>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Future<S0>>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<S0>>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<S0>>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<S0>>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<Future<S0>>.valid().test();
+  new ArgumentsBinding2_t02<Future<S0>>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A02_t01.dart
index ed13846..50bd920 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A02_t01.dart
@@ -41,30 +41,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -72,18 +70,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -128,14 +121,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -201,81 +186,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<T1>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A02_t02.dart
index 5334328..1eefac9 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A02_t02.dart
@@ -44,14 +44,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -64,8 +64,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -156,28 +154,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -192,42 +183,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -236,10 +191,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -293,34 +244,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -331,54 +282,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<T1>.valid().test();
+  new ArgumentsBinding2_t02<T1>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A03_t01.dart
index 88dff1d..c8e1e10 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A03_t01.dart
@@ -48,30 +48,28 @@
 
 
 
-namedArgumentsFunc1(Future<C1> t1, {Future<C1> t2}) {}
-positionalArgumentsFunc1(Future<C1> t1, [Future<C1> t2]) {}
+namedArgumentsFunc1(Future<C1> t1, {Future<C1> t2 = t1Default}) {}
+positionalArgumentsFunc1(Future<C1> t1, [Future<C1> t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Future<C1> t1) {}
 
-  ArgumentsBindingClass.named(Future<C1> t1, {Future<C1> t2}) {}
-  ArgumentsBindingClass.positional(Future<C1> t1, [Future<C1> t2]) {}
+  ArgumentsBindingClass.named(Future<C1> t1, {Future<C1> t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(Future<C1> t1, {Future<C1> t2}) {
+  factory ArgumentsBindingClass.fNamed(Future<C1> t1, {Future<C1> t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Future<C1> t1, [Future<C1> t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(Future<C1> t1, [Future<C1> t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(Future<C1> t1, {Future<C1> t2}) {}
-  static positionalArgumentsStaticMethod(Future<C1> t1, [Future<C1> t2]) {}
+  static namedArgumentsStaticMethod(Future<C1> t1, {Future<C1> t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Future<C1> t1, [Future<C1> t2 = t1Default]) {}
 
-  namedArgumentsMethod(Future<C1> t1, {Future<C1> t2}) {}
-  positionalArgumentsMethod(Future<C1> t1, [Future<C1> t2]) {}
+  namedArgumentsMethod(Future<C1> t1, {Future<C1> t2 = t1Default}) {}
+  positionalArgumentsMethod(Future<C1> t1, [Future<C1> t2 = t1Default]) {}
 
   set testSetter(Future<C1> val) {}
 }
@@ -79,18 +77,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -135,14 +128,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -208,81 +193,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<Future<C1>>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<Future<C1>>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<Future<C1>>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<Future<C1>>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<Future<C1>>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<C1>>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Future<C1>>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<C1>>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<C1>>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<C1>>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Future<C1>>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<C1>>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<C1>>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<C1>>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Future<C1>>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<C1>>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Future<C1>>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Future<C1>>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A03_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A03_t02.dart
index b80419a..3f8f4ed 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A03_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_FutureOr_fail_arguments_binding_fail_A03_t02.dart
@@ -51,14 +51,14 @@
 class ArgumentsBindingSuper1_t02 {
   Future<C1> m;
 
-  ArgumentsBindingSuper1_t02(Future<C1> value) {}
-  ArgumentsBindingSuper1_t02.named(Future<C1> value, {Future<C1> val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Future<C1> value, [Future<C1> val2]) {}
+  ArgumentsBindingSuper1_t02(Future<C1> value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Future<C1> value, {Future<C1> val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Future<C1> value, [Future<C1> val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Future<C1> val) {}
-  void superTestPositioned(Future<C1> val, [Future<C1> val2]) {}
-  void superTestNamed(Future<C1> val, {Future<C1> val2}) {}
+  void superTestPositioned(Future<C1> val, [Future<C1> val2 = t1Default]) {}
+  void superTestNamed(Future<C1> val, {Future<C1> val2 = t1Default}) {}
   Future<C1> get superGetter => forgetType(t0Instance);
   void set superSetter(Future<C1> val) {}
 }
@@ -71,8 +71,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -163,28 +161,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -199,42 +190,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -243,10 +198,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -300,34 +251,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -338,54 +289,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<C1>>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<Future<C1>>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<C1>>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<C1>>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<Future<C1>>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<C1>>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Future<C1>>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<C1>>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Future<C1>>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<C1>>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Future<C1>>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<C1>>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Future<C1>>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<C1>>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<C1>>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Future<C1>>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<Future<C1>>.valid().test();
+  new ArgumentsBinding2_t02<Future<C1>>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t01.dart
index e71ac5e..48eccc9 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t01.dart
@@ -32,31 +32,29 @@
 
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -64,18 +62,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -90,8 +83,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -115,25 +106,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<T1>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<T1>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<T1> instance2 =
       new ArgumentsBindingGen<T1>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t02.dart
index a5fb55e..8c79cfa 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t02.dart
@@ -36,21 +36,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -71,31 +70,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -105,7 +96,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -125,17 +115,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<T1> c2 =
     new ArgumentsBinding2_t02<T1>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t03.dart
index 690cbfe..5419a61 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t03.dart
@@ -34,11 +34,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -58,12 +58,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -71,13 +67,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -99,11 +90,7 @@
   ArgumentsBinding2_t03<T1> c2 = new ArgumentsBinding2_t03<T1>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t01.dart
index 8543ed1..3cde052 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t01.dart
@@ -33,31 +33,29 @@
 
 
 
+namedArgumentsFunc1(dynamic t1, {dynamic t2 = t1Default}) {}
+positionalArgumentsFunc1(dynamic t1, [dynamic t2 = t1Default]) {}
 
-namedArgumentsFunc1(dynamic t1, {dynamic t2}) {}
-positionalArgumentsFunc1(dynamic t1, [dynamic t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(dynamic t1) {}
 
-  ArgumentsBindingClass.named(dynamic t1, {dynamic t2}) {}
-  ArgumentsBindingClass.positional(dynamic t1, [dynamic t2]) {}
+  ArgumentsBindingClass.named(dynamic t1, {dynamic t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(dynamic t1, [dynamic t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(dynamic t1, {dynamic t2}) {
+  factory ArgumentsBindingClass.fNamed(dynamic t1, {dynamic t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(dynamic t1, [dynamic t2]) {
+  factory ArgumentsBindingClass.fPositional(dynamic t1, [dynamic t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(dynamic t1, {dynamic t2}) {}
-  static positionalArgumentsStaticMethod(dynamic t1, [dynamic t2]) {}
+  static namedArgumentsStaticMethod(dynamic t1, {dynamic t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(dynamic t1, [dynamic t2 = t1Default]) {}
 
-  namedArgumentsMethod(dynamic t1, {dynamic t2}) {}
-  positionalArgumentsMethod(dynamic t1, [dynamic t2]) {}
+  namedArgumentsMethod(dynamic t1, {dynamic t2 = t1Default}) {}
+  positionalArgumentsMethod(dynamic t1, [dynamic t2 = t1Default]) {}
 
   set testSetter(dynamic val) {}
 }
@@ -65,18 +63,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -91,8 +84,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -116,25 +107,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<dynamic>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<dynamic>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<dynamic> instance2 =
       new ArgumentsBindingGen<dynamic>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<dynamic>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<dynamic>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<dynamic>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<dynamic>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t02.dart
index 6c3af2b..07d2969 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t02.dart
@@ -37,21 +37,20 @@
 class ArgumentsBindingSuper1_t02 {
   dynamic m;
 
-  ArgumentsBindingSuper1_t02(dynamic value) {}
-  ArgumentsBindingSuper1_t02.named(dynamic value, {dynamic val2}) {}
-  ArgumentsBindingSuper1_t02.positional(dynamic value, [dynamic val2]) {}
+  ArgumentsBindingSuper1_t02(dynamic value): m = value {}
+  ArgumentsBindingSuper1_t02.named(dynamic value, {dynamic val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(dynamic value, [dynamic val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(dynamic val) {}
-  void superTestPositioned(dynamic val, [dynamic val2]) {}
-  void superTestNamed(dynamic val, {dynamic val2}) {}
+  void superTestPositioned(dynamic val, [dynamic val2 = t1Default]) {}
+  void superTestNamed(dynamic val, {dynamic val2 = t1Default}) {}
   dynamic get superGetter => m;
   void set superSetter(dynamic val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -72,31 +71,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -106,7 +97,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -126,17 +116,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<dynamic> c2 =
     new ArgumentsBinding2_t02<dynamic>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<dynamic>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<dynamic>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<dynamic>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<dynamic>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<dynamic>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t03.dart
index 3f41e87..388f63a 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t03.dart
@@ -35,11 +35,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  dynamic m;
+  dynamic m = t1Default;
 
   void superTest(dynamic val) {}
-  void superTestPositioned(dynamic val, [dynamic val2]) {}
-  void superTestNamed(dynamic val, {dynamic val2}) {}
+  void superTestPositioned(dynamic val, [dynamic val2 = t1Default]) {}
+  void superTestNamed(dynamic val, {dynamic val2 = t1Default}) {}
   dynamic get superGetter => m;
   void set superSetter(dynamic val) {}
 }
@@ -59,12 +59,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -72,13 +68,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -100,11 +91,7 @@
   ArgumentsBinding2_t03<dynamic> c2 = new ArgumentsBinding2_t03<dynamic>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t01.dart
index 9b564d3..a10cca3 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t01.dart
@@ -34,31 +34,29 @@
 
 
 
+namedArgumentsFunc1(Object? t1, {Object? t2 = t1Default}) {}
+positionalArgumentsFunc1(Object? t1, [Object? t2 = t1Default]) {}
 
-namedArgumentsFunc1(Object? t1, {Object? t2}) {}
-positionalArgumentsFunc1(Object? t1, [Object? t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Object? t1) {}
 
-  ArgumentsBindingClass.named(Object? t1, {Object? t2}) {}
-  ArgumentsBindingClass.positional(Object? t1, [Object? t2]) {}
+  ArgumentsBindingClass.named(Object? t1, {Object? t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Object? t1, [Object? t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Object? t1, {Object? t2}) {
+  factory ArgumentsBindingClass.fNamed(Object? t1, {Object? t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Object? t1, [Object? t2]) {
+  factory ArgumentsBindingClass.fPositional(Object? t1, [Object? t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Object? t1, {Object? t2}) {}
-  static positionalArgumentsStaticMethod(Object? t1, [Object? t2]) {}
+  static namedArgumentsStaticMethod(Object? t1, {Object? t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Object? t1, [Object? t2 = t1Default]) {}
 
-  namedArgumentsMethod(Object? t1, {Object? t2}) {}
-  positionalArgumentsMethod(Object? t1, [Object? t2]) {}
+  namedArgumentsMethod(Object? t1, {Object? t2 = t1Default}) {}
+  positionalArgumentsMethod(Object? t1, [Object? t2 = t1Default]) {}
 
   set testSetter(Object? val) {}
 }
@@ -66,18 +64,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -92,8 +85,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -117,25 +108,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Object?>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Object?>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Object?> instance2 =
       new ArgumentsBindingGen<Object?>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Object?>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object?>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Object?>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object?>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t02.dart
index 3b5151e..df6a792 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t02.dart
@@ -38,21 +38,20 @@
 class ArgumentsBindingSuper1_t02 {
   Object? m;
 
-  ArgumentsBindingSuper1_t02(Object? value) {}
-  ArgumentsBindingSuper1_t02.named(Object? value, {Object? val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Object? value, [Object? val2]) {}
+  ArgumentsBindingSuper1_t02(Object? value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Object? value, {Object? val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Object? value, [Object? val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Object? val) {}
-  void superTestPositioned(Object? val, [Object? val2]) {}
-  void superTestNamed(Object? val, {Object? val2}) {}
+  void superTestPositioned(Object? val, [Object? val2 = t1Default]) {}
+  void superTestNamed(Object? val, {Object? val2 = t1Default}) {}
   Object? get superGetter => m;
   void set superSetter(Object? val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -73,31 +72,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -107,7 +98,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -127,17 +117,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Object?> c2 =
     new ArgumentsBinding2_t02<Object?>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object?>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Object?>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object?>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object?>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Object?>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t03.dart
index 8fdd27f..c261941 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t03.dart
@@ -36,11 +36,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Object? m;
+  Object? m = t1Default;
 
   void superTest(Object? val) {}
-  void superTestPositioned(Object? val, [Object? val2]) {}
-  void superTestNamed(Object? val, {Object? val2}) {}
+  void superTestPositioned(Object? val, [Object? val2 = t1Default]) {}
+  void superTestNamed(Object? val, {Object? val2 = t1Default}) {}
   Object? get superGetter => m;
   void set superSetter(Object? val) {}
 }
@@ -60,12 +60,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -73,13 +69,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -101,11 +92,7 @@
   ArgumentsBinding2_t03<Object?> c2 = new ArgumentsBinding2_t03<Object?>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A02_t01.dart
index 4d858ac..27e526b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A02_t01.dart
@@ -34,31 +34,29 @@
 
 
 
+namedArgumentsFunc1(Object? t1, {Object? t2 = t1Default}) {}
+positionalArgumentsFunc1(Object? t1, [Object? t2 = t1Default]) {}
 
-namedArgumentsFunc1(Object? t1, {Object? t2}) {}
-positionalArgumentsFunc1(Object? t1, [Object? t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Object? t1) {}
 
-  ArgumentsBindingClass.named(Object? t1, {Object? t2}) {}
-  ArgumentsBindingClass.positional(Object? t1, [Object? t2]) {}
+  ArgumentsBindingClass.named(Object? t1, {Object? t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Object? t1, [Object? t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Object? t1, {Object? t2}) {
+  factory ArgumentsBindingClass.fNamed(Object? t1, {Object? t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Object? t1, [Object? t2]) {
+  factory ArgumentsBindingClass.fPositional(Object? t1, [Object? t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Object? t1, {Object? t2}) {}
-  static positionalArgumentsStaticMethod(Object? t1, [Object? t2]) {}
+  static namedArgumentsStaticMethod(Object? t1, {Object? t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Object? t1, [Object? t2 = t1Default]) {}
 
-  namedArgumentsMethod(Object? t1, {Object? t2}) {}
-  positionalArgumentsMethod(Object? t1, [Object? t2]) {}
+  namedArgumentsMethod(Object? t1, {Object? t2 = t1Default}) {}
+  positionalArgumentsMethod(Object? t1, [Object? t2 = t1Default]) {}
 
   set testSetter(Object? val) {}
 }
@@ -66,18 +64,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -92,8 +85,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -117,25 +108,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Object?>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Object?>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Object?> instance2 =
       new ArgumentsBindingGen<Object?>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Object?>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object?>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Object?>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object?>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A02_t02.dart
index faedfb1..0c71b22 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A02_t02.dart
@@ -38,21 +38,20 @@
 class ArgumentsBindingSuper1_t02 {
   Object? m;
 
-  ArgumentsBindingSuper1_t02(Object? value) {}
-  ArgumentsBindingSuper1_t02.named(Object? value, {Object? val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Object? value, [Object? val2]) {}
+  ArgumentsBindingSuper1_t02(Object? value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Object? value, {Object? val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Object? value, [Object? val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Object? val) {}
-  void superTestPositioned(Object? val, [Object? val2]) {}
-  void superTestNamed(Object? val, {Object? val2}) {}
+  void superTestPositioned(Object? val, [Object? val2 = t1Default]) {}
+  void superTestNamed(Object? val, {Object? val2 = t1Default}) {}
   Object? get superGetter => m;
   void set superSetter(Object? val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -73,31 +72,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -107,7 +98,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -127,17 +117,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Object?> c2 =
     new ArgumentsBinding2_t02<Object?>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object?>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Object?>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object?>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object?>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Object?>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A02_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A02_t03.dart
index b19d24b..660ffb5 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A02_t03.dart
@@ -36,11 +36,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Object? m;
+  Object? m = t1Default;
 
   void superTest(Object? val) {}
-  void superTestPositioned(Object? val, [Object? val2]) {}
-  void superTestNamed(Object? val, {Object? val2}) {}
+  void superTestPositioned(Object? val, [Object? val2 = t1Default]) {}
+  void superTestNamed(Object? val, {Object? val2 = t1Default}) {}
   Object? get superGetter => m;
   void set superSetter(Object? val) {}
 }
@@ -60,12 +60,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -73,13 +69,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -101,11 +92,7 @@
   ArgumentsBinding2_t03<Object?> c2 = new ArgumentsBinding2_t03<Object?>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_arguments_binding_A01_t01.dart
index e8b5ddf..4d8f117 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_arguments_binding_A01_t01.dart
@@ -36,31 +36,29 @@
 
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -68,18 +66,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -94,8 +87,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -119,25 +110,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<T1>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<T1>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<T1> instance2 =
       new ArgumentsBindingGen<T1>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_arguments_binding_A01_t02.dart
index 4fd997d..ad190e3 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_arguments_binding_A01_t02.dart
@@ -40,21 +40,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -75,31 +74,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -109,7 +100,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -129,17 +119,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<T1> c2 =
     new ArgumentsBinding2_t02<T1>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_arguments_binding_A01_t03.dart
index eae5821..dfdacb5 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_arguments_binding_A01_t03.dart
@@ -38,11 +38,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -62,12 +62,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -75,13 +71,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -103,11 +94,7 @@
   ArgumentsBinding2_t03<T1> c2 = new ArgumentsBinding2_t03<T1>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_fail_arguments_binding_fail_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_fail_arguments_binding_fail_A01_t01.dart
index 8ba78d6..7d0e95a 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_fail_arguments_binding_fail_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_fail_arguments_binding_fail_A01_t01.dart
@@ -38,30 +38,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -69,18 +67,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -125,14 +118,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -198,81 +183,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<T1>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_fail_arguments_binding_fail_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_fail_arguments_binding_fail_A01_t02.dart
index 207c6f7..0d9c070 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_fail_arguments_binding_fail_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_type_variable_bound_fail_arguments_binding_fail_A01_t02.dart
@@ -41,14 +41,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -61,8 +61,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -153,28 +151,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -189,42 +180,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -233,10 +188,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -290,34 +241,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -328,54 +279,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<T1>.valid().test();
+  new ArgumentsBinding2_t02<T1>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A01_t01.dart
index 0f9f563..fd110d4 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A01_t01.dart
@@ -57,31 +57,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -89,18 +87,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -115,8 +108,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -140,25 +131,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<T1>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<T1>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<T1> instance2 =
       new ArgumentsBindingGen<T1>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A01_t02.dart
index 0dc3cdd..1b8354d 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A01_t02.dart
@@ -61,21 +61,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -96,31 +95,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -130,7 +121,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -150,17 +140,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<T1> c2 =
     new ArgumentsBinding2_t02<T1>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A01_t03.dart
index 2e98c4a..a88b881 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A01_t03.dart
@@ -59,11 +59,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -83,12 +83,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -96,13 +92,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -124,11 +115,7 @@
   ArgumentsBinding2_t03<T1> c2 = new ArgumentsBinding2_t03<T1>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A02_t01.dart
index 7ef0db5..b277787 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A02_t01.dart
@@ -93,31 +93,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -125,18 +123,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -151,8 +144,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A02_t02.dart
index 72afb59..48f8ebb 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A02_t02.dart
@@ -97,21 +97,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -132,31 +131,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -166,7 +157,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A02_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A02_t03.dart
index e5fb5f2..0dde944 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A02_t03.dart
@@ -95,11 +95,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -119,12 +119,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -132,13 +128,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A03_t01.dart
index 80963aa..9cbe13a 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A03_t01.dart
@@ -93,31 +93,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -125,18 +123,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -151,8 +144,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A03_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A03_t02.dart
index aa87076..1d43b9c 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A03_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A03_t02.dart
@@ -97,21 +97,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -132,31 +131,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -166,7 +157,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A03_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A03_t03.dart
index 59986c0..57f2843 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A03_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A03_t03.dart
@@ -95,11 +95,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -119,12 +119,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -132,13 +128,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A04_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A04_t01.dart
index d9940bd..1203f97 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A04_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A04_t01.dart
@@ -93,31 +93,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -125,18 +123,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -151,8 +144,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A04_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A04_t02.dart
index 9f184b0..42143ca 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A04_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A04_t02.dart
@@ -97,21 +97,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -132,31 +131,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -166,7 +157,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A04_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A04_t03.dart
index 99f2009..57b2b45 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A04_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A04_t03.dart
@@ -95,11 +95,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -119,12 +119,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -132,13 +128,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A05_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A05_t01.dart
index 78f950e..f161a74 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A05_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A05_t01.dart
@@ -75,31 +75,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -107,18 +105,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -133,8 +126,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A05_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A05_t02.dart
index 1b1fc14..9c65d66 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A05_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A05_t02.dart
@@ -79,21 +79,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -114,31 +113,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -148,7 +139,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A05_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A05_t03.dart
index d001816..d44049a 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A05_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_arguments_binding_A05_t03.dart
@@ -77,11 +77,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -101,12 +101,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -114,13 +110,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A11_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A11_t01.dart
index b8083e1..de83888 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A11_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A11_t01.dart
@@ -59,30 +59,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -90,18 +88,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -146,14 +139,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -219,81 +204,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<T1>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A11_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A11_t02.dart
index 2e3e928..879b957 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A11_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A11_t02.dart
@@ -62,14 +62,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -82,8 +82,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -174,28 +172,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -210,42 +201,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -254,10 +209,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -311,34 +262,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -349,54 +300,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<T1>.valid().test();
+  new ArgumentsBinding2_t02<T1>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A12_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A12_t01.dart
index 572215c..34aeb08 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A12_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A12_t01.dart
@@ -68,30 +68,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -99,18 +97,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -155,14 +148,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A12_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A12_t02.dart
index 0388d08..e250f70 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A12_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A12_t02.dart
@@ -71,14 +71,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -91,8 +91,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -183,28 +181,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -219,42 +210,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -263,10 +218,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -320,34 +271,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A21_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A21_t01.dart
index d45b036..3adf8af 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A21_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A21_t01.dart
Binary files differ
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A21_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A21_t02.dart
index 0d29306..2083974 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A21_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A21_t02.dart
Binary files differ
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A22_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A22_t01.dart
index 3504512..00544d7 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A22_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A22_t01.dart
@@ -96,30 +96,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -127,18 +125,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -183,14 +176,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A22_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A22_t02.dart
index 0b8c727..50aa762 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A22_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A22_t02.dart
@@ -99,14 +99,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -119,8 +119,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -211,28 +209,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -247,42 +238,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -291,10 +246,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -348,34 +299,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A23_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A23_t01.dart
index 13d66ca..a43746c 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A23_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A23_t01.dart
Binary files differ
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A23_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A23_t02.dart
index f68b5b4..4d06709 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A23_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A23_t02.dart
Binary files differ
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A31_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A31_t01.dart
index 8e6ca1b..b29a648 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A31_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A31_t01.dart
@@ -61,30 +61,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -92,18 +90,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -148,14 +141,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -221,81 +206,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<T1>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A31_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A31_t02.dart
index a52dd79..40901f0 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A31_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A31_t02.dart
@@ -64,14 +64,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -84,8 +84,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -176,28 +174,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -212,42 +203,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -256,10 +211,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -313,34 +264,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -351,54 +302,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<T1>.valid().test();
+  new ArgumentsBinding2_t02<T1>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A32_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A32_t01.dart
index ef7cc80..286d306 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A32_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A32_t01.dart
@@ -96,30 +96,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -127,18 +125,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -183,14 +176,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A32_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A32_t02.dart
index 66733b5..7d769c6 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A32_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A32_t02.dart
@@ -99,14 +99,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -119,8 +119,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -211,28 +209,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -247,42 +238,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -291,10 +246,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -348,34 +299,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A33_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A33_t01.dart
index 5b28170..82f23b2 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A33_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A33_t01.dart
@@ -78,30 +78,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -109,18 +107,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -165,14 +158,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A33_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A33_t02.dart
index 33fc07a..fbe5220 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A33_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A33_t02.dart
@@ -81,14 +81,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -101,8 +101,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -193,28 +191,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -229,42 +220,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -273,10 +228,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -330,34 +281,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A41_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A41_t01.dart
index b9e6ce1..93ba659 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A41_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A41_t01.dart
@@ -60,30 +60,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -91,18 +89,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -147,14 +140,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -220,81 +205,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<T1>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A41_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A41_t02.dart
index 480493a..5729ef8 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A41_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A41_t02.dart
@@ -63,14 +63,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -83,8 +83,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -175,28 +173,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -211,42 +202,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -255,10 +210,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -312,34 +263,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -350,54 +301,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<T1>.valid().test();
+  new ArgumentsBinding2_t02<T1>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A42_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A42_t01.dart
index dd8d69f..9723300 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A42_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A42_t01.dart
@@ -93,30 +93,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -124,18 +122,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -180,14 +173,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A42_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A42_t02.dart
index 5f77c79..91711e1 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A42_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A42_t02.dart
@@ -96,14 +96,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -116,8 +116,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -208,28 +206,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -244,42 +235,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -288,10 +243,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -345,34 +296,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A43_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A43_t01.dart
index 6be2409..b40f7bd 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A43_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A43_t01.dart
@@ -77,30 +77,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -108,18 +106,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -164,14 +157,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A43_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A43_t02.dart
index 4babf07..6eec471 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A43_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A43_t02.dart
@@ -80,14 +80,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -100,8 +100,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -192,28 +190,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -228,42 +219,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -272,10 +227,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -329,34 +280,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t01.dart
index 2eb86a8..e92973d 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t01.dart
@@ -66,30 +66,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -97,18 +95,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -153,14 +146,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t02.dart
index a2807f4..3bf9038 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t02.dart
@@ -69,14 +69,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -89,8 +89,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -181,28 +179,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -217,42 +208,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -261,10 +216,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -318,34 +269,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A52_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A52_t01.dart
index f30d317..5d7198f 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A52_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A52_t01.dart
@@ -93,30 +93,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -124,18 +122,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -180,14 +173,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A52_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A52_t02.dart
index 234038f..1622594 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A52_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A52_t02.dart
@@ -96,14 +96,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -116,8 +116,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -208,28 +206,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -244,42 +235,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -288,10 +243,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -345,34 +296,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A53_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A53_t01.dart
index 8044bb1..022c4bb 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A53_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A53_t01.dart
@@ -77,30 +77,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -108,18 +106,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -164,14 +157,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A53_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A53_t02.dart
index 01457d8..58c6753 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A53_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A53_t02.dart
@@ -80,14 +80,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -100,8 +100,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -192,28 +190,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -228,42 +219,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -272,10 +227,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -329,34 +280,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A01_t01.dart
index 12e1a0f..95b33ea 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A01_t01.dart
@@ -56,31 +56,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -88,18 +86,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -114,8 +107,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -139,25 +130,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<T1>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<T1>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<T1> instance2 =
       new ArgumentsBindingGen<T1>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A01_t02.dart
index cc95494..0d751e9 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A01_t02.dart
@@ -60,21 +60,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -95,31 +94,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -129,7 +120,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -149,17 +139,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<T1> c2 =
     new ArgumentsBinding2_t02<T1>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A01_t03.dart
index 3ee9ef6..06654f2 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A01_t03.dart
@@ -58,11 +58,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -82,12 +82,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -95,13 +91,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -123,11 +114,7 @@
   ArgumentsBinding2_t03<T1> c2 = new ArgumentsBinding2_t03<T1>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A02_t01.dart
index 08b85ac..71f10bd 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A02_t01.dart
@@ -57,31 +57,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -89,18 +87,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -115,8 +108,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -140,25 +131,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<T1>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<T1>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<T1> instance2 =
       new ArgumentsBindingGen<T1>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A02_t02.dart
index 310a5c2..f1377d3 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A02_t02.dart
@@ -61,21 +61,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -96,31 +95,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -130,7 +121,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -150,17 +140,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<T1> c2 =
     new ArgumentsBinding2_t02<T1>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A02_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A02_t03.dart
index 9ae501d..15f71e3 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A02_t03.dart
@@ -59,11 +59,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -83,12 +83,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -96,13 +92,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -124,11 +115,7 @@
   ArgumentsBinding2_t03<T1> c2 = new ArgumentsBinding2_t03<T1>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A03_t01.dart
index 1ddf630..6e516db 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A03_t01.dart
@@ -57,31 +57,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -89,18 +87,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -115,8 +108,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -140,25 +131,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<T1>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<T1>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<T1> instance2 =
       new ArgumentsBindingGen<T1>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A03_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A03_t02.dart
index 72205ba..41da80a 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A03_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A03_t02.dart
@@ -61,21 +61,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -96,31 +95,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -130,7 +121,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -150,17 +140,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<T1> c2 =
     new ArgumentsBinding2_t02<T1>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A03_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A03_t03.dart
index 0e3f520..14a9e30 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A03_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A03_t03.dart
@@ -59,11 +59,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -83,12 +83,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -96,13 +92,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -124,11 +115,7 @@
   ArgumentsBinding2_t03<T1> c2 = new ArgumentsBinding2_t03<T1>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A04_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A04_t01.dart
index b1a6dd1..a053963 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A04_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A04_t01.dart
@@ -58,31 +58,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -90,18 +88,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -116,8 +109,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -141,25 +132,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<T1>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<T1>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<T1> instance2 =
       new ArgumentsBindingGen<T1>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A04_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A04_t02.dart
index a31cebc..20c5bf0 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A04_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A04_t02.dart
@@ -62,21 +62,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -97,31 +96,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -131,7 +122,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -151,17 +141,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<T1> c2 =
     new ArgumentsBinding2_t02<T1>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A04_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A04_t03.dart
index 00aa8d1..220b87b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A04_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A04_t03.dart
@@ -60,11 +60,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -84,12 +84,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -97,13 +93,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -125,11 +116,7 @@
   ArgumentsBinding2_t03<T1> c2 = new ArgumentsBinding2_t03<T1>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A11_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A11_t01.dart
index 54f6e9c..8598f9b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A11_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A11_t01.dart
@@ -92,31 +92,29 @@
 bool isGenericFunctionType = true;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -124,18 +122,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -150,8 +143,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A11_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A11_t02.dart
index 8c1762e..bd9d3b3 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A11_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A11_t02.dart
@@ -96,21 +96,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -131,31 +130,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -165,7 +156,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A11_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A11_t03.dart
index 6b2ddda..8ce2773 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A11_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A11_t03.dart
@@ -94,11 +94,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -118,12 +118,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -131,13 +127,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A12_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A12_t01.dart
index 246d242..7843522 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A12_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A12_t01.dart
@@ -94,31 +94,29 @@
 bool isGenericFunctionType = true;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -126,18 +124,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -152,8 +145,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A12_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A12_t02.dart
index 413f6bc..e102dac 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A12_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A12_t02.dart
@@ -98,21 +98,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -133,31 +132,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -167,7 +158,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A12_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A12_t03.dart
index c7cf9d4..d7cdb2a 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A12_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A12_t03.dart
@@ -96,11 +96,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -120,12 +120,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -133,13 +129,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A13_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A13_t01.dart
index 8a323b7..340dff9 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A13_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A13_t01.dart
@@ -94,31 +94,29 @@
 bool isGenericFunctionType = true;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -126,18 +124,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -152,8 +145,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A13_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A13_t02.dart
index 46b8416..bae6903 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A13_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A13_t02.dart
@@ -98,21 +98,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -133,31 +132,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -167,7 +158,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A13_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A13_t03.dart
index 706afae..d6d36eb 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A13_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A13_t03.dart
@@ -96,11 +96,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -120,12 +120,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -133,13 +129,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A14_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A14_t01.dart
index 772eb5f..45863cf 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A14_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A14_t01.dart
@@ -94,31 +94,29 @@
 bool isGenericFunctionType = true;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -126,18 +124,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -152,8 +145,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A14_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A14_t02.dart
index 3827939..816f456 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A14_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A14_t02.dart
@@ -98,21 +98,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -133,31 +132,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -167,7 +158,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A14_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A14_t03.dart
index b835cc5..898c45e 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A14_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A14_t03.dart
@@ -96,11 +96,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -120,12 +120,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -133,13 +129,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A21_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A21_t01.dart
index 49e5a92..75ac152 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A21_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A21_t01.dart
@@ -94,31 +94,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -126,18 +124,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -152,8 +145,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A21_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A21_t02.dart
index bc2fa20..a6f4147 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A21_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A21_t02.dart
@@ -98,21 +98,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -133,31 +132,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -167,7 +158,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A21_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A21_t03.dart
index 1a58d24..1d28a92 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A21_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A21_t03.dart
@@ -96,11 +96,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -120,12 +120,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -133,13 +129,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A22_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A22_t01.dart
index 43de74c..0e3cac4 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A22_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A22_t01.dart
@@ -97,31 +97,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -129,18 +127,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -155,8 +148,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A22_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A22_t02.dart
index 8d93d0b..1f0d563 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A22_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A22_t02.dart
@@ -101,21 +101,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -136,31 +135,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -170,7 +161,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A22_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A22_t03.dart
index 6414d5e..437a2f4 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A22_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A22_t03.dart
@@ -99,11 +99,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -123,12 +123,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -136,13 +132,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A23_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A23_t01.dart
index f6c5316..466c167 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A23_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A23_t01.dart
@@ -97,31 +97,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -129,18 +127,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -155,8 +148,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A23_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A23_t02.dart
index 62c3a09..cb2aadc 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A23_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A23_t02.dart
@@ -101,21 +101,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -136,31 +135,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -170,7 +161,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A23_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A23_t03.dart
index cc08b40..8a52890 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A23_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A23_t03.dart
@@ -99,11 +99,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -123,12 +123,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -136,13 +132,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A24_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A24_t01.dart
index 9ec2e3e..381f230 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A24_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A24_t01.dart
@@ -95,31 +95,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -127,18 +125,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -153,8 +146,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A24_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A24_t02.dart
index f0a4748..57122e3 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A24_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A24_t02.dart
@@ -99,21 +99,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -134,31 +133,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -168,7 +159,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A24_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A24_t03.dart
index b935609..87d113b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A24_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A24_t03.dart
@@ -97,11 +97,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -121,12 +121,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -134,13 +130,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A31_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A31_t01.dart
index 840aa6d..d591e9b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A31_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A31_t01.dart
@@ -93,31 +93,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -125,18 +123,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -151,8 +144,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A31_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A31_t02.dart
index af46751..ce7711a 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A31_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A31_t02.dart
@@ -97,21 +97,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -132,31 +131,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -166,7 +157,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A31_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A31_t03.dart
index 41d1fcc..c3a523c 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A31_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A31_t03.dart
@@ -95,11 +95,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -119,12 +119,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -132,13 +128,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A32_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A32_t01.dart
index d4713f2..80c0da0 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A32_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A32_t01.dart
@@ -93,31 +93,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -125,18 +123,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -151,8 +144,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A32_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A32_t02.dart
index 7ea841c..f88fe9a 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A32_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A32_t02.dart
@@ -97,21 +97,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -132,31 +131,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -166,7 +157,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A32_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A32_t03.dart
index 1c30fd4..68b22d9 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A32_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A32_t03.dart
@@ -95,11 +95,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -119,12 +119,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -132,13 +128,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A33_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A33_t01.dart
index 12ac8c4..48ba1ac 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A33_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A33_t01.dart
@@ -93,31 +93,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -125,18 +123,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -151,8 +144,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A33_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A33_t02.dart
index 76ccdcc..702f5a7 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A33_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A33_t02.dart
@@ -97,21 +97,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -132,31 +131,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -166,7 +157,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A33_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A33_t03.dart
index c3b68d5..41c716e 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A33_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A33_t03.dart
@@ -95,11 +95,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -119,12 +119,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -132,13 +128,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A34_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A34_t01.dart
index 51e19c2..1376a81 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A34_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A34_t01.dart
@@ -93,31 +93,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -125,18 +123,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -151,8 +144,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A34_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A34_t02.dart
index 98c4320..4be4f84 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A34_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A34_t02.dart
@@ -97,21 +97,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -132,31 +131,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -166,7 +157,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A34_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A34_t03.dart
index 89b7273..6e5aa10 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A34_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A34_t03.dart
@@ -95,11 +95,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -119,12 +119,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -132,13 +128,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A41_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A41_t01.dart
index 02c4332..739cbb6 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A41_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A41_t01.dart
@@ -75,31 +75,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -107,18 +105,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -133,8 +126,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A41_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A41_t02.dart
index 412ab4f..abfa805 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A41_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A41_t02.dart
@@ -79,21 +79,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -114,31 +113,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -148,7 +139,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A41_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A41_t03.dart
index df26e42..2eca838 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A41_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A41_t03.dart
@@ -77,11 +77,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -101,12 +101,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -114,13 +110,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A42_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A42_t01.dart
index d7b29f8..cf2c462 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A42_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A42_t01.dart
@@ -75,31 +75,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -107,18 +105,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -133,8 +126,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A42_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A42_t02.dart
index b56ff1d..9eec908 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A42_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A42_t02.dart
@@ -79,21 +79,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -114,31 +113,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -148,7 +139,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A42_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A42_t03.dart
index 75f98b2..0df4e31 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A42_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A42_t03.dart
@@ -77,11 +77,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -101,12 +101,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -114,13 +110,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A43_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A43_t01.dart
index d18b004..23e01a2 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A43_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A43_t01.dart
@@ -75,31 +75,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -107,18 +105,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -133,8 +126,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A43_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A43_t02.dart
index 47e657d..d732cbd 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A43_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A43_t02.dart
@@ -79,21 +79,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -114,31 +113,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -148,7 +139,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A43_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A43_t03.dart
index 0410f4e..d09b005 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A43_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A43_t03.dart
@@ -77,11 +77,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -101,12 +101,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -114,13 +110,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A44_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A44_t01.dart
index f3ffe97..7c75b21 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A44_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A44_t01.dart
@@ -75,31 +75,29 @@
 T1 t1Instance = t1Func;
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -107,18 +105,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -133,8 +126,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A44_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A44_t02.dart
index 1bcf347..3756442 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A44_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A44_t02.dart
@@ -79,21 +79,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -114,31 +113,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -148,7 +139,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A44_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A44_t03.dart
index bbc753f..5ba553b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A44_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_arguments_binding_A44_t03.dart
@@ -77,11 +77,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -101,12 +101,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -114,13 +110,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A01_t01.dart
index 7e13856..838fb4d 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A01_t01.dart
@@ -57,30 +57,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -88,18 +86,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -144,14 +137,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -217,81 +202,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<T1>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A01_t02.dart
index ee07a45..a11216b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A01_t02.dart
@@ -60,14 +60,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -80,8 +80,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -172,28 +170,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -208,42 +199,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -252,10 +207,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -309,34 +260,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -347,54 +298,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<T1>.valid().test();
+  new ArgumentsBinding2_t02<T1>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A02_t01.dart
index e2249f8..32582e4 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A02_t01.dart
@@ -58,30 +58,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -89,18 +87,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -145,14 +138,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -218,81 +203,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<T1>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A02_t02.dart
index 667ab88..07b67b4 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A02_t02.dart
@@ -61,14 +61,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -81,8 +81,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -173,28 +171,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -209,42 +200,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -253,10 +208,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -310,34 +261,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -348,54 +299,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<T1>.valid().test();
+  new ArgumentsBinding2_t02<T1>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A03_t01.dart
index c0e3ef3..4dd7582 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A03_t01.dart
@@ -57,30 +57,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -88,18 +86,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -144,14 +137,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -217,81 +202,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<T1>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A03_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A03_t02.dart
index 7337314..251c5ae 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A03_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A03_t02.dart
@@ -60,14 +60,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -80,8 +80,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -172,28 +170,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -208,42 +199,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -252,10 +207,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -309,34 +260,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -347,54 +298,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<T1>.valid().test();
+  new ArgumentsBinding2_t02<T1>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A04_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A04_t01.dart
index 0d87326..47ef844 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A04_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A04_t01.dart
@@ -57,30 +57,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -88,18 +86,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -144,14 +137,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -217,81 +202,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<T1>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A04_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A04_t02.dart
index b12b4e0..cc620d1 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A04_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A04_t02.dart
@@ -60,14 +60,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -80,8 +80,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -172,28 +170,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -208,42 +199,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -252,10 +207,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -309,34 +260,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -347,54 +298,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<T1>.valid().test();
+  new ArgumentsBinding2_t02<T1>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A05_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A05_t01.dart
index 69f547f..0afaf92 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A05_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A05_t01.dart
@@ -88,30 +88,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -119,18 +117,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -175,14 +168,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A05_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A05_t02.dart
index d546919..ade2842 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A05_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A05_t02.dart
@@ -91,14 +91,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -111,8 +111,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -203,28 +201,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -239,42 +230,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -283,10 +238,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -340,34 +291,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A06_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A06_t01.dart
index 20ef5f3..1064128 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A06_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A06_t01.dart
@@ -88,30 +88,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -119,18 +117,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -175,14 +168,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A06_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A06_t02.dart
index 13ddb15..2073137 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A06_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A06_t02.dart
@@ -91,14 +91,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -111,8 +111,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -203,28 +201,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -239,42 +230,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -283,10 +238,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -340,34 +291,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A07_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A07_t01.dart
index abaf281..b280c08 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A07_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A07_t01.dart
@@ -88,30 +88,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -119,18 +117,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -175,14 +168,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A07_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A07_t02.dart
index 3974271..730b96c 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A07_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A07_t02.dart
@@ -91,14 +91,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -111,8 +111,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -203,28 +201,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -239,42 +230,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -283,10 +238,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -340,34 +291,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A08_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A08_t01.dart
index 6a6ad9c..5451ae7 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A08_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A08_t01.dart
@@ -86,30 +86,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -117,18 +115,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -173,14 +166,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A08_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A08_t02.dart
index 46ce61b..42cc4d7 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A08_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A08_t02.dart
@@ -89,14 +89,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -109,8 +109,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -201,28 +199,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -237,42 +228,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -281,10 +236,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -338,34 +289,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A11_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A11_t01.dart
index a676a04..c794c07 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A11_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A11_t01.dart
@@ -60,30 +60,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -91,18 +89,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -147,14 +140,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -220,81 +205,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<T1>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A11_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A11_t02.dart
index b113f9a..06aea4c 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A11_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A11_t02.dart
@@ -63,14 +63,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -83,8 +83,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -175,28 +173,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -211,42 +202,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -255,10 +210,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -312,34 +263,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -350,54 +301,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<T1>.valid().test();
+  new ArgumentsBinding2_t02<T1>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A12_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A12_t01.dart
index c34cc35..da2945b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A12_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A12_t01.dart
@@ -89,30 +89,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -120,18 +118,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -176,14 +169,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A12_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A12_t02.dart
index 944bd14..4a42ae3 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A12_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A12_t02.dart
@@ -92,14 +92,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -112,8 +112,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -204,28 +202,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -240,42 +231,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -284,10 +239,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -341,34 +292,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A21_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A21_t01.dart
index 083ccf6..f900d4b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A21_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A21_t01.dart
@@ -60,30 +60,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -91,18 +89,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -147,14 +140,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -220,81 +205,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<T1>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A21_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A21_t02.dart
index a9a450e..eb4d5fa 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A21_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A21_t02.dart
@@ -63,14 +63,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -83,8 +83,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -175,28 +173,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -211,42 +202,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -255,10 +210,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -312,34 +263,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -350,54 +301,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<T1>.valid().test();
+  new ArgumentsBinding2_t02<T1>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A22_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A22_t01.dart
index 98c9d19..2cb89b4 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A22_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A22_t01.dart
@@ -88,30 +88,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -119,18 +117,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -175,14 +168,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A22_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A22_t02.dart
index 56b59c0..c8f24e1 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A22_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A22_t02.dart
@@ -91,14 +91,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -111,8 +111,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -203,28 +201,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -239,42 +230,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -283,10 +238,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -340,34 +291,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t01.dart
index 4b908c9..13f4840 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t01.dart
@@ -78,30 +78,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -109,18 +107,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -165,14 +158,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t02.dart
index ce45f02..5e0dd45 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t02.dart
@@ -81,14 +81,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -101,8 +101,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -193,28 +191,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -229,42 +220,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -273,10 +228,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -330,34 +281,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t01.dart
index 2d5500f..9eb002a 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t01.dart
@@ -89,30 +89,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -120,18 +118,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -176,14 +169,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t02.dart
index f925c6c..ef7916a 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t02.dart
@@ -92,14 +92,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -112,8 +112,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -204,28 +202,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -240,42 +231,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -284,10 +239,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -341,34 +292,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A01_t01.dart
index e9d2ef2..af1e557 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A01_t01.dart
@@ -33,31 +33,29 @@
 
 
 
+namedArgumentsFunc1(T t1, {T t2 = t1Default}) {}
+positionalArgumentsFunc1(T t1, [T t2 = t1Default]) {}
 
-namedArgumentsFunc1(T t1, {T t2}) {}
-positionalArgumentsFunc1(T t1, [T t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T t1) {}
 
-  ArgumentsBindingClass.named(T t1, {T t2}) {}
-  ArgumentsBindingClass.positional(T t1, [T t2]) {}
+  ArgumentsBindingClass.named(T t1, {T t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T t1, [T t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T t1, {T t2}) {
+  factory ArgumentsBindingClass.fNamed(T t1, {T t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T t1, [T t2]) {
+  factory ArgumentsBindingClass.fPositional(T t1, [T t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T t1, {T t2}) {}
-  static positionalArgumentsStaticMethod(T t1, [T t2]) {}
+  static namedArgumentsStaticMethod(T t1, {T t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T t1, [T t2 = t1Default]) {}
 
-  namedArgumentsMethod(T t1, {T t2}) {}
-  positionalArgumentsMethod(T t1, [T t2]) {}
+  namedArgumentsMethod(T t1, {T t2 = t1Default}) {}
+  positionalArgumentsMethod(T t1, [T t2 = t1Default]) {}
 
   set testSetter(T val) {}
 }
@@ -65,18 +63,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -91,8 +84,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -116,25 +107,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<T>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<T>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<T> instance2 =
       new ArgumentsBindingGen<T>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A01_t02.dart
index 8f37cbe..2b59850 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A01_t02.dart
@@ -37,21 +37,20 @@
 class ArgumentsBindingSuper1_t02 {
   T m;
 
-  ArgumentsBindingSuper1_t02(T value) {}
-  ArgumentsBindingSuper1_t02.named(T value, {T val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T value, [T val2]) {}
+  ArgumentsBindingSuper1_t02(T value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T value, {T val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T value, [T val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T val) {}
-  void superTestPositioned(T val, [T val2]) {}
-  void superTestNamed(T val, {T val2}) {}
+  void superTestPositioned(T val, [T val2 = t1Default]) {}
+  void superTestNamed(T val, {T val2 = t1Default}) {}
   T get superGetter => m;
   void set superSetter(T val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -72,31 +71,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -106,7 +97,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -126,17 +116,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<T> c2 =
     new ArgumentsBinding2_t02<T>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A01_t03.dart
index 49ef4d2..a06b510 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A01_t03.dart
@@ -35,11 +35,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T m;
+  T m = t1Default;
 
   void superTest(T val) {}
-  void superTestPositioned(T val, [T val2]) {}
-  void superTestNamed(T val, {T val2}) {}
+  void superTestPositioned(T val, [T val2 = t1Default]) {}
+  void superTestNamed(T val, {T val2 = t1Default}) {}
   T get superGetter => m;
   void set superSetter(T val) {}
 }
@@ -59,12 +59,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -72,13 +68,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -100,11 +91,7 @@
   ArgumentsBinding2_t03<T> c2 = new ArgumentsBinding2_t03<T>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A02_t01.dart
index fa0b77b..73f59de 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A02_t01.dart
@@ -31,31 +31,29 @@
 
 
 
+namedArgumentsFunc1(dynamic t1, {dynamic t2 = t1Default}) {}
+positionalArgumentsFunc1(dynamic t1, [dynamic t2 = t1Default]) {}
 
-namedArgumentsFunc1(dynamic t1, {dynamic t2}) {}
-positionalArgumentsFunc1(dynamic t1, [dynamic t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(dynamic t1) {}
 
-  ArgumentsBindingClass.named(dynamic t1, {dynamic t2}) {}
-  ArgumentsBindingClass.positional(dynamic t1, [dynamic t2]) {}
+  ArgumentsBindingClass.named(dynamic t1, {dynamic t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(dynamic t1, [dynamic t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(dynamic t1, {dynamic t2}) {
+  factory ArgumentsBindingClass.fNamed(dynamic t1, {dynamic t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(dynamic t1, [dynamic t2]) {
+  factory ArgumentsBindingClass.fPositional(dynamic t1, [dynamic t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(dynamic t1, {dynamic t2}) {}
-  static positionalArgumentsStaticMethod(dynamic t1, [dynamic t2]) {}
+  static namedArgumentsStaticMethod(dynamic t1, {dynamic t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(dynamic t1, [dynamic t2 = t1Default]) {}
 
-  namedArgumentsMethod(dynamic t1, {dynamic t2}) {}
-  positionalArgumentsMethod(dynamic t1, [dynamic t2]) {}
+  namedArgumentsMethod(dynamic t1, {dynamic t2 = t1Default}) {}
+  positionalArgumentsMethod(dynamic t1, [dynamic t2 = t1Default]) {}
 
   set testSetter(dynamic val) {}
 }
@@ -63,18 +61,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -89,8 +82,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -114,25 +105,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<dynamic>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<dynamic>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<dynamic> instance2 =
       new ArgumentsBindingGen<dynamic>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<dynamic>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<dynamic>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<dynamic>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<dynamic>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A02_t02.dart
index b8a6bfa..2991166 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A02_t02.dart
@@ -35,21 +35,20 @@
 class ArgumentsBindingSuper1_t02 {
   dynamic m;
 
-  ArgumentsBindingSuper1_t02(dynamic value) {}
-  ArgumentsBindingSuper1_t02.named(dynamic value, {dynamic val2}) {}
-  ArgumentsBindingSuper1_t02.positional(dynamic value, [dynamic val2]) {}
+  ArgumentsBindingSuper1_t02(dynamic value): m = value {}
+  ArgumentsBindingSuper1_t02.named(dynamic value, {dynamic val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(dynamic value, [dynamic val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(dynamic val) {}
-  void superTestPositioned(dynamic val, [dynamic val2]) {}
-  void superTestNamed(dynamic val, {dynamic val2}) {}
+  void superTestPositioned(dynamic val, [dynamic val2 = t1Default]) {}
+  void superTestNamed(dynamic val, {dynamic val2 = t1Default}) {}
   dynamic get superGetter => m;
   void set superSetter(dynamic val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -70,31 +69,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -104,7 +95,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -124,17 +114,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<dynamic> c2 =
     new ArgumentsBinding2_t02<dynamic>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<dynamic>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<dynamic>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<dynamic>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<dynamic>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<dynamic>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A02_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A02_t03.dart
index be97495..4fcb7d9 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A02_t03.dart
@@ -33,11 +33,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  dynamic m;
+  dynamic m = t1Default;
 
   void superTest(dynamic val) {}
-  void superTestPositioned(dynamic val, [dynamic val2]) {}
-  void superTestNamed(dynamic val, {dynamic val2}) {}
+  void superTestPositioned(dynamic val, [dynamic val2 = t1Default]) {}
+  void superTestNamed(dynamic val, {dynamic val2 = t1Default}) {}
   dynamic get superGetter => m;
   void set superSetter(dynamic val) {}
 }
@@ -57,12 +57,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -70,13 +66,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -98,11 +89,7 @@
   ArgumentsBinding2_t03<dynamic> c2 = new ArgumentsBinding2_t03<dynamic>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A03_t01.dart
index aea6a6c..164f318 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A03_t01.dart
@@ -31,31 +31,29 @@
 
 
 
+namedArgumentsFunc1(Object t1, {Object t2 = t1Default}) {}
+positionalArgumentsFunc1(Object t1, [Object t2 = t1Default]) {}
 
-namedArgumentsFunc1(Object t1, {Object t2}) {}
-positionalArgumentsFunc1(Object t1, [Object t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Object t1) {}
 
-  ArgumentsBindingClass.named(Object t1, {Object t2}) {}
-  ArgumentsBindingClass.positional(Object t1, [Object t2]) {}
+  ArgumentsBindingClass.named(Object t1, {Object t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Object t1, [Object t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2}) {
+  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2]) {
+  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Object t1, {Object t2}) {}
-  static positionalArgumentsStaticMethod(Object t1, [Object t2]) {}
+  static namedArgumentsStaticMethod(Object t1, {Object t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Object t1, [Object t2 = t1Default]) {}
 
-  namedArgumentsMethod(Object t1, {Object t2}) {}
-  positionalArgumentsMethod(Object t1, [Object t2]) {}
+  namedArgumentsMethod(Object t1, {Object t2 = t1Default}) {}
+  positionalArgumentsMethod(Object t1, [Object t2 = t1Default]) {}
 
   set testSetter(Object val) {}
 }
@@ -63,18 +61,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -89,8 +82,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -114,25 +105,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Object>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Object>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Object> instance2 =
       new ArgumentsBindingGen<Object>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Object>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Object>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A03_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A03_t02.dart
index 778b0ec..c23e6e5 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A03_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A03_t02.dart
@@ -35,21 +35,20 @@
 class ArgumentsBindingSuper1_t02 {
   Object m;
 
-  ArgumentsBindingSuper1_t02(Object value) {}
-  ArgumentsBindingSuper1_t02.named(Object value, {Object val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2]) {}
+  ArgumentsBindingSuper1_t02(Object value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Object value, {Object val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
+  void superTestPositioned(Object val, [Object val2 = t1Default]) {}
+  void superTestNamed(Object val, {Object val2 = t1Default}) {}
   Object get superGetter => m;
   void set superSetter(Object val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -70,31 +69,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -104,7 +95,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -124,17 +114,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Object> c2 =
     new ArgumentsBinding2_t02<Object>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Object>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Object>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A03_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A03_t03.dart
index d42cbe8..c3beb88 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A03_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A03_t03.dart
@@ -33,11 +33,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Object m;
+  Object m = t1Default;
 
   void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
+  void superTestPositioned(Object val, [Object val2 = t1Default]) {}
+  void superTestNamed(Object val, {Object val2 = t1Default}) {}
   Object get superGetter => m;
   void set superSetter(Object val) {}
 }
@@ -57,12 +57,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -70,13 +66,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -98,11 +89,7 @@
   ArgumentsBinding2_t03<Object> c2 = new ArgumentsBinding2_t03<Object>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A04_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A04_t01.dart
index 24146c5..7707bc9 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A04_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A04_t01.dart
@@ -31,31 +31,29 @@
 
 
 
+namedArgumentsFunc1(Null t1, {Null t2 = t1Default}) {}
+positionalArgumentsFunc1(Null t1, [Null t2 = t1Default]) {}
 
-namedArgumentsFunc1(Null t1, {Null t2}) {}
-positionalArgumentsFunc1(Null t1, [Null t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Null t1) {}
 
-  ArgumentsBindingClass.named(Null t1, {Null t2}) {}
-  ArgumentsBindingClass.positional(Null t1, [Null t2]) {}
+  ArgumentsBindingClass.named(Null t1, {Null t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Null t1, [Null t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Null t1, {Null t2}) {
+  factory ArgumentsBindingClass.fNamed(Null t1, {Null t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Null t1, [Null t2]) {
+  factory ArgumentsBindingClass.fPositional(Null t1, [Null t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Null t1, {Null t2}) {}
-  static positionalArgumentsStaticMethod(Null t1, [Null t2]) {}
+  static namedArgumentsStaticMethod(Null t1, {Null t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Null t1, [Null t2 = t1Default]) {}
 
-  namedArgumentsMethod(Null t1, {Null t2}) {}
-  positionalArgumentsMethod(Null t1, [Null t2]) {}
+  namedArgumentsMethod(Null t1, {Null t2 = t1Default}) {}
+  positionalArgumentsMethod(Null t1, [Null t2 = t1Default]) {}
 
   set testSetter(Null val) {}
 }
@@ -63,18 +61,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -89,8 +82,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -114,25 +105,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Null>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Null>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Null> instance2 =
       new ArgumentsBindingGen<Null>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Null>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Null>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Null>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Null>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A04_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A04_t02.dart
index 792aeeb..2747fd1 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A04_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A04_t02.dart
@@ -35,21 +35,20 @@
 class ArgumentsBindingSuper1_t02 {
   Null m;
 
-  ArgumentsBindingSuper1_t02(Null value) {}
-  ArgumentsBindingSuper1_t02.named(Null value, {Null val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Null value, [Null val2]) {}
+  ArgumentsBindingSuper1_t02(Null value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Null value, {Null val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Null value, [Null val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Null val) {}
-  void superTestPositioned(Null val, [Null val2]) {}
-  void superTestNamed(Null val, {Null val2}) {}
+  void superTestPositioned(Null val, [Null val2 = t1Default]) {}
+  void superTestNamed(Null val, {Null val2 = t1Default}) {}
   Null get superGetter => m;
   void set superSetter(Null val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -70,31 +69,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -104,7 +95,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -124,17 +114,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Null> c2 =
     new ArgumentsBinding2_t02<Null>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Null>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Null>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Null>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Null>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Null>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A04_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A04_t03.dart
index 69b5958..e4f5289 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A04_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/reflexivity_arguments_binding_A04_t03.dart
@@ -33,11 +33,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Null m;
+  Null m = t1Default;
 
   void superTest(Null val) {}
-  void superTestPositioned(Null val, [Null val2]) {}
-  void superTestNamed(Null val, {Null val2}) {}
+  void superTestPositioned(Null val, [Null val2 = t1Default]) {}
+  void superTestNamed(Null val, {Null val2 = t1Default}) {}
   Null get superGetter => m;
   void set superSetter(Null val) {}
 }
@@ -57,12 +57,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -70,13 +66,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -98,11 +89,7 @@
   ArgumentsBinding2_t03<Null> c2 = new ArgumentsBinding2_t03<Null>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A01_t01.dart
index 44800f6..4382717 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A01_t01.dart
@@ -46,31 +46,29 @@
 
 
 
+namedArgumentsFunc1(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+positionalArgumentsFunc1(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
-namedArgumentsFunc1(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-positionalArgumentsFunc1(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(FutureOr<S1> t1) {}
 
-  ArgumentsBindingClass.named(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  ArgumentsBindingClass.positional(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  ArgumentsBindingClass.named(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(FutureOr<S1> t1, {FutureOr<S1> t2}) {
+  factory ArgumentsBindingClass.fNamed(FutureOr<S1> t1, {FutureOr<S1> t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(FutureOr<S1> t1, [FutureOr<S1> t2]) {
+  factory ArgumentsBindingClass.fPositional(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  static positionalArgumentsStaticMethod(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  static namedArgumentsStaticMethod(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
-  namedArgumentsMethod(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  positionalArgumentsMethod(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  namedArgumentsMethod(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+  positionalArgumentsMethod(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
   set testSetter(FutureOr<S1> val) {}
 }
@@ -78,18 +76,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -104,8 +97,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -129,25 +120,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<FutureOr<S1>>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<FutureOr<S1>>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<FutureOr<S1>> instance2 =
       new ArgumentsBindingGen<FutureOr<S1>>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<FutureOr<S1>>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<FutureOr<S1>>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<FutureOr<S1>>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<FutureOr<S1>>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A01_t02.dart
index 075099c..b8029c3 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A01_t02.dart
@@ -50,21 +50,20 @@
 class ArgumentsBindingSuper1_t02 {
   FutureOr<S1> m;
 
-  ArgumentsBindingSuper1_t02(FutureOr<S1> value) {}
-  ArgumentsBindingSuper1_t02.named(FutureOr<S1> value, {FutureOr<S1> val2}) {}
-  ArgumentsBindingSuper1_t02.positional(FutureOr<S1> value, [FutureOr<S1> val2]) {}
+  ArgumentsBindingSuper1_t02(FutureOr<S1> value): m = value {}
+  ArgumentsBindingSuper1_t02.named(FutureOr<S1> value, {FutureOr<S1> val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(FutureOr<S1> value, [FutureOr<S1> val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(FutureOr<S1> val) {}
-  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2]) {}
-  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2}) {}
+  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2 = t1Default}) {}
   FutureOr<S1> get superGetter => m;
   void set superSetter(FutureOr<S1> val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -85,31 +84,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -119,7 +110,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -139,17 +129,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<FutureOr<S1>> c2 =
     new ArgumentsBinding2_t02<FutureOr<S1>>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A01_t03.dart
index 71ee388..875e79f 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A01_t03.dart
@@ -48,11 +48,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  FutureOr<S1> m;
+  FutureOr<S1> m = t1Default;
 
   void superTest(FutureOr<S1> val) {}
-  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2]) {}
-  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2}) {}
+  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2 = t1Default}) {}
   FutureOr<S1> get superGetter => m;
   void set superSetter(FutureOr<S1> val) {}
 }
@@ -72,12 +72,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -85,13 +81,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -113,11 +104,7 @@
   ArgumentsBinding2_t03<FutureOr<S1>> c2 = new ArgumentsBinding2_t03<FutureOr<S1>>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A02_t01.dart
index 1aa2c7c..48370f4 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A02_t01.dart
@@ -40,31 +40,29 @@
 
 
 
+namedArgumentsFunc1(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+positionalArgumentsFunc1(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
-namedArgumentsFunc1(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-positionalArgumentsFunc1(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(FutureOr<S1> t1) {}
 
-  ArgumentsBindingClass.named(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  ArgumentsBindingClass.positional(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  ArgumentsBindingClass.named(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(FutureOr<S1> t1, {FutureOr<S1> t2}) {
+  factory ArgumentsBindingClass.fNamed(FutureOr<S1> t1, {FutureOr<S1> t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(FutureOr<S1> t1, [FutureOr<S1> t2]) {
+  factory ArgumentsBindingClass.fPositional(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  static positionalArgumentsStaticMethod(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  static namedArgumentsStaticMethod(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
-  namedArgumentsMethod(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  positionalArgumentsMethod(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  namedArgumentsMethod(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+  positionalArgumentsMethod(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
   set testSetter(FutureOr<S1> val) {}
 }
@@ -72,18 +70,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -98,8 +91,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -123,25 +114,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<FutureOr<S1>>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<FutureOr<S1>>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<FutureOr<S1>> instance2 =
       new ArgumentsBindingGen<FutureOr<S1>>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<FutureOr<S1>>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<FutureOr<S1>>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<FutureOr<S1>>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<FutureOr<S1>>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A02_t02.dart
index 2e9501e..6eca94f 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A02_t02.dart
@@ -44,21 +44,20 @@
 class ArgumentsBindingSuper1_t02 {
   FutureOr<S1> m;
 
-  ArgumentsBindingSuper1_t02(FutureOr<S1> value) {}
-  ArgumentsBindingSuper1_t02.named(FutureOr<S1> value, {FutureOr<S1> val2}) {}
-  ArgumentsBindingSuper1_t02.positional(FutureOr<S1> value, [FutureOr<S1> val2]) {}
+  ArgumentsBindingSuper1_t02(FutureOr<S1> value): m = value {}
+  ArgumentsBindingSuper1_t02.named(FutureOr<S1> value, {FutureOr<S1> val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(FutureOr<S1> value, [FutureOr<S1> val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(FutureOr<S1> val) {}
-  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2]) {}
-  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2}) {}
+  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2 = t1Default}) {}
   FutureOr<S1> get superGetter => m;
   void set superSetter(FutureOr<S1> val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -79,31 +78,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -113,7 +104,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -133,17 +123,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<FutureOr<S1>> c2 =
     new ArgumentsBinding2_t02<FutureOr<S1>>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A02_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A02_t03.dart
index 3c676ec..dcf44d5 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A02_t03.dart
@@ -42,11 +42,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  FutureOr<S1> m;
+  FutureOr<S1> m = t1Default;
 
   void superTest(FutureOr<S1> val) {}
-  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2]) {}
-  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2}) {}
+  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2 = t1Default}) {}
   FutureOr<S1> get superGetter => m;
   void set superSetter(FutureOr<S1> val) {}
 }
@@ -66,12 +66,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -79,13 +75,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -107,11 +98,7 @@
   ArgumentsBinding2_t03<FutureOr<S1>> c2 = new ArgumentsBinding2_t03<FutureOr<S1>>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A03_t01.dart
index 63df27c..54e6a30 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A03_t01.dart
@@ -48,31 +48,29 @@
 
 
 
+namedArgumentsFunc1(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+positionalArgumentsFunc1(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
-namedArgumentsFunc1(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-positionalArgumentsFunc1(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(FutureOr<S1> t1) {}
 
-  ArgumentsBindingClass.named(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  ArgumentsBindingClass.positional(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  ArgumentsBindingClass.named(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(FutureOr<S1> t1, {FutureOr<S1> t2}) {
+  factory ArgumentsBindingClass.fNamed(FutureOr<S1> t1, {FutureOr<S1> t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(FutureOr<S1> t1, [FutureOr<S1> t2]) {
+  factory ArgumentsBindingClass.fPositional(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  static positionalArgumentsStaticMethod(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  static namedArgumentsStaticMethod(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
-  namedArgumentsMethod(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  positionalArgumentsMethod(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  namedArgumentsMethod(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+  positionalArgumentsMethod(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
   set testSetter(FutureOr<S1> val) {}
 }
@@ -80,18 +78,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -106,8 +99,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -131,25 +122,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<FutureOr<S1>>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<FutureOr<S1>>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<FutureOr<S1>> instance2 =
       new ArgumentsBindingGen<FutureOr<S1>>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<FutureOr<S1>>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<FutureOr<S1>>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<FutureOr<S1>>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<FutureOr<S1>>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A03_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A03_t02.dart
index cc9ce82..e56a325 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A03_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A03_t02.dart
@@ -52,21 +52,20 @@
 class ArgumentsBindingSuper1_t02 {
   FutureOr<S1> m;
 
-  ArgumentsBindingSuper1_t02(FutureOr<S1> value) {}
-  ArgumentsBindingSuper1_t02.named(FutureOr<S1> value, {FutureOr<S1> val2}) {}
-  ArgumentsBindingSuper1_t02.positional(FutureOr<S1> value, [FutureOr<S1> val2]) {}
+  ArgumentsBindingSuper1_t02(FutureOr<S1> value): m = value {}
+  ArgumentsBindingSuper1_t02.named(FutureOr<S1> value, {FutureOr<S1> val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(FutureOr<S1> value, [FutureOr<S1> val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(FutureOr<S1> val) {}
-  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2]) {}
-  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2}) {}
+  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2 = t1Default}) {}
   FutureOr<S1> get superGetter => m;
   void set superSetter(FutureOr<S1> val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -87,31 +86,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -121,7 +112,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -141,17 +131,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<FutureOr<S1>> c2 =
     new ArgumentsBinding2_t02<FutureOr<S1>>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A03_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A03_t03.dart
index c607b46..5275fb5 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A03_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A03_t03.dart
@@ -50,11 +50,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  FutureOr<S1> m;
+  FutureOr<S1> m = t1Default;
 
   void superTest(FutureOr<S1> val) {}
-  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2]) {}
-  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2}) {}
+  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2 = t1Default}) {}
   FutureOr<S1> get superGetter => m;
   void set superSetter(FutureOr<S1> val) {}
 }
@@ -74,12 +74,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -87,13 +83,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -115,11 +106,7 @@
   ArgumentsBinding2_t03<FutureOr<S1>> c2 = new ArgumentsBinding2_t03<FutureOr<S1>>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A04_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A04_t01.dart
index 6ff1aeb..c5ac51f 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A04_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A04_t01.dart
@@ -42,31 +42,29 @@
 
 
 
+namedArgumentsFunc1(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+positionalArgumentsFunc1(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
-namedArgumentsFunc1(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-positionalArgumentsFunc1(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(FutureOr<S1> t1) {}
 
-  ArgumentsBindingClass.named(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  ArgumentsBindingClass.positional(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  ArgumentsBindingClass.named(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(FutureOr<S1> t1, {FutureOr<S1> t2}) {
+  factory ArgumentsBindingClass.fNamed(FutureOr<S1> t1, {FutureOr<S1> t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(FutureOr<S1> t1, [FutureOr<S1> t2]) {
+  factory ArgumentsBindingClass.fPositional(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  static positionalArgumentsStaticMethod(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  static namedArgumentsStaticMethod(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
-  namedArgumentsMethod(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  positionalArgumentsMethod(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  namedArgumentsMethod(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+  positionalArgumentsMethod(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
   set testSetter(FutureOr<S1> val) {}
 }
@@ -74,18 +72,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -100,8 +93,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -125,25 +116,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<FutureOr<S1>>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<FutureOr<S1>>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<FutureOr<S1>> instance2 =
       new ArgumentsBindingGen<FutureOr<S1>>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<FutureOr<S1>>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<FutureOr<S1>>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<FutureOr<S1>>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<FutureOr<S1>>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A04_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A04_t02.dart
index 2b3c24f..88e9763 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A04_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A04_t02.dart
@@ -46,21 +46,20 @@
 class ArgumentsBindingSuper1_t02 {
   FutureOr<S1> m;
 
-  ArgumentsBindingSuper1_t02(FutureOr<S1> value) {}
-  ArgumentsBindingSuper1_t02.named(FutureOr<S1> value, {FutureOr<S1> val2}) {}
-  ArgumentsBindingSuper1_t02.positional(FutureOr<S1> value, [FutureOr<S1> val2]) {}
+  ArgumentsBindingSuper1_t02(FutureOr<S1> value): m = value {}
+  ArgumentsBindingSuper1_t02.named(FutureOr<S1> value, {FutureOr<S1> val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(FutureOr<S1> value, [FutureOr<S1> val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(FutureOr<S1> val) {}
-  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2]) {}
-  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2}) {}
+  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2 = t1Default}) {}
   FutureOr<S1> get superGetter => m;
   void set superSetter(FutureOr<S1> val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -81,31 +80,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -115,7 +106,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -135,17 +125,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<FutureOr<S1>> c2 =
     new ArgumentsBinding2_t02<FutureOr<S1>>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<FutureOr<S1>>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A04_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A04_t03.dart
index f3971aa..aab9cf2 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A04_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_arguments_binding_A04_t03.dart
@@ -44,11 +44,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  FutureOr<S1> m;
+  FutureOr<S1> m = t1Default;
 
   void superTest(FutureOr<S1> val) {}
-  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2]) {}
-  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2}) {}
+  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2 = t1Default}) {}
   FutureOr<S1> get superGetter => m;
   void set superSetter(FutureOr<S1> val) {}
 }
@@ -68,12 +68,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -81,13 +77,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -109,11 +100,7 @@
   ArgumentsBinding2_t03<FutureOr<S1>> c2 = new ArgumentsBinding2_t03<FutureOr<S1>>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_fail_arguments_binding_fail_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_fail_arguments_binding_fail_A01_t01.dart
index 2745a83..92c05d6 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_fail_arguments_binding_fail_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_fail_arguments_binding_fail_A01_t01.dart
@@ -43,30 +43,28 @@
 
 
 
-namedArgumentsFunc1(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-positionalArgumentsFunc1(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+namedArgumentsFunc1(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+positionalArgumentsFunc1(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(FutureOr<S1> t1) {}
 
-  ArgumentsBindingClass.named(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  ArgumentsBindingClass.positional(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  ArgumentsBindingClass.named(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(FutureOr<S1> t1, {FutureOr<S1> t2}) {
+  factory ArgumentsBindingClass.fNamed(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(FutureOr<S1> t1, [FutureOr<S1> t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  static positionalArgumentsStaticMethod(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  static namedArgumentsStaticMethod(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
-  namedArgumentsMethod(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  positionalArgumentsMethod(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  namedArgumentsMethod(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+  positionalArgumentsMethod(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
   set testSetter(FutureOr<S1> val) {}
 }
@@ -74,18 +72,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -130,14 +123,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -203,81 +188,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<FutureOr<S1>>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<FutureOr<S1>>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<FutureOr<S1>>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<FutureOr<S1>>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<FutureOr<S1>>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<FutureOr<S1>>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<FutureOr<S1>>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<FutureOr<S1>>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<FutureOr<S1>>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_fail_arguments_binding_fail_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_fail_arguments_binding_fail_A01_t02.dart
index 00c595a..f95fe26 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_fail_arguments_binding_fail_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_fail_arguments_binding_fail_A01_t02.dart
@@ -46,14 +46,14 @@
 class ArgumentsBindingSuper1_t02 {
   FutureOr<S1> m;
 
-  ArgumentsBindingSuper1_t02(FutureOr<S1> value) {}
-  ArgumentsBindingSuper1_t02.named(FutureOr<S1> value, {FutureOr<S1> val2}) {}
-  ArgumentsBindingSuper1_t02.positional(FutureOr<S1> value, [FutureOr<S1> val2]) {}
+  ArgumentsBindingSuper1_t02(FutureOr<S1> value): m = value {}
+  ArgumentsBindingSuper1_t02.named(FutureOr<S1> value, {FutureOr<S1> val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(FutureOr<S1> value, [FutureOr<S1> val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(FutureOr<S1> val) {}
-  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2]) {}
-  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2}) {}
+  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2 = t1Default}) {}
   FutureOr<S1> get superGetter => forgetType(t0Instance);
   void set superSetter(FutureOr<S1> val) {}
 }
@@ -66,8 +66,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -158,28 +156,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -194,42 +185,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -238,10 +193,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -295,34 +246,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -333,54 +284,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<FutureOr<S1>>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<FutureOr<S1>>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<FutureOr<S1>>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<FutureOr<S1>>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<FutureOr<S1>>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<FutureOr<S1>>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<FutureOr<S1>>.valid().test();
+  new ArgumentsBinding2_t02<FutureOr<S1>>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_fail_arguments_binding_fail_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_fail_arguments_binding_fail_A02_t01.dart
index b79bf1d..7e42630 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_fail_arguments_binding_fail_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_fail_arguments_binding_fail_A02_t01.dart
@@ -45,30 +45,28 @@
 
 
 
-namedArgumentsFunc1(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-positionalArgumentsFunc1(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+namedArgumentsFunc1(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+positionalArgumentsFunc1(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(FutureOr<S1> t1) {}
 
-  ArgumentsBindingClass.named(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  ArgumentsBindingClass.positional(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  ArgumentsBindingClass.named(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(FutureOr<S1> t1, {FutureOr<S1> t2}) {
+  factory ArgumentsBindingClass.fNamed(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(FutureOr<S1> t1, [FutureOr<S1> t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  static positionalArgumentsStaticMethod(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  static namedArgumentsStaticMethod(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
-  namedArgumentsMethod(FutureOr<S1> t1, {FutureOr<S1> t2}) {}
-  positionalArgumentsMethod(FutureOr<S1> t1, [FutureOr<S1> t2]) {}
+  namedArgumentsMethod(FutureOr<S1> t1, {FutureOr<S1> t2 = t1Default}) {}
+  positionalArgumentsMethod(FutureOr<S1> t1, [FutureOr<S1> t2 = t1Default]) {}
 
   set testSetter(FutureOr<S1> val) {}
 }
@@ -76,18 +74,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -132,14 +125,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -205,81 +190,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<FutureOr<S1>>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<FutureOr<S1>>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<FutureOr<S1>>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<FutureOr<S1>>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<FutureOr<S1>>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<FutureOr<S1>>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<FutureOr<S1>>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<FutureOr<S1>>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<FutureOr<S1>>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<FutureOr<S1>>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_fail_arguments_binding_fail_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_fail_arguments_binding_fail_A02_t02.dart
index bf0fb6e..b1f9402 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_fail_arguments_binding_fail_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_FutureOr_fail_arguments_binding_fail_A02_t02.dart
@@ -48,14 +48,14 @@
 class ArgumentsBindingSuper1_t02 {
   FutureOr<S1> m;
 
-  ArgumentsBindingSuper1_t02(FutureOr<S1> value) {}
-  ArgumentsBindingSuper1_t02.named(FutureOr<S1> value, {FutureOr<S1> val2}) {}
-  ArgumentsBindingSuper1_t02.positional(FutureOr<S1> value, [FutureOr<S1> val2]) {}
+  ArgumentsBindingSuper1_t02(FutureOr<S1> value): m = value {}
+  ArgumentsBindingSuper1_t02.named(FutureOr<S1> value, {FutureOr<S1> val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(FutureOr<S1> value, [FutureOr<S1> val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(FutureOr<S1> val) {}
-  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2]) {}
-  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2}) {}
+  void superTestPositioned(FutureOr<S1> val, [FutureOr<S1> val2 = t1Default]) {}
+  void superTestNamed(FutureOr<S1> val, {FutureOr<S1> val2 = t1Default}) {}
   FutureOr<S1> get superGetter => forgetType(t0Instance);
   void set superSetter(FutureOr<S1> val) {}
 }
@@ -68,8 +68,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -160,28 +158,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -196,42 +187,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -240,10 +195,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -297,34 +248,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -335,54 +286,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<FutureOr<S1>>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<FutureOr<S1>>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<FutureOr<S1>>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<FutureOr<S1>>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<FutureOr<S1>>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<FutureOr<S1>>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<FutureOr<S1>>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<FutureOr<S1>>.valid().test();
+  new ArgumentsBinding2_t02<FutureOr<S1>>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A01_t01.dart
index 8a25694..5095fa6 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A01_t01.dart
@@ -40,34 +40,34 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
 
 
 
 
-namedArgumentsFunc1(Object t1, {Object t2}) {}
-positionalArgumentsFunc1(Object t1, [Object t2]) {}
+namedArgumentsFunc1(Object t1, {Object t2 = t1Default}) {}
+positionalArgumentsFunc1(Object t1, [Object t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Object t1) {}
 
-  ArgumentsBindingClass.named(Object t1, {Object t2}) {}
-  ArgumentsBindingClass.positional(Object t1, [Object t2]) {}
+  ArgumentsBindingClass.named(Object t1, {Object t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Object t1, [Object t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2}) {
+  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2]) {
+  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Object t1, {Object t2}) {}
-  static positionalArgumentsStaticMethod(Object t1, [Object t2]) {}
+  static namedArgumentsStaticMethod(Object t1, {Object t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Object t1, [Object t2 = t1Default]) {}
 
-  namedArgumentsMethod(Object t1, {Object t2}) {}
-  positionalArgumentsMethod(Object t1, [Object t2]) {}
+  namedArgumentsMethod(Object t1, {Object t2 = t1Default}) {}
+  positionalArgumentsMethod(Object t1, [Object t2 = t1Default]) {}
 
   set testSetter(Object val) {}
 }
@@ -75,18 +75,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -104,8 +99,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -129,25 +122,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Object>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Object>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Object> instance2 =
       new ArgumentsBindingGen<Object>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Object>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Object>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A01_t02.dart
index aa0e5aa..7deebf0 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A01_t02.dart
@@ -40,6 +40,8 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
@@ -47,21 +49,20 @@
 class ArgumentsBindingSuper1_t02 {
   Object m;
 
-  ArgumentsBindingSuper1_t02(Object value) {}
-  ArgumentsBindingSuper1_t02.named(Object value, {Object val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2]) {}
+  ArgumentsBindingSuper1_t02(Object value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Object value, {Object val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
+  void superTestPositioned(Object val, [Object val2 = t1Default]) {}
+  void superTestNamed(Object val, {Object val2 = t1Default}) {}
   Object get superGetter => m;
   void set superSetter(Object val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -82,31 +83,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -119,7 +112,6 @@
 test<T extends B>(T t0Instance) {
     
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -139,17 +131,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Object> c2 =
     new ArgumentsBinding2_t02<Object>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Object>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Object>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A01_t03.dart
index d18354e..3b39dd3 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A01_t03.dart
@@ -40,16 +40,18 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
 
 class ArgumentsBindingMixin1_t03 {
-  Object m;
+  Object m = t1Default;
 
   void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
+  void superTestPositioned(Object val, [Object val2 = t1Default]) {}
+  void superTestNamed(Object val, {Object val2 = t1Default}) {}
   Object get superGetter => m;
   void set superSetter(Object val) {}
 }
@@ -69,12 +71,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -82,13 +80,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -113,12 +106,8 @@
   ArgumentsBinding2_t03<Object> c2 = new ArgumentsBinding2_t03<Object>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A04_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A04_t01.dart
index b9fdaf3..2edf4f8 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A04_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A04_t01.dart
@@ -43,31 +43,29 @@
 
 
 
+namedArgumentsFunc1(Object t1, {Object t2 = t1Default}) {}
+positionalArgumentsFunc1(Object t1, [Object t2 = t1Default]) {}
 
-namedArgumentsFunc1(Object t1, {Object t2}) {}
-positionalArgumentsFunc1(Object t1, [Object t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Object t1) {}
 
-  ArgumentsBindingClass.named(Object t1, {Object t2}) {}
-  ArgumentsBindingClass.positional(Object t1, [Object t2]) {}
+  ArgumentsBindingClass.named(Object t1, {Object t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Object t1, [Object t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2}) {
+  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2]) {
+  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Object t1, {Object t2}) {}
-  static positionalArgumentsStaticMethod(Object t1, [Object t2]) {}
+  static namedArgumentsStaticMethod(Object t1, {Object t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Object t1, [Object t2 = t1Default]) {}
 
-  namedArgumentsMethod(Object t1, {Object t2}) {}
-  positionalArgumentsMethod(Object t1, [Object t2]) {}
+  namedArgumentsMethod(Object t1, {Object t2 = t1Default}) {}
+  positionalArgumentsMethod(Object t1, [Object t2 = t1Default]) {}
 
   set testSetter(Object val) {}
 }
@@ -75,18 +73,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -101,8 +94,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -126,25 +117,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Object>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Object>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Object> instance2 =
       new ArgumentsBindingGen<Object>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Object>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Object>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A04_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A04_t02.dart
index 580bfb8..cb431db 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A04_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A04_t02.dart
@@ -47,21 +47,20 @@
 class ArgumentsBindingSuper1_t02 {
   Object m;
 
-  ArgumentsBindingSuper1_t02(Object value) {}
-  ArgumentsBindingSuper1_t02.named(Object value, {Object val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2]) {}
+  ArgumentsBindingSuper1_t02(Object value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Object value, {Object val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
+  void superTestPositioned(Object val, [Object val2 = t1Default]) {}
+  void superTestNamed(Object val, {Object val2 = t1Default}) {}
   Object get superGetter => m;
   void set superSetter(Object val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -82,31 +81,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -116,7 +107,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -136,17 +126,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Object> c2 =
     new ArgumentsBinding2_t02<Object>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Object>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Object>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A04_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A04_t03.dart
index 07fd28b..10714ac 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A04_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A04_t03.dart
@@ -45,11 +45,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Object m;
+  Object m = t1Default;
 
   void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
+  void superTestPositioned(Object val, [Object val2 = t1Default]) {}
+  void superTestNamed(Object val, {Object val2 = t1Default}) {}
   Object get superGetter => m;
   void set superSetter(Object val) {}
 }
@@ -69,12 +69,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -82,13 +78,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -110,11 +101,7 @@
   ArgumentsBinding2_t03<Object> c2 = new ArgumentsBinding2_t03<Object>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A05_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A05_t01.dart
index d3ad595..00c86e6 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A05_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A05_t01.dart
@@ -43,31 +43,29 @@
 
 
 
+namedArgumentsFunc1(Object t1, {Object t2 = t1Default}) {}
+positionalArgumentsFunc1(Object t1, [Object t2 = t1Default]) {}
 
-namedArgumentsFunc1(Object t1, {Object t2}) {}
-positionalArgumentsFunc1(Object t1, [Object t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Object t1) {}
 
-  ArgumentsBindingClass.named(Object t1, {Object t2}) {}
-  ArgumentsBindingClass.positional(Object t1, [Object t2]) {}
+  ArgumentsBindingClass.named(Object t1, {Object t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Object t1, [Object t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2}) {
+  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2]) {
+  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Object t1, {Object t2}) {}
-  static positionalArgumentsStaticMethod(Object t1, [Object t2]) {}
+  static namedArgumentsStaticMethod(Object t1, {Object t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Object t1, [Object t2 = t1Default]) {}
 
-  namedArgumentsMethod(Object t1, {Object t2}) {}
-  positionalArgumentsMethod(Object t1, [Object t2]) {}
+  namedArgumentsMethod(Object t1, {Object t2 = t1Default}) {}
+  positionalArgumentsMethod(Object t1, [Object t2 = t1Default]) {}
 
   set testSetter(Object val) {}
 }
@@ -75,18 +73,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -101,8 +94,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -126,25 +117,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Object>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Object>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Object> instance2 =
       new ArgumentsBindingGen<Object>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Object>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Object>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A05_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A05_t02.dart
index 35c2e32..8a6a60e 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A05_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A05_t02.dart
@@ -47,21 +47,20 @@
 class ArgumentsBindingSuper1_t02 {
   Object m;
 
-  ArgumentsBindingSuper1_t02(Object value) {}
-  ArgumentsBindingSuper1_t02.named(Object value, {Object val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2]) {}
+  ArgumentsBindingSuper1_t02(Object value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Object value, {Object val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
+  void superTestPositioned(Object val, [Object val2 = t1Default]) {}
+  void superTestNamed(Object val, {Object val2 = t1Default}) {}
   Object get superGetter => m;
   void set superSetter(Object val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -82,31 +81,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -116,7 +107,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -136,17 +126,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Object> c2 =
     new ArgumentsBinding2_t02<Object>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Object>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Object>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A05_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A05_t03.dart
index fd617b7..847feaf 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A05_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_arguments_binding_A05_t03.dart
@@ -45,11 +45,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Object m;
+  Object m = t1Default;
 
   void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
+  void superTestPositioned(Object val, [Object val2 = t1Default]) {}
+  void superTestNamed(Object val, {Object val2 = t1Default}) {}
   Object get superGetter => m;
   void set superSetter(Object val) {}
 }
@@ -69,12 +69,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -82,13 +78,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -110,11 +101,7 @@
   ArgumentsBinding2_t03<Object> c2 = new ArgumentsBinding2_t03<Object>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_class_member_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_class_member_A01_t01.dart
index 8de3eaf..8074ef6 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_class_member_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_class_member_A01_t01.dart
@@ -40,6 +40,8 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_class_member_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_class_member_A01_t02.dart
index b1c749c..7ec7ada 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_class_member_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_class_member_A01_t02.dart
@@ -40,6 +40,8 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_class_member_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_class_member_A01_t03.dart
index c4f273c..73e253b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_class_member_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_class_member_A01_t03.dart
@@ -40,6 +40,8 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A03_t01.dart
index 24981f9..e76a3d1 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A03_t01.dart
@@ -42,33 +42,33 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
 
 
 
-namedArgumentsFunc1(Object t1, {Object t2}) {}
-positionalArgumentsFunc1(Object t1, [Object t2]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc1(Object t1, {Object t2 = t1Default}) {}
+positionalArgumentsFunc1(Object t1, [Object t2 = t1Default]) {}
+
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Object t1) {}
 
-  ArgumentsBindingClass.named(Object t1, {Object t2}) {}
-  ArgumentsBindingClass.positional(Object t1, [Object t2]) {}
+  ArgumentsBindingClass.named(Object t1, {Object t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2}) {
+  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(Object t1, {Object t2}) {}
-  static positionalArgumentsStaticMethod(Object t1, [Object t2]) {}
+  static namedArgumentsStaticMethod(Object t1, {Object t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Object t1, [Object t2 = t1Default]) {}
 
-  namedArgumentsMethod(Object t1, {Object t2}) {}
-  positionalArgumentsMethod(Object t1, [Object t2]) {}
+  namedArgumentsMethod(Object t1, {Object t2 = t1Default}) {}
+  positionalArgumentsMethod(Object t1, [Object t2 = t1Default]) {}
 
   set testSetter(Object val) {}
 }
@@ -76,18 +76,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -132,14 +127,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -205,81 +192,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<Object>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<Object>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<Object>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<Object>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<Object>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Object>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Object>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Object>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Object>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A03_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A03_t02.dart
index 47cd833..229ad44 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A03_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A03_t02.dart
@@ -29,7 +29,7 @@
  * arguments_binding_fail_x02.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
- */
+ *
 
 
 import '../../utils/common.dart';
@@ -42,20 +42,22 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
 class ArgumentsBindingSuper1_t02 {
   Object m;
 
-  ArgumentsBindingSuper1_t02(Object value) {}
-  ArgumentsBindingSuper1_t02.named(Object value, {Object val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2]) {}
+  ArgumentsBindingSuper1_t02(Object value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Object value, {Object val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
+  void superTestPositioned(Object val, [Object val2 = t1Default]) {}
+  void superTestNamed(Object val, {Object val2 = t1Default}) {}
   Object get superGetter => forgetType(t0Instance);
   void set superSetter(Object val) {}
 }
@@ -68,8 +70,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -160,28 +160,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -196,42 +189,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -240,10 +197,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -270,6 +223,7 @@
 }
 
 main() {
+  print(t0Instance.runtimeType);
   // test constructors
   Expect.throws(() {
     new ArgumentsBinding1_t02(forgetType(t0Instance));
@@ -297,34 +251,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -335,54 +289,40 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<Object>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<Object>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Object>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Object>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Object>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Object>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<Object>.valid().test();
+  new ArgumentsBinding2_t02<Object>(t1Instance).test();
   //# -->
 }
+*/
+
+dynamic forgetType(dynamic v) => v;
+
+Object? o = new Object();
+foo(Object val) {}
+
+main() {
+  foo(forgetType(o)); // Runtime error?
+}
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A03_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A03_t03.dart
index bd60713..8d636b8 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A03_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A03_t03.dart
@@ -42,6 +42,8 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A04_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A04_t01.dart
index 327850d..b61f596 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A04_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A04_t01.dart
@@ -45,30 +45,28 @@
 
 
 
-namedArgumentsFunc1(Object t1, {Object t2}) {}
-positionalArgumentsFunc1(Object t1, [Object t2]) {}
+namedArgumentsFunc1(Object t1, {Object t2 = t1Default}) {}
+positionalArgumentsFunc1(Object t1, [Object t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Object t1) {}
 
-  ArgumentsBindingClass.named(Object t1, {Object t2}) {}
-  ArgumentsBindingClass.positional(Object t1, [Object t2]) {}
+  ArgumentsBindingClass.named(Object t1, {Object t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2}) {
+  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(Object t1, {Object t2}) {}
-  static positionalArgumentsStaticMethod(Object t1, [Object t2]) {}
+  static namedArgumentsStaticMethod(Object t1, {Object t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Object t1, [Object t2 = t1Default]) {}
 
-  namedArgumentsMethod(Object t1, {Object t2}) {}
-  positionalArgumentsMethod(Object t1, [Object t2]) {}
+  namedArgumentsMethod(Object t1, {Object t2 = t1Default}) {}
+  positionalArgumentsMethod(Object t1, [Object t2 = t1Default]) {}
 
   set testSetter(Object val) {}
 }
@@ -76,18 +74,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -132,14 +125,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -205,81 +190,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<Object>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<Object>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<Object>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<Object>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<Object>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Object>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Object>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Object>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Object>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A04_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A04_t02.dart
index f6faabc..1d4debe 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A04_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A04_t02.dart
@@ -48,14 +48,14 @@
 class ArgumentsBindingSuper1_t02 {
   Object m;
 
-  ArgumentsBindingSuper1_t02(Object value) {}
-  ArgumentsBindingSuper1_t02.named(Object value, {Object val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2]) {}
+  ArgumentsBindingSuper1_t02(Object value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Object value, {Object val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
+  void superTestPositioned(Object val, [Object val2 = t1Default]) {}
+  void superTestNamed(Object val, {Object val2 = t1Default}) {}
   Object get superGetter => forgetType(t0Instance);
   void set superSetter(Object val) {}
 }
@@ -68,8 +68,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -160,28 +158,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -196,42 +187,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -240,10 +195,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -297,34 +248,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -335,54 +286,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<Object>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<Object>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Object>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Object>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Object>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Object>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<Object>.valid().test();
+  new ArgumentsBinding2_t02<Object>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A05_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A05_t01.dart
index 24dd2be..7e8a957 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A05_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A05_t01.dart
@@ -44,30 +44,28 @@
 
 
 
-namedArgumentsFunc1(Object t1, {Object t2}) {}
-positionalArgumentsFunc1(Object t1, [Object t2]) {}
+namedArgumentsFunc1(Object t1, {Object t2 = t1Default}) {}
+positionalArgumentsFunc1(Object t1, [Object t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Object t1) {}
 
-  ArgumentsBindingClass.named(Object t1, {Object t2}) {}
-  ArgumentsBindingClass.positional(Object t1, [Object t2]) {}
+  ArgumentsBindingClass.named(Object t1, {Object t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2}) {
+  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(Object t1, {Object t2}) {}
-  static positionalArgumentsStaticMethod(Object t1, [Object t2]) {}
+  static namedArgumentsStaticMethod(Object t1, {Object t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Object t1, [Object t2 = t1Default]) {}
 
-  namedArgumentsMethod(Object t1, {Object t2}) {}
-  positionalArgumentsMethod(Object t1, [Object t2]) {}
+  namedArgumentsMethod(Object t1, {Object t2 = t1Default}) {}
+  positionalArgumentsMethod(Object t1, [Object t2 = t1Default]) {}
 
   set testSetter(Object val) {}
 }
@@ -75,18 +73,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -131,14 +124,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -204,81 +189,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<Object>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<Object>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<Object>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<Object>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<Object>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Object>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Object>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Object>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Object>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A05_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A05_t02.dart
index e5991dd..f87caf4 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A05_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A05_t02.dart
@@ -47,14 +47,14 @@
 class ArgumentsBindingSuper1_t02 {
   Object m;
 
-  ArgumentsBindingSuper1_t02(Object value) {}
-  ArgumentsBindingSuper1_t02.named(Object value, {Object val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2]) {}
+  ArgumentsBindingSuper1_t02(Object value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Object value, {Object val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
+  void superTestPositioned(Object val, [Object val2 = t1Default]) {}
+  void superTestNamed(Object val, {Object val2 = t1Default}) {}
   Object get superGetter => forgetType(t0Instance);
   void set superSetter(Object val) {}
 }
@@ -67,8 +67,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -159,28 +157,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -195,42 +186,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -239,10 +194,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -296,34 +247,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -334,54 +285,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<Object>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<Object>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Object>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Object>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Object>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Object>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<Object>.valid().test();
+  new ArgumentsBinding2_t02<Object>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A06_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A06_t01.dart
index b8ef422..f486b27 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A06_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A06_t01.dart
@@ -44,30 +44,28 @@
 
 
 
-namedArgumentsFunc1(Object t1, {Object t2}) {}
-positionalArgumentsFunc1(Object t1, [Object t2]) {}
+namedArgumentsFunc1(Object t1, {Object t2 = t1Default}) {}
+positionalArgumentsFunc1(Object t1, [Object t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Object t1) {}
 
-  ArgumentsBindingClass.named(Object t1, {Object t2}) {}
-  ArgumentsBindingClass.positional(Object t1, [Object t2]) {}
+  ArgumentsBindingClass.named(Object t1, {Object t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2}) {
+  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(Object t1, {Object t2}) {}
-  static positionalArgumentsStaticMethod(Object t1, [Object t2]) {}
+  static namedArgumentsStaticMethod(Object t1, {Object t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Object t1, [Object t2 = t1Default]) {}
 
-  namedArgumentsMethod(Object t1, {Object t2}) {}
-  positionalArgumentsMethod(Object t1, [Object t2]) {}
+  namedArgumentsMethod(Object t1, {Object t2 = t1Default}) {}
+  positionalArgumentsMethod(Object t1, [Object t2 = t1Default]) {}
 
   set testSetter(Object val) {}
 }
@@ -75,18 +73,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -131,14 +124,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -204,81 +189,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<Object>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<Object>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<Object>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<Object>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<Object>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Object>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Object>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Object>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<Object>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<Object>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A06_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A06_t02.dart
index 045c05a..0d33f80 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A06_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_arguments_binding_fail_A06_t02.dart
@@ -47,14 +47,14 @@
 class ArgumentsBindingSuper1_t02 {
   Object m;
 
-  ArgumentsBindingSuper1_t02(Object value) {}
-  ArgumentsBindingSuper1_t02.named(Object value, {Object val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2]) {}
+  ArgumentsBindingSuper1_t02(Object value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Object value, {Object val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
+  void superTestPositioned(Object val, [Object val2 = t1Default]) {}
+  void superTestNamed(Object val, {Object val2 = t1Default}) {}
   Object get superGetter => forgetType(t0Instance);
   void set superSetter(Object val) {}
 }
@@ -67,8 +67,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -159,28 +157,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -195,42 +186,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -239,10 +194,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -296,34 +247,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -334,54 +285,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<Object>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<Object>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Object>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Object>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Object>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<Object>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<Object>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<Object>.valid().test();
+  new ArgumentsBinding2_t02<Object>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_class_member_fail_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_class_member_fail_A03_t01.dart
index 73c0e2f..c3bd7f1 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_class_member_fail_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_class_member_fail_A03_t01.dart
@@ -42,6 +42,8 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_class_member_fail_A03_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_class_member_fail_A03_t02.dart
index 74d9545..3583b85 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_class_member_fail_A03_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_class_member_fail_A03_t02.dart
@@ -42,6 +42,8 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_class_member_fail_A03_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_class_member_fail_A03_t03.dart
index 74253c0..ec9ec53 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_class_member_fail_A03_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_class_member_fail_A03_t03.dart
@@ -42,6 +42,8 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_global_variable_fail_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_global_variable_fail_A03_t01.dart
index 5b45ebd..9997165 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_global_variable_fail_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_global_variable_fail_A03_t01.dart
@@ -42,6 +42,8 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_local_variable_fail_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_local_variable_fail_A03_t01.dart
index 22380ce..23ddb7f 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_local_variable_fail_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_local_variable_fail_A03_t01.dart
@@ -42,6 +42,8 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_return_value_fail_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_return_value_fail_A03_t01.dart
index 774435d..cf68db3 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_return_value_fail_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_fail_return_value_fail_A03_t01.dart
@@ -42,6 +42,8 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_global_variable_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_global_variable_A01_t01.dart
index c9565bb..a222c9c 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_global_variable_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_global_variable_A01_t01.dart
@@ -40,6 +40,8 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_local_variable_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_local_variable_A01_t01.dart
index c997f98..3d8a03d 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_local_variable_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_local_variable_A01_t01.dart
@@ -40,6 +40,8 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_object_return_value_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_object_return_value_A01_t01.dart
index 57a352e..9b88b7d 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_object_return_value_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_object_return_value_A01_t01.dart
@@ -40,6 +40,8 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t01.dart
index 67e803d..a9f5c7b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t01.dart
@@ -33,31 +33,29 @@
 
 
 
+namedArgumentsFunc1(Object? t1, {Object? t2 = t1Default}) {}
+positionalArgumentsFunc1(Object? t1, [Object? t2 = t1Default]) {}
 
-namedArgumentsFunc1(Object? t1, {Object? t2}) {}
-positionalArgumentsFunc1(Object? t1, [Object? t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Object? t1) {}
 
-  ArgumentsBindingClass.named(Object? t1, {Object? t2}) {}
-  ArgumentsBindingClass.positional(Object? t1, [Object? t2]) {}
+  ArgumentsBindingClass.named(Object? t1, {Object? t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Object? t1, [Object? t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Object? t1, {Object? t2}) {
+  factory ArgumentsBindingClass.fNamed(Object? t1, {Object? t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Object? t1, [Object? t2]) {
+  factory ArgumentsBindingClass.fPositional(Object? t1, [Object? t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Object? t1, {Object? t2}) {}
-  static positionalArgumentsStaticMethod(Object? t1, [Object? t2]) {}
+  static namedArgumentsStaticMethod(Object? t1, {Object? t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Object? t1, [Object? t2 = t1Default]) {}
 
-  namedArgumentsMethod(Object? t1, {Object? t2}) {}
-  positionalArgumentsMethod(Object? t1, [Object? t2]) {}
+  namedArgumentsMethod(Object? t1, {Object? t2 = t1Default}) {}
+  positionalArgumentsMethod(Object? t1, [Object? t2 = t1Default]) {}
 
   set testSetter(Object? val) {}
 }
@@ -65,18 +63,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -91,8 +84,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -116,25 +107,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Object?>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Object?>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Object?> instance2 =
       new ArgumentsBindingGen<Object?>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Object?>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object?>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Object?>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object?>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t02.dart
index 46bceca..66945c9 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t02.dart
@@ -37,21 +37,20 @@
 class ArgumentsBindingSuper1_t02 {
   Object? m;
 
-  ArgumentsBindingSuper1_t02(Object? value) {}
-  ArgumentsBindingSuper1_t02.named(Object? value, {Object? val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Object? value, [Object? val2]) {}
+  ArgumentsBindingSuper1_t02(Object? value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Object? value, {Object? val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Object? value, [Object? val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Object? val) {}
-  void superTestPositioned(Object? val, [Object? val2]) {}
-  void superTestNamed(Object? val, {Object? val2}) {}
+  void superTestPositioned(Object? val, [Object? val2 = t1Default]) {}
+  void superTestNamed(Object? val, {Object? val2 = t1Default}) {}
   Object? get superGetter => m;
   void set superSetter(Object? val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -72,31 +71,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -106,7 +97,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -126,17 +116,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Object?> c2 =
     new ArgumentsBinding2_t02<Object?>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object?>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Object?>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object?>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object?>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Object?>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t03.dart
index e5ea43e..59f0870 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t03.dart
@@ -35,11 +35,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Object? m;
+  Object? m = t1Default;
 
   void superTest(Object? val) {}
-  void superTestPositioned(Object? val, [Object? val2]) {}
-  void superTestNamed(Object? val, {Object? val2}) {}
+  void superTestPositioned(Object? val, [Object? val2 = t1Default]) {}
+  void superTestNamed(Object? val, {Object? val2 = t1Default}) {}
   Object? get superGetter => m;
   void set superSetter(Object? val) {}
 }
@@ -59,12 +59,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -72,13 +68,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -100,11 +91,7 @@
   ArgumentsBinding2_t03<Object?> c2 = new ArgumentsBinding2_t03<Object?>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A02_t01.dart
index 21ba1eb..137a4cb 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A02_t01.dart
@@ -33,31 +33,29 @@
 
 
 
+namedArgumentsFunc1(dynamic t1, {dynamic t2 = t1Default}) {}
+positionalArgumentsFunc1(dynamic t1, [dynamic t2 = t1Default]) {}
 
-namedArgumentsFunc1(dynamic t1, {dynamic t2}) {}
-positionalArgumentsFunc1(dynamic t1, [dynamic t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(dynamic t1) {}
 
-  ArgumentsBindingClass.named(dynamic t1, {dynamic t2}) {}
-  ArgumentsBindingClass.positional(dynamic t1, [dynamic t2]) {}
+  ArgumentsBindingClass.named(dynamic t1, {dynamic t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(dynamic t1, [dynamic t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(dynamic t1, {dynamic t2}) {
+  factory ArgumentsBindingClass.fNamed(dynamic t1, {dynamic t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(dynamic t1, [dynamic t2]) {
+  factory ArgumentsBindingClass.fPositional(dynamic t1, [dynamic t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(dynamic t1, {dynamic t2}) {}
-  static positionalArgumentsStaticMethod(dynamic t1, [dynamic t2]) {}
+  static namedArgumentsStaticMethod(dynamic t1, {dynamic t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(dynamic t1, [dynamic t2 = t1Default]) {}
 
-  namedArgumentsMethod(dynamic t1, {dynamic t2}) {}
-  positionalArgumentsMethod(dynamic t1, [dynamic t2]) {}
+  namedArgumentsMethod(dynamic t1, {dynamic t2 = t1Default}) {}
+  positionalArgumentsMethod(dynamic t1, [dynamic t2 = t1Default]) {}
 
   set testSetter(dynamic val) {}
 }
@@ -65,18 +63,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -91,8 +84,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -116,25 +107,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<dynamic>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<dynamic>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<dynamic> instance2 =
       new ArgumentsBindingGen<dynamic>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<dynamic>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<dynamic>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<dynamic>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<dynamic>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A02_t02.dart
index 1640634..383b620 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A02_t02.dart
@@ -37,21 +37,20 @@
 class ArgumentsBindingSuper1_t02 {
   dynamic m;
 
-  ArgumentsBindingSuper1_t02(dynamic value) {}
-  ArgumentsBindingSuper1_t02.named(dynamic value, {dynamic val2}) {}
-  ArgumentsBindingSuper1_t02.positional(dynamic value, [dynamic val2]) {}
+  ArgumentsBindingSuper1_t02(dynamic value): m = value {}
+  ArgumentsBindingSuper1_t02.named(dynamic value, {dynamic val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(dynamic value, [dynamic val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(dynamic val) {}
-  void superTestPositioned(dynamic val, [dynamic val2]) {}
-  void superTestNamed(dynamic val, {dynamic val2}) {}
+  void superTestPositioned(dynamic val, [dynamic val2 = t1Default]) {}
+  void superTestNamed(dynamic val, {dynamic val2 = t1Default}) {}
   dynamic get superGetter => m;
   void set superSetter(dynamic val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -72,31 +71,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -106,7 +97,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -126,17 +116,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<dynamic> c2 =
     new ArgumentsBinding2_t02<dynamic>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<dynamic>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<dynamic>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<dynamic>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<dynamic>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<dynamic>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A02_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A02_t03.dart
index 9122d5f..971aa2c 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A02_t03.dart
@@ -35,11 +35,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  dynamic m;
+  dynamic m = t1Default;
 
   void superTest(dynamic val) {}
-  void superTestPositioned(dynamic val, [dynamic val2]) {}
-  void superTestNamed(dynamic val, {dynamic val2}) {}
+  void superTestPositioned(dynamic val, [dynamic val2 = t1Default]) {}
+  void superTestNamed(dynamic val, {dynamic val2 = t1Default}) {}
   dynamic get superGetter => m;
   void set superSetter(dynamic val) {}
 }
@@ -59,12 +59,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -72,13 +68,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -100,11 +91,7 @@
   ArgumentsBinding2_t03<dynamic> c2 = new ArgumentsBinding2_t03<dynamic>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t01.dart
index 528c1aa..2158a6b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t01.dart
@@ -31,31 +31,29 @@
 
 
 
+namedArgumentsFunc1(Object? t1, {Object? t2 = t1Default}) {}
+positionalArgumentsFunc1(Object? t1, [Object? t2 = t1Default]) {}
 
-namedArgumentsFunc1(Object? t1, {Object? t2}) {}
-positionalArgumentsFunc1(Object? t1, [Object? t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(Object? t1) {}
 
-  ArgumentsBindingClass.named(Object? t1, {Object? t2}) {}
-  ArgumentsBindingClass.positional(Object? t1, [Object? t2]) {}
+  ArgumentsBindingClass.named(Object? t1, {Object? t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(Object? t1, [Object? t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(Object? t1, {Object? t2}) {
+  factory ArgumentsBindingClass.fNamed(Object? t1, {Object? t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Object? t1, [Object? t2]) {
+  factory ArgumentsBindingClass.fPositional(Object? t1, [Object? t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Object? t1, {Object? t2}) {}
-  static positionalArgumentsStaticMethod(Object? t1, [Object? t2]) {}
+  static namedArgumentsStaticMethod(Object? t1, {Object? t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(Object? t1, [Object? t2 = t1Default]) {}
 
-  namedArgumentsMethod(Object? t1, {Object? t2}) {}
-  positionalArgumentsMethod(Object? t1, [Object? t2]) {}
+  namedArgumentsMethod(Object? t1, {Object? t2 = t1Default}) {}
+  positionalArgumentsMethod(Object? t1, [Object? t2 = t1Default]) {}
 
   set testSetter(Object? val) {}
 }
@@ -63,18 +61,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -89,8 +82,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -114,25 +105,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<Object?>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Object?>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<Object?> instance2 =
       new ArgumentsBindingGen<Object?>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Object?>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object?>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<Object?>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object?>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t02.dart
index cc88e19..5438e95 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t02.dart
@@ -35,21 +35,20 @@
 class ArgumentsBindingSuper1_t02 {
   Object? m;
 
-  ArgumentsBindingSuper1_t02(Object? value) {}
-  ArgumentsBindingSuper1_t02.named(Object? value, {Object? val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Object? value, [Object? val2]) {}
+  ArgumentsBindingSuper1_t02(Object? value): m = value {}
+  ArgumentsBindingSuper1_t02.named(Object? value, {Object? val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(Object? value, [Object? val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(Object? val) {}
-  void superTestPositioned(Object? val, [Object? val2]) {}
-  void superTestNamed(Object? val, {Object? val2}) {}
+  void superTestPositioned(Object? val, [Object? val2 = t1Default]) {}
+  void superTestNamed(Object? val, {Object? val2 = t1Default}) {}
   Object? get superGetter => m;
   void set superSetter(Object? val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -70,31 +69,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -104,7 +95,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -124,17 +114,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<Object?> c2 =
     new ArgumentsBinding2_t02<Object?>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object?>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Object?>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object?>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object?>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<Object?>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t03.dart
index 87ef11a..a7723d4 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t03.dart
@@ -33,11 +33,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  Object? m;
+  Object? m = t1Default;
 
   void superTest(Object? val) {}
-  void superTestPositioned(Object? val, [Object? val2]) {}
-  void superTestNamed(Object? val, {Object? val2}) {}
+  void superTestPositioned(Object? val, [Object? val2 = t1Default]) {}
+  void superTestNamed(Object? val, {Object? val2 = t1Default}) {}
   Object? get superGetter => m;
   void set superSetter(Object? val) {}
 }
@@ -57,12 +57,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -70,13 +66,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -98,11 +89,7 @@
   ArgumentsBinding2_t03<Object?> c2 = new ArgumentsBinding2_t03<Object?>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A04_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A04_t01.dart
index 606362d..b0c2545 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A04_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A04_t01.dart
@@ -31,31 +31,29 @@
 
 
 
+namedArgumentsFunc1(dynamic t1, {dynamic t2 = t1Default}) {}
+positionalArgumentsFunc1(dynamic t1, [dynamic t2 = t1Default]) {}
 
-namedArgumentsFunc1(dynamic t1, {dynamic t2}) {}
-positionalArgumentsFunc1(dynamic t1, [dynamic t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(dynamic t1) {}
 
-  ArgumentsBindingClass.named(dynamic t1, {dynamic t2}) {}
-  ArgumentsBindingClass.positional(dynamic t1, [dynamic t2]) {}
+  ArgumentsBindingClass.named(dynamic t1, {dynamic t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(dynamic t1, [dynamic t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(dynamic t1, {dynamic t2}) {
+  factory ArgumentsBindingClass.fNamed(dynamic t1, {dynamic t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(dynamic t1, [dynamic t2]) {
+  factory ArgumentsBindingClass.fPositional(dynamic t1, [dynamic t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(dynamic t1, {dynamic t2}) {}
-  static positionalArgumentsStaticMethod(dynamic t1, [dynamic t2]) {}
+  static namedArgumentsStaticMethod(dynamic t1, {dynamic t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(dynamic t1, [dynamic t2 = t1Default]) {}
 
-  namedArgumentsMethod(dynamic t1, {dynamic t2}) {}
-  positionalArgumentsMethod(dynamic t1, [dynamic t2]) {}
+  namedArgumentsMethod(dynamic t1, {dynamic t2 = t1Default}) {}
+  positionalArgumentsMethod(dynamic t1, [dynamic t2 = t1Default]) {}
 
   set testSetter(dynamic val) {}
 }
@@ -63,18 +61,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -89,8 +82,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -114,25 +105,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<dynamic>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<dynamic>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<dynamic> instance2 =
       new ArgumentsBindingGen<dynamic>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<dynamic>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<dynamic>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<dynamic>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<dynamic>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A04_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A04_t02.dart
index 8b08104..84bd210 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A04_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A04_t02.dart
@@ -35,21 +35,20 @@
 class ArgumentsBindingSuper1_t02 {
   dynamic m;
 
-  ArgumentsBindingSuper1_t02(dynamic value) {}
-  ArgumentsBindingSuper1_t02.named(dynamic value, {dynamic val2}) {}
-  ArgumentsBindingSuper1_t02.positional(dynamic value, [dynamic val2]) {}
+  ArgumentsBindingSuper1_t02(dynamic value): m = value {}
+  ArgumentsBindingSuper1_t02.named(dynamic value, {dynamic val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(dynamic value, [dynamic val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(dynamic val) {}
-  void superTestPositioned(dynamic val, [dynamic val2]) {}
-  void superTestNamed(dynamic val, {dynamic val2}) {}
+  void superTestPositioned(dynamic val, [dynamic val2 = t1Default]) {}
+  void superTestNamed(dynamic val, {dynamic val2 = t1Default}) {}
   dynamic get superGetter => m;
   void set superSetter(dynamic val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -70,31 +69,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -104,7 +95,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -124,17 +114,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<dynamic> c2 =
     new ArgumentsBinding2_t02<dynamic>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<dynamic>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<dynamic>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<dynamic>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<dynamic>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<dynamic>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A04_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A04_t03.dart
index a0ed09f..c490cf0 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A04_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A04_t03.dart
@@ -33,11 +33,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  dynamic m;
+  dynamic m = t1Default;
 
   void superTest(dynamic val) {}
-  void superTestPositioned(dynamic val, [dynamic val2]) {}
-  void superTestNamed(dynamic val, {dynamic val2}) {}
+  void superTestPositioned(dynamic val, [dynamic val2 = t1Default]) {}
+  void superTestNamed(dynamic val, {dynamic val2 = t1Default}) {}
   dynamic get superGetter => m;
   void set superSetter(dynamic val) {}
 }
@@ -57,12 +57,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -70,13 +66,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -98,11 +89,7 @@
   ArgumentsBinding2_t03<dynamic> c2 = new ArgumentsBinding2_t03<dynamic>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A01_t01.dart
index 6818476..7e7519f 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A01_t01.dart
@@ -42,31 +42,29 @@
 
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -74,18 +72,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -100,8 +93,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -125,25 +116,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<T1>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<T1>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<T1> instance2 =
       new ArgumentsBindingGen<T1>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A01_t02.dart
index edf16e9..178ac76 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A01_t02.dart
@@ -46,21 +46,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -81,31 +80,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -115,7 +106,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -135,17 +125,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<T1> c2 =
     new ArgumentsBinding2_t02<T1>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A01_t03.dart
index 432dc74..a83ad1d 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A01_t03.dart
@@ -44,11 +44,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -68,12 +68,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -81,13 +77,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -109,11 +100,7 @@
   ArgumentsBinding2_t03<T1> c2 = new ArgumentsBinding2_t03<T1>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A02_t01.dart
index f83ba76..5c5a01c 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A02_t01.dart
@@ -43,31 +43,29 @@
 
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -75,18 +73,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -101,8 +94,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -126,25 +117,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<T1>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<T1>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<T1> instance2 =
       new ArgumentsBindingGen<T1>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A02_t02.dart
index 2dbdc34..0abd052 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A02_t02.dart
@@ -47,21 +47,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -82,31 +81,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -116,7 +107,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -136,17 +126,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<T1> c2 =
     new ArgumentsBinding2_t02<T1>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A02_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A02_t03.dart
index 7644f72..b2b41d7 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A02_t03.dart
@@ -45,11 +45,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -69,12 +69,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -82,13 +78,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -110,11 +101,7 @@
   ArgumentsBinding2_t03<T1> c2 = new ArgumentsBinding2_t03<T1>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A03_t01.dart
index 4b83d73..965583d 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A03_t01.dart
@@ -45,31 +45,29 @@
 
 
 
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(T1 t1, [T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -77,18 +75,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -103,8 +96,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -128,25 +119,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<T1>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<T1>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<T1> instance2 =
       new ArgumentsBindingGen<T1>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<T1>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<T1>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A03_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A03_t02.dart
index ee21f66..e1479fa 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A03_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A03_t02.dart
@@ -49,21 +49,20 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -84,31 +83,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -118,7 +109,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -138,17 +128,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<T1> c2 =
     new ArgumentsBinding2_t02<T1>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A03_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A03_t03.dart
index 4eb4af3..1ea81ee 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A03_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_arguments_binding_A03_t03.dart
@@ -47,11 +47,11 @@
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  T1 m = t1Default;
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => m;
   void set superSetter(T1 val) {}
 }
@@ -71,12 +71,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -84,13 +80,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -112,11 +103,7 @@
   ArgumentsBinding2_t03<T1> c2 = new ArgumentsBinding2_t03<T1>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_fail_arguments_binding_fail_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_fail_arguments_binding_fail_A01_t01.dart
index c5b9d57..63f84e4 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_fail_arguments_binding_fail_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_fail_arguments_binding_fail_A01_t01.dart
@@ -45,30 +45,28 @@
 
 
 
-namedArgumentsFunc1(T1 t1, {T1 t2}) {}
-positionalArgumentsFunc1(T1 t1, [T1 t2]) {}
+namedArgumentsFunc1(T1 t1, {T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(T1 t1, [T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(T1 t1) {}
 
-  ArgumentsBindingClass.named(T1 t1, {T1 t2}) {}
-  ArgumentsBindingClass.positional(T1 t1, [T1 t2]) {}
+  ArgumentsBindingClass.named(T1 t1, {T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(T1 t1, {T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(T1 t1, [T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(T1 t1, {T1 t2}) {}
-  static positionalArgumentsStaticMethod(T1 t1, [T1 t2]) {}
+  static namedArgumentsStaticMethod(T1 t1, {T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(T1 t1, [T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(T1 t1, {T1 t2}) {}
-  positionalArgumentsMethod(T1 t1, [T1 t2]) {}
+  namedArgumentsMethod(T1 t1, {T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(T1 t1, [T1 t2 = t1Default]) {}
 
   set testSetter(T1 val) {}
 }
@@ -76,18 +74,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -132,14 +125,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -205,81 +190,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<T1>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<T1>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<T1>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<T1>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_fail_arguments_binding_fail_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_fail_arguments_binding_fail_A01_t02.dart
index 40bdd57..7e4711d 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/super_interface_fail_arguments_binding_fail_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/super_interface_fail_arguments_binding_fail_A01_t02.dart
@@ -48,14 +48,14 @@
 class ArgumentsBindingSuper1_t02 {
   T1 m;
 
-  ArgumentsBindingSuper1_t02(T1 value) {}
-  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2]) {}
+  ArgumentsBindingSuper1_t02(T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(T1 value, {T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(T1 value, [T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
+  void superTestPositioned(T1 val, [T1 val2 = t1Default]) {}
+  void superTestNamed(T1 val, {T1 val2 = t1Default}) {}
   T1 get superGetter => forgetType(t0Instance);
   void set superSetter(T1 val) {}
 }
@@ -68,8 +68,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -160,28 +158,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -196,42 +187,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -240,10 +195,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -297,34 +248,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -335,54 +286,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<T1>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<T1>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<T1>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<T1>.valid().test();
+  new ArgumentsBinding2_t02<T1>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_fail_x01.dart b/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_fail_x01.dart
index 0b58e51..c58b592 100644
--- a/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_fail_x01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_fail_x01.dart
@@ -9,30 +9,28 @@
  * @author sgrekhov@unipro.ru
  */
 
-namedArgumentsFunc1(@T1 t1, {@T1 t2}) {}
-positionalArgumentsFunc1(@T1 t1, [@T1 t2]) {}
+namedArgumentsFunc1(@T1 t1, {@T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(@T1 t1, [@T1 t2 = t1Default]) {}
 
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(@T1 t1) {}
 
-  ArgumentsBindingClass.named(@T1 t1, {@T1 t2}) {}
-  ArgumentsBindingClass.positional(@T1 t1, [@T1 t2]) {}
+  ArgumentsBindingClass.named(@T1 t1, {@T1 t2 = t1Default}) {}
 
-  factory ArgumentsBindingClass.fNamed(@T1 t1, {@T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(@T1 t1, {@T1 t2 = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(@T1 t1, [@T1 t2]) {
-    return new ArgumentsBindingClass.positional(t1, t2);
+  factory ArgumentsBindingClass.fPositional(@T1 t1, [@T1 t2 = t1Default]) {
+    return new ArgumentsBindingClass.named(t1, t2: t2);
   }
 
-  static namedArgumentsStaticMethod(@T1 t1, {@T1 t2}) {}
-  static positionalArgumentsStaticMethod(@T1 t1, [@T1 t2]) {}
+  static namedArgumentsStaticMethod(@T1 t1, {@T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(@T1 t1, [@T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(@T1 t1, {@T1 t2}) {}
-  positionalArgumentsMethod(@T1 t1, [@T1 t2]) {}
+  namedArgumentsMethod(@T1 t1, {@T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(@T1 t1, [@T1 t2 = t1Default]) {}
 
   set testSetter(@T1 val) {}
 }
@@ -40,18 +38,13 @@
 class ArgumentsBindingClassGen<X> {
   ArgumentsBindingClassGen(X t1) {}
 
-  ArgumentsBindingClassGen.named(X t1, {X t2}) {}
-  ArgumentsBindingClassGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingClassGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingClassGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingClassGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingClassGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClassGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingClassGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -96,14 +89,6 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClass.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClass.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClass.fNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
@@ -169,81 +154,30 @@
   //# <-- NotGenericFunctionType
   // Test generic functions
   Expect.throws(() {
-    namedArgumentsFunc2<@T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     namedArgumentsFunc2<@T1>(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    positionalArgumentsFunc2<@T1>(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    positionalArgumentsFunc2<@T1>(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
   // Test constructors
   Expect.throws(() {
     new ArgumentsBindingClassGen<@T1>(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<@T1>.named(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<@T1>.named(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<@T1>.positional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<@T1>.positional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<@T1>.fNamed(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<@T1>.fNamed(t1Instance, t2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<@T1>.fPositional(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<@T1>.fPositional(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
 
   // Test instance methods and setters
   Expect.throws(() {
-    new ArgumentsBindingClassGen<@T1>(t1Instance).namedArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<@T1>(t1Instance).namedArgumentsMethod(t1Instance,
     t2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBindingClassGen<@T1>(t1Instance).positionalArgumentsMethod(
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBindingClassGen<@T1>(t1Instance).positionalArgumentsMethod(t1Instance,
-    forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBindingClassGen<@T1>(t1Instance).testSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
   //# -->
diff --git a/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_fail_x02.dart b/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_fail_x02.dart
index c610691..9cfa60f 100644
--- a/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_fail_x02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_fail_x02.dart
@@ -12,14 +12,14 @@
 class ArgumentsBindingSuper1_t02 {
   @T1 m;
 
-  ArgumentsBindingSuper1_t02(@T1 value) {}
-  ArgumentsBindingSuper1_t02.named(@T1 value, {@T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(@T1 value, [@T1 val2]) {}
+  ArgumentsBindingSuper1_t02(@T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(@T1 value, {@T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(@T1 value, [@T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(@T1 val) {}
-  void superTestPositioned(@T1 val, [@T1 val2]) {}
-  void superTestNamed(@T1 val, {@T1 val2}) {}
+  void superTestPositioned(@T1 val, [@T1 val2 = t1Default]) {}
+  void superTestNamed(@T1 val, {@T1 val2 = t1Default}) {}
   @T1 get superGetter => forgetType(t0Instance);
   void set superSetter(@T1 val) {}
 }
@@ -32,8 +32,6 @@
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding1_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding1_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -124,28 +122,21 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}): m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
-  ArgumentsBinding2_t02.valid() : super(null) {}
-
   test() {
     Expect.throws(() {
       superTest(forgetType(t0Instance));
@@ -160,42 +151,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      this.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
-      super.superTestNamed(forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
     }, (e) => e is TypeError);
 
@@ -204,10 +159,6 @@
     }, (e) => e is TypeError);
 
     Expect.throws(() {
-      super.superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-    }, (e) => e is TypeError);
-
-    Expect.throws(() {
       superSetter = forgetType(t0Instance);
     }, (e) => e is TypeError);
 
@@ -261,34 +212,34 @@
 
   // test class members
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestPositioned(t1Instance, forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestPositioned(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superTestNamed(t1Instance, val2: forgetType(t0Instance));
+    new ArgumentsBinding1_t02(t1Instance).superTestNamed(t1Instance, val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superSetter = forgetType(t0Instance);
+    new ArgumentsBinding1_t02(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding1_t02.valid().superGetter;
+    new ArgumentsBinding1_t02(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  new ArgumentsBinding1_t02.valid().test();
+  new ArgumentsBinding1_t02(t1Instance).test();
 
   // Test type parameters
 
@@ -299,54 +250,30 @@
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<@T1>.c1(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<@T1>.c2(t1Instance, forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<@T1>.c3(forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<@T1>.c4(t1Instance, forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
     new ArgumentsBinding2_t02<@T1>.c5(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   // test generic class members
   Expect.throws(() {
-    new ArgumentsBinding2_t02<@T1>.valid().superTest(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<@T1>(t1Instance).superTest(forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<@T1>.valid().superTestPositioned(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<@T1>(t1Instance).superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<@T1>.valid().superTestPositioned(forgetType(t1Instance), forgetType(t0Instance));
+    new ArgumentsBinding2_t02<@T1>(t1Instance).superSetter = forgetType(t0Instance);
   }, (e) => e is TypeError);
 
   Expect.throws(() {
-    new ArgumentsBinding2_t02<@T1>.valid().superTestNamed(forgetType(t0Instance));
+    new ArgumentsBinding2_t02<@T1>(t1Instance).superGetter;
   }, (e) => e is TypeError);
 
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<@T1>.valid().superTestNamed(forgetType(t1Instance), val2: forgetType(t0Instance));
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<@T1>.valid().superSetter = forgetType(t0Instance);
-  }, (e) => e is TypeError);
-
-  Expect.throws(() {
-    new ArgumentsBinding2_t02<@T1>.valid().superGetter;
-  }, (e) => e is TypeError);
-
-  new ArgumentsBinding2_t02<@T1>.valid().test();
+  new ArgumentsBinding2_t02<@T1>(t1Instance).test();
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_fail_x03.dart b/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_fail_x03.dart
index 457edce..565751c 100644
--- a/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_fail_x03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_fail_x03.dart
@@ -11,8 +11,8 @@
 
 class ArgumentsBindingSuper1_t03 {
   void superTest(@T1 val) {}
-  void superTestPositioned(@T1 val, [@T1 val2]) {}
-  void superTestNamed(@T1 val, {@T1 val2}) {}
+  void superTestPositioned(@T1 val, [@T1 val2 = t1Default]) {}
+  void superTestNamed(@T1 val, {@T1 val2 = t1Default}) {}
   @T1 get superGetter => forgetType(t0Instance);
   void set superSetter(@T1 val) {}
 }
@@ -108,8 +108,7 @@
 
 class ArgumentsBindingSuper2_t03<X> {
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => forgetType(t0Instance);
   void set superSetter(X val) {}
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_x01.dart b/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_x01.dart
index a10b910..e20017c 100644
--- a/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_x01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_x01.dart
@@ -8,31 +8,29 @@
  * of T0 can be be used as an argument of type T1
  * @author sgrekhov@unipro.ru
  */
+namedArgumentsFunc1(@T1 t1, {@T1 t2 = t1Default}) {}
+positionalArgumentsFunc1(@T1 t1, [@T1 t2 = t1Default]) {}
 
-namedArgumentsFunc1(@T1 t1, {@T1 t2}) {}
-positionalArgumentsFunc1(@T1 t1, [@T1 t2]) {}
-
-namedArgumentsFunc2<X>(X t1, {X t2}) {}
-positionalArgumentsFunc2<X>(X t1, [X t2]) {}
+namedArgumentsFunc2<X>(X t1, {required X t2}) {}
 
 class ArgumentsBindingClass {
   ArgumentsBindingClass(@T1 t1) {}
 
-  ArgumentsBindingClass.named(@T1 t1, {@T1 t2}) {}
-  ArgumentsBindingClass.positional(@T1 t1, [@T1 t2]) {}
+  ArgumentsBindingClass.named(@T1 t1, {@T1 t2 = t1Default}) {}
+  ArgumentsBindingClass.positional(@T1 t1, [@T1 t2 = t1Default]) {}
 
-  factory ArgumentsBindingClass.fNamed(@T1 t1, {@T1 t2}) {
+  factory ArgumentsBindingClass.fNamed(@T1 t1, {@T1 t2  = t1Default}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(@T1 t1, [@T1 t2]) {
+  factory ArgumentsBindingClass.fPositional(@T1 t1, [@T1 t2 = t1Default]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(@T1 t1, {@T1 t2}) {}
-  static positionalArgumentsStaticMethod(@T1 t1, [@T1 t2]) {}
+  static namedArgumentsStaticMethod(@T1 t1, {@T1 t2 = t1Default}) {}
+  static positionalArgumentsStaticMethod(@T1 t1, [@T1 t2 = t1Default]) {}
 
-  namedArgumentsMethod(@T1 t1, {@T1 t2}) {}
-  positionalArgumentsMethod(@T1 t1, [@T1 t2]) {}
+  namedArgumentsMethod(@T1 t1, {@T1 t2 = t1Default}) {}
+  positionalArgumentsMethod(@T1 t1, [@T1 t2 = t1Default]) {}
 
   set testSetter(@T1 val) {}
 }
@@ -40,18 +38,13 @@
 class ArgumentsBindingGen<X>  {
   ArgumentsBindingGen(X t1) {}
 
-  ArgumentsBindingGen.named(X t1, {X t2}) {}
-  ArgumentsBindingGen.positional(X t1, [X t2]) {}
+  ArgumentsBindingGen.named(X t1, {required X t2}) {}
 
-  factory ArgumentsBindingGen.fNamed(X t1, {X t2}) {
+  factory ArgumentsBindingGen.fNamed(X t1, {required X t2}) {
     return new ArgumentsBindingGen.named(t1, t2: t2);
   }
-  factory ArgumentsBindingGen.fPositional(X t1, [X t2]) {
-    return new ArgumentsBindingGen.positional(t1, t2);
-  }
 
-  namedArgumentsMethod(X t1, {X t2}) {}
-  positionalArgumentsMethod(X t1, [X t2]){}
+  namedArgumentsMethod(X t1, {required X t2}) {}
 
   set testSetter(X val) {}
 }
@@ -66,8 +59,6 @@
       new ArgumentsBindingClass(forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance1 = new ArgumentsBindingClass.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
   instance1 = new ArgumentsBindingClass.positional(forgetType(t0Instance),
@@ -91,25 +82,18 @@
   //# <-- NotGenericFunctionType
   // test generic functions
   namedArgumentsFunc2<@T1>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<@T1>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
   ArgumentsBindingGen<@T1> instance2 =
       new ArgumentsBindingGen<@T1>(forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<@T1>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<@T1>.fPositional(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2 = new ArgumentsBindingGen<@T1>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<@T1>.positional(forgetType(t0Instance),
-      forgetType(t0Instance));
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2.positionalArgumentsMethod(forgetType(t0Instance),
-      forgetType(t0Instance));
   instance2.testSetter = forgetType(t0Instance);
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_x02.dart b/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_x02.dart
index 52045fc..26e4ca2 100644
--- a/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_x02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_x02.dart
@@ -12,21 +12,20 @@
 class ArgumentsBindingSuper1_t02 {
   @T1 m;
 
-  ArgumentsBindingSuper1_t02(@T1 value) {}
-  ArgumentsBindingSuper1_t02.named(@T1 value, {@T1 val2}) {}
-  ArgumentsBindingSuper1_t02.positional(@T1 value, [@T1 val2]) {}
+  ArgumentsBindingSuper1_t02(@T1 value): m = value {}
+  ArgumentsBindingSuper1_t02.named(@T1 value, {@T1 val2 = t1Default}): m = value {}
+  ArgumentsBindingSuper1_t02.positional(@T1 value, [@T1 val2 = t1Default]): m = value {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
   void superTest(@T1 val) {}
-  void superTestPositioned(@T1 val, [@T1 val2]) {}
-  void superTestNamed(@T1 val, {@T1 val2}) {}
+  void superTestPositioned(@T1 val, [@T1 val2 = t1Default]) {}
+  void superTestNamed(@T1 val, {@T1 val2 = t1Default}) {}
   @T1 get superGetter => m;
   void set superSetter(@T1 val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
   ArgumentsBinding1_t02(dynamic t1) : super(t1) {}
-  ArgumentsBinding1_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding1_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
   ArgumentsBinding1_t02.c3(dynamic t1) : super.positional(t1) {}
   ArgumentsBinding1_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
@@ -47,31 +46,23 @@
 class ArgumentsBindingSuper2_t02<X> {
   X m;
 
-  ArgumentsBindingSuper2_t02(X value) {}
-  ArgumentsBindingSuper2_t02.named(X value, {X val2}) {}
-  ArgumentsBindingSuper2_t02.positional(X value, [X val2]) {}
+  ArgumentsBindingSuper2_t02(X value): m = value {}
+  ArgumentsBindingSuper2_t02.named(X value, {required X val2}):m = value {}
   ArgumentsBindingSuper2_t02.short(this.m);
 
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
+  void superTestNamed(X val, {required X val2}) {}
   X get superGetter => m;
   void set superSetter(X val) {}
 }
 
 class ArgumentsBinding2_t02<X> extends ArgumentsBindingSuper2_t02<X> {
   ArgumentsBinding2_t02(X t1) : super(t1) {}
-  ArgumentsBinding2_t02.c1(dynamic t1) : super.named(t1) {}
   ArgumentsBinding2_t02.c2(dynamic t1, dynamic t2) : super.named(t1, val2: t2) {}
-  ArgumentsBinding2_t02.c3(dynamic t1) : super.positional(t1) {}
-  ArgumentsBinding2_t02.c4(dynamic t1, dynamic t2) : super.positional(t1, t2) {}
   ArgumentsBinding2_t02.c5(dynamic t1) : super.short(t1) {}
 
   test(X t1, X t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
     m = t1;
@@ -81,7 +72,6 @@
 
 main() {
   ArgumentsBinding1_t02 c1 = new ArgumentsBinding1_t02(forgetType(t0Instance));
-  c1 = new ArgumentsBinding1_t02.c1(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c2(t1Instance, forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c3(forgetType(t0Instance));
   c1 = new ArgumentsBinding1_t02.c4(t1Instance, forgetType(t0Instance));
@@ -101,17 +91,11 @@
   //# <-- NotGenericFunctionType
   ArgumentsBinding2_t02<@T1> c2 =
     new ArgumentsBinding2_t02<@T1>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<@T1>.c1(forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<@T1>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<@T1>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<@T1>.c4(t1Instance, forgetType(t0Instance));
   c2 = new ArgumentsBinding2_t02<@T1>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
   c2.superGetter;
diff --git a/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_x03.dart b/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_x03.dart
index 164c842..2f189fe 100644
--- a/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_x03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/test_cases/arguments_binding_x03.dart
@@ -10,11 +10,11 @@
  */
 
 class ArgumentsBindingMixin1_t03 {
-  @T1 m;
+  @T1 m = t1Default;
 
   void superTest(@T1 val) {}
-  void superTestPositioned(@T1 val, [@T1 val2]) {}
-  void superTestNamed(@T1 val, {@T1 val2}) {}
+  void superTestPositioned(@T1 val, [@T1 val2 = t1Default]) {}
+  void superTestNamed(@T1 val, {@T1 val2 = t1Default}) {}
   @T1 get superGetter => m;
   void set superSetter(@T1 val) {}
 }
@@ -34,12 +34,8 @@
 }
 
 class ArgumentsBindingMixin2_t03<X> {
-  X m;
-
   void superTest(X val) {}
-  void superTestPositioned(X val, [X val2]) {}
-  void superTestNamed(X val, {X val2}) {}
-  X get superGetter => m;
+  void superTestNamed(X val, {required X val2}) {}
   void set superSetter(X val) {}
 }
 
@@ -47,13 +43,8 @@
 
   test(dynamic t1, dynamic t2) {
     superTest(t1);
-    superTestPositioned(t1);
-    superTestPositioned(t2, t1);
-    superTestNamed(t1);
     superTestNamed(t2, val2: t1);
     superSetter = t1;
-    m = t1;
-    superGetter;
   }
 }
 
@@ -75,11 +66,7 @@
   ArgumentsBinding2_t03<@T1> c2 = new ArgumentsBinding2_t03<@T1>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
-  c2.superTestPositioned(forgetType(t0Instance));
-  c2.superTestPositioned(t1Instance, forgetType(t0Instance));
-  c2.superTestNamed(forgetType(t0Instance));
   c2.superTestNamed(t1Instance, val2: forgetType(t0Instance));
   c2.superSetter = forgetType(t0Instance);
-  c2.superGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/static/generated/right_Object_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_Object_arguments_binding_A01_t01.dart
index 9bd29c5..acc11dd 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_Object_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_Object_arguments_binding_A01_t01.dart
@@ -39,6 +39,8 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_Object_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/static/generated/right_Object_arguments_binding_A01_t02.dart
index 59803ef..c5bf76a 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_Object_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_Object_arguments_binding_A01_t02.dart
@@ -39,6 +39,8 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_Object_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/static/generated/right_Object_arguments_binding_A01_t03.dart
index a136777..87591d7 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_Object_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_Object_arguments_binding_A01_t03.dart
@@ -39,6 +39,8 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_Object_class_member_A01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_Object_class_member_A01_t01.dart
index ad6d272..aa48bbb 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_Object_class_member_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_Object_class_member_A01_t01.dart
@@ -39,6 +39,8 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_Object_class_member_A01_t02.dart b/LanguageFeatures/Subtyping/static/generated/right_Object_class_member_A01_t02.dart
index 30ac284..67e099b 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_Object_class_member_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_Object_class_member_A01_t02.dart
@@ -39,6 +39,8 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_Object_class_member_A01_t03.dart b/LanguageFeatures/Subtyping/static/generated/right_Object_class_member_A01_t03.dart
index 1173152..64b1269 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_Object_class_member_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_Object_class_member_A01_t03.dart
@@ -39,6 +39,8 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_Object_global_variable_A01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_Object_global_variable_A01_t01.dart
index 69a35f5..8465903 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_Object_global_variable_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_Object_global_variable_A01_t01.dart
@@ -39,6 +39,8 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_Object_local_variable_A01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_Object_local_variable_A01_t01.dart
index 59298f9..d32a0e7 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_Object_local_variable_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_Object_local_variable_A01_t01.dart
@@ -39,6 +39,8 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_Object_return_value_A01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_Object_return_value_A01_t01.dart
index d35c2e0..b4e431e 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_Object_return_value_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_Object_return_value_A01_t01.dart
@@ -39,6 +39,8 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_arguments_binding_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_fail_A01_t01.dart
similarity index 98%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_arguments_binding_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_fail_A01_t01.dart
index 59542d1..22bf1d9 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_arguments_binding_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_fail_A01_t01.dart
@@ -27,7 +27,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A01_t01.dart and 
+ * This test is generated from right_object_fail_A01.dart and 
  * arguments_binding_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_arguments_binding_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_fail_A02_t01.dart
similarity index 98%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_arguments_binding_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_fail_A02_t01.dart
index 0fab560..2708581 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_arguments_binding_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_fail_A02_t01.dart
@@ -27,7 +27,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A02_t01.dart and 
+ * This test is generated from right_object_fail_A02.dart and 
  * arguments_binding_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_fail_A03_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_fail_A03_t01.dart
index e1e1206..5307039 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_fail_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_fail_A03_t01.dart
@@ -42,6 +42,8 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_arguments_binding_mixin_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_mixin_fail_A01_t01.dart
similarity index 97%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_arguments_binding_mixin_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_mixin_fail_A01_t01.dart
index 41ea9fc..6c1b31e 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_arguments_binding_mixin_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_mixin_fail_A01_t01.dart
@@ -28,7 +28,7 @@
  * @author ngl@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A01_t01.dart and 
+ * This test is generated from right_object_fail_A01.dart and 
  * arguments_binding_mixin_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_arguments_binding_mixin_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_mixin_fail_A02_t01.dart
similarity index 97%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_arguments_binding_mixin_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_mixin_fail_A02_t01.dart
index f1e473b..78b4c45 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_arguments_binding_mixin_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_mixin_fail_A02_t01.dart
@@ -28,7 +28,7 @@
  * @author ngl@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A02_t01.dart and 
+ * This test is generated from right_object_fail_A02.dart and 
  * arguments_binding_mixin_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_mixin_fail_A03_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_mixin_fail_A03_t01.dart
index fb6b3fe..c576732 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_mixin_fail_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_mixin_fail_A03_t01.dart
@@ -43,6 +43,8 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_arguments_binding_super_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_super_fail_A01_t01.dart
similarity index 98%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_arguments_binding_super_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_super_fail_A01_t01.dart
index e7ef21f..ce69a5e 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_arguments_binding_super_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_super_fail_A01_t01.dart
@@ -28,7 +28,7 @@
  * @author ngl@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A01_t01.dart and 
+ * This test is generated from right_object_fail_A01.dart and 
  * arguments_binding_super_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_arguments_binding_super_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_super_fail_A02_t01.dart
similarity index 98%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_arguments_binding_super_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_super_fail_A02_t01.dart
index cf1900d..3586bfb 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_arguments_binding_super_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_super_fail_A02_t01.dart
@@ -28,7 +28,7 @@
  * @author ngl@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A02_t01.dart and 
+ * This test is generated from right_object_fail_A02.dart and 
  * arguments_binding_super_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_super_fail_A03_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_super_fail_A03_t01.dart
index 47bd9fc..6a929fe 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_super_fail_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_arguments_binding_super_fail_A03_t01.dart
@@ -43,6 +43,8 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_class_member_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_fail_A01_t01.dart
similarity index 97%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_class_member_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_fail_A01_t01.dart
index 8d2207b..fe137cb 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_class_member_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_fail_A01_t01.dart
@@ -28,7 +28,7 @@
  * @author ngl@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A01_t01.dart and 
+ * This test is generated from right_object_fail_A01.dart and 
  * class_member_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_class_member_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_fail_A02_t01.dart
similarity index 97%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_class_member_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_fail_A02_t01.dart
index a2bfad1..4234ccb 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_class_member_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_fail_A02_t01.dart
@@ -28,7 +28,7 @@
  * @author ngl@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A02_t01.dart and 
+ * This test is generated from right_object_fail_A02.dart and 
  * class_member_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_fail_A03_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_fail_A03_t01.dart
index 519146b..035b6e0 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_fail_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_fail_A03_t01.dart
@@ -43,6 +43,8 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_class_member_mixin_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_mixin_fail_A01_t01.dart
similarity index 96%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_class_member_mixin_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_mixin_fail_A01_t01.dart
index df12ffc..9629f35 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_class_member_mixin_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_mixin_fail_A01_t01.dart
@@ -28,7 +28,7 @@
  * @author ngl@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A01_t01.dart and 
+ * This test is generated from right_object_fail_A01.dart and 
  * class_member_mixin_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_class_member_mixin_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_mixin_fail_A02_t01.dart
similarity index 96%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_class_member_mixin_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_mixin_fail_A02_t01.dart
index cbb605c..5c57d36 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_class_member_mixin_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_mixin_fail_A02_t01.dart
@@ -28,7 +28,7 @@
  * @author ngl@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A02_t01.dart and 
+ * This test is generated from right_object_fail_A02.dart and 
  * class_member_mixin_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_mixin_fail_A03_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_mixin_fail_A03_t01.dart
index 3c461d1..c14cbf1 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_mixin_fail_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_mixin_fail_A03_t01.dart
@@ -43,6 +43,8 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_class_member_super_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_super_fail_A01_t01.dart
similarity index 97%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_class_member_super_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_super_fail_A01_t01.dart
index 0937d1a..03d8208 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_class_member_super_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_super_fail_A01_t01.dart
@@ -28,7 +28,7 @@
  * @author ngl@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A01_t01.dart and 
+ * This test is generated from right_object_fail_A01.dart and 
  * class_member_super_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_class_member_super_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_super_fail_A02_t01.dart
similarity index 97%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_class_member_super_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_super_fail_A02_t01.dart
index befe7c2..561e26a 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_class_member_super_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_super_fail_A02_t01.dart
@@ -28,7 +28,7 @@
  * @author ngl@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A02_t01.dart and 
+ * This test is generated from right_object_fail_A02.dart and 
  * class_member_super_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_super_fail_A03_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_super_fail_A03_t01.dart
index a0b0bf0..185282d 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_super_fail_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_class_member_super_fail_A03_t01.dart
@@ -43,6 +43,8 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_global_variable_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_global_variable_fail_A01_t01.dart
similarity index 96%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_global_variable_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_global_variable_fail_A01_t01.dart
index 891556f..cf3cc19 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_global_variable_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_global_variable_fail_A01_t01.dart
@@ -28,7 +28,7 @@
  * @author ngl@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A01_t01.dart and 
+ * This test is generated from right_object_fail_A01.dart and 
  * global_variable_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_global_variable_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_global_variable_fail_A02_t01.dart
similarity index 96%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_global_variable_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_global_variable_fail_A02_t01.dart
index ceb08b2..46c43d1 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_global_variable_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_global_variable_fail_A02_t01.dart
@@ -28,7 +28,7 @@
  * @author ngl@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A02_t01.dart and 
+ * This test is generated from right_object_fail_A02.dart and 
  * global_variable_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_global_variable_fail_A03_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_global_variable_fail_A03_t01.dart
index 670ec85..1778309 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_global_variable_fail_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_global_variable_fail_A03_t01.dart
@@ -43,6 +43,8 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_local_variable_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_local_variable_fail_A01_t01.dart
similarity index 96%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_local_variable_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_local_variable_fail_A01_t01.dart
index b55a0ff..c364c02 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_local_variable_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_local_variable_fail_A01_t01.dart
@@ -28,7 +28,7 @@
  * @author ngl@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A01_t01.dart and 
+ * This test is generated from right_object_fail_A01.dart and 
  * local_variable_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_local_variable_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_local_variable_fail_A02_t01.dart
similarity index 96%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_local_variable_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_local_variable_fail_A02_t01.dart
index 286532a..2d42336 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_local_variable_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_local_variable_fail_A02_t01.dart
@@ -28,7 +28,7 @@
  * @author ngl@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A02_t01.dart and 
+ * This test is generated from right_object_fail_A02.dart and 
  * local_variable_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_local_variable_fail_A03_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_local_variable_fail_A03_t01.dart
index 6ee0b23..a196908 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_local_variable_fail_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_local_variable_fail_A03_t01.dart
@@ -43,6 +43,8 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_return_value_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_return_value_fail_A01_t01.dart
similarity index 96%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_return_value_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_return_value_fail_A01_t01.dart
index 1b572bb..424e8cf 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A01_return_value_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_return_value_fail_A01_t01.dart
@@ -27,7 +27,7 @@
  * @author ngl@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A01_t01.dart and 
+ * This test is generated from right_object_fail_A01.dart and 
  * return_value_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_return_value_fail_t01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_return_value_fail_A02_t01.dart
similarity index 96%
rename from LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_return_value_fail_t01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/right_object_fail_return_value_fail_A02_t01.dart
index 2b0d8d3..7e49c52 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_A02_return_value_fail_t01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_return_value_fail_A02_t01.dart
@@ -27,7 +27,7 @@
  * @author ngl@unipro.ru
  */
 /*
- * This test is generated from right_object_fail_A02_t01.dart and 
+ * This test is generated from right_object_fail_A02.dart and 
  * return_value_fail_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/right_object_fail_return_value_fail_A03_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_object_fail_return_value_fail_A03_t01.dart
index 2adb55b..c46b9fd 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_object_fail_return_value_fail_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_object_fail_return_value_fail_A03_t01.dart
@@ -42,6 +42,8 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/test_types/right_object_fail_A01_t01.dart b/LanguageFeatures/Subtyping/static/test_types/right_object_fail_A01.dart
similarity index 100%
rename from LanguageFeatures/Subtyping/static/test_types/right_object_fail_A01_t01.dart
rename to LanguageFeatures/Subtyping/static/test_types/right_object_fail_A01.dart
diff --git a/LanguageFeatures/Subtyping/static/test_types/right_object_fail_A02_t01.dart b/LanguageFeatures/Subtyping/static/test_types/right_object_fail_A02.dart
similarity index 100%
rename from LanguageFeatures/Subtyping/static/test_types/right_object_fail_A02_t01.dart
rename to LanguageFeatures/Subtyping/static/test_types/right_object_fail_A02.dart
diff --git a/LanguageFeatures/Subtyping/test_types/right_object_A01.dart b/LanguageFeatures/Subtyping/test_types/right_object_A01.dart
index 512c83a..46c6903 100644
--- a/LanguageFeatures/Subtyping/test_types/right_object_A01.dart
+++ b/LanguageFeatures/Subtyping/test_types/right_object_A01.dart
@@ -26,6 +26,8 @@
 T0 t0Instance = new T0();
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 //# @T0 = T0
 //# @T1 = Object
 
diff --git a/LanguageFeatures/Subtyping/test_types/right_object_fail_A03.dart b/LanguageFeatures/Subtyping/test_types/right_object_fail_A03.dart
index 7c4d530..a2a6a69 100644
--- a/LanguageFeatures/Subtyping/test_types/right_object_fail_A03.dart
+++ b/LanguageFeatures/Subtyping/test_types/right_object_fail_A03.dart
@@ -27,5 +27,7 @@
 FutureOr<S?> t0Instance = new Future.value(new S());
 Object t1Instance = new Object();
 
+const t1Default = const Object();
+
 //# @T0 = FutureOr<S?>
 //# @T1 = Object
