Fixed Issue #498: get rid of self-references in non-function type aliases tests.
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_FutureOr_l1_t01.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_FutureOr_l1_t01.dart
index 333b091..2f774d4 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_FutureOr_l1_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_FutureOr_l1_t01.dart
@@ -56,7 +56,7 @@
 
 main() {
   Expect.equals(
-    typeOf<A<FutureOr<dynamic>>>(),
+    typeOf<C<FutureOr<dynamic>>>(),
     typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_FutureOr_l1_t02.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_FutureOr_l1_t02.dart
index 2f38d56..24aee82 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_FutureOr_l1_t02.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_FutureOr_l1_t02.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks instantiation to bounds for [typedef A<X extends
- * FutureOr<A<X>>]
+ * FutureOr<C<X>> = C<X>]
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -52,11 +52,11 @@
 import "../../../../Utils/expect.dart";
 
 class C<X> {}
-typedef A<X extends FutureOr<A<X>>> = C<X>;
+typedef A<X extends FutureOr<C<X>>> = C<X>;
 
 main() {
   Expect.equals(
-    typeOf<A<FutureOr<A<dynamic>>>>(),
+    typeOf<C<FutureOr<C<dynamic>>>>(),
     typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t01.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t01.dart
index 188cfec..05cb714 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t01.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [typedef
- * A<X extends A<X>>]
+ * A<X extends C<X>> = C<X>]
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -51,11 +51,11 @@
 import "../../../../Utils/expect.dart";
 
 class C<X> {}
-typedef A<X extends A<X>> = C<X>;
+typedef A<X extends C<X>> = C<X>;
 
 main() {
   Expect.equals(
-    typeOf<A<A<dynamic>>>(),
+    typeOf<C<C<dynamic>>>(),
     typeOf<A>()
   );
 }
\ No newline at end of file
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t02.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t02.dart
index 44148c9..3cef42c 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t02.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t02.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks instantiation to bounds for [typedef A<X extends
- * A<A<X>>>]
+ * C<C<X>>> = C<X>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -51,11 +51,11 @@
 import "../../../../Utils/expect.dart";
 
 class C<X> {}
-typedef A<X extends A<A<X>>> = C<X>;
+typedef A<X extends C<C<X>>> = C<X>;
 
 main() {
   Expect.equals(
-    typeOf<A<A<A<dynamic>>>>(),
+    typeOf<C<C<C<dynamic>>>>(),
     typeOf<A>()
   );
-}
\ No newline at end of file
+}
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t03.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t03.dart
index 7248af4..cbeb207 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t03.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t03.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiation to bounds works for [class A<X extends
- * A<X>>], [typedef B<X extends A<X>>]
+ * A<X>>; typedef B<X extends A<X>> = A<X>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -55,7 +55,7 @@
 
 main() {
   Expect.equals(
-    typeOf<B<A<dynamic>>>(),
+    typeOf<A<A<dynamic>>>(),
     typeOf<B>(),
   );
 }
\ No newline at end of file
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t04.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t04.dart
index 7fc18fc..c0451af 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t04.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t04.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiation to bounds works for [class A<X extends
- * A<X>>], typedef B<X extends A<A<X>>>]
+ * A<X>>; typedef B<X extends A<A<X>>> = A<X>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -55,7 +55,7 @@
 
 main() {
   Expect.equals(
-    typeOf<B<A<A<dynamic>>>>(),
+    typeOf<A<A<A<dynamic>>>>(),
     typeOf<B>(),
   );
 }
\ No newline at end of file
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t05.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t05.dart
index 3643aac..e527897 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t05.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t05.dart
@@ -42,20 +42,23 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiate-to-bounds works as expected for [typedef
- * O<X extends M<O<X>>>].
+ * @description Checks that instantiate-to-bounds works as expected for [class
+ * M<X>; class N<X extends M<N<X>>>; typedef O<X extends M<N<X>>> = M<N<X>>].
  * @author iarkh@unipro.ru
+ * @Issue 34726
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
 
 import "../../../../Utils/expect.dart";
 
 class M<X> {}
-typedef O<X extends M<O<X>>> = M<O<X>>;
+class N<X extends M<N<X>>> {}
+
+typedef O<X extends M<N<X>>> = M<N<X>>;
 
 main() {
   Expect.equals(
-    typeOf<O<M<O<dynamic>>>>(),
+    typeOf<M<N<M<dynamic>>>>(),
     typeOf<O>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t06.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t06.dart
index 5e2dbc6..86e9c21 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t06.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l1_t06.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks instantiation to bounds for the [typedef A<X extends
- * M<A<A<A<A<X>>>>>>]
+ * M<M<M<M<M<M<X>>>>>>> = M<M<X>>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -51,11 +51,11 @@
 import "../../../../Utils/expect.dart";
 
 class M<X> {}
-typedef A<X extends M<A<M<A<M<A<X>>>>>>> = M<A<X>>;
+typedef A<X extends M<M<M<M<M<M<X>>>>>>> = M<M<X>>;
 
 main() {
   Expect.equals(
-    typeOf<A<M<A<M<A<M<A<dynamic>>>>>>>>(),
+    typeOf<M<M<M<M<M<M<M<dynamic>>>>>>>>(),
     typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t01.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t01.dart
index 6d2f627..707e3d7 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t01.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [typedef
- * [A<X1 extends X2, X2 extends A<X1, X2>>]
+ * [A<X1 extends X2, X2 extends C<X1, X2>>]
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -51,11 +51,11 @@
 import "../../../../Utils/expect.dart";
 
 class C<X1, X2> {}
-typedef A<X1 extends X2, X2 extends A<X1, X2>> = C<X1, X2>;
+typedef A<X1 extends X2, X2 extends C<X1, X2>> = C<X1, X2>;
 
 main() {
   Expect.equals(
-    typeOf<A<dynamic, A<dynamic, dynamic>>>(),
+    typeOf<C<dynamic, C<dynamic, dynamic>>>(),
     typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t02.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t02.dart
index ff101fc..c8569b5 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t02.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t02.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [typedef
- * A<X1 extends A<X1, X2>, X2 extends X1>]
+ * A<X1 extends C<X1, X2>, X2 extends X1>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -51,11 +51,11 @@
 import "../../../../Utils/expect.dart";
 
 class C<X1, X2> {}
-typedef A<X1 extends A<X1, X2>, X2 extends X1> = C<X1, X2>;
+typedef A<X1 extends C<X1, X2>, X2 extends X1> = C<X1, X2>;
 
 main() {
   Expect.equals(
-      typeOf<A<A<dynamic, dynamic>, dynamic>>(),
+      typeOf<C<C<dynamic, dynamic>, dynamic>>(),
       typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t03.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t03.dart
index 0dba4e1..cda1822 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t03.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t03.dart
@@ -42,20 +42,22 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiate-to-bounds works as expected for [typedef
- * A<String, X extends A<Null, A<String,X>>>]
+ * @description Checks that instantiate-to-bounds works as expected for [class
+ * C<X1, X2>; typedef A<Y extends String, X extends C<Null, C<String, X>>> =
+ * C<Y, X>].
  * @author iarkh@unipro.ru
+ * @Issue 34727, 34948
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
 
 import "../../../../Utils/expect.dart";
 
 class C<X1, X2> {}
-typedef A<Y extends String, X extends A<Null, A<String, X>>> = C<Y, X>;
+typedef A<Y extends String, X extends C<Null, C<String, X>>> = C<Y, X>;
 
 main() {
   Expect.equals(
-    typeOf<A<String, A<Null, A<String, dynamic>>>>(),
+    typeOf<C<String, C<Null, C<String, dynamic>>>>(),
     typeOf<A>(),
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t04.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t04.dart
index c4d28a9..182dd75 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t04.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t04.dart
@@ -42,8 +42,9 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiate-to-bounds works as expected for [typedef
- * A<String, X extends A<void, A<String,X>>>]
+ * @description Checks that instantiate-to-bounds works as expected for [class
+ * C<X, Y>; typedef A<Y extends String, X extends C<void, C<String, X>>> =
+ * C<Y, X>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -52,11 +53,11 @@
 
 
 class C<X, Y> {}
-typedef A<Y extends String, X extends A<void, A<String, X>>> = C<Y, X>;
+typedef A<Y extends String, X extends C<void, C<String, X>>> = C<Y, X>;
 
 main() {
   Expect.equals(
-    typeOf<A<String, A<void, A<String, dynamic>>>>(),
+    typeOf<C<String, C<void, C<String, dynamic>>>>(),
     typeOf<A>(),
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t05.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t05.dart
index f78607a..4b29bec 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t05.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t05.dart
@@ -43,8 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [class
- * B<X extends B<X, Y>, Y>], [typedef A<X1 extends B<X1, X2>, X2 extends X1>].
-
+ * B<X extends B<X, Y>, Y>; typedef A<X1 extends B<X1, X2>, X2 extends X1>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t06.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t06.dart
index 0486f5d..d3f95b6 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t06.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t06.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [class
- * B<X extends B<X, Y>, Y>], [typedef A<X1 extends B<X1, X2>, X2>]
+ * B<X extends B<X, Y>, Y>; typedef A<X1 extends B<X1, X2>, X2>]
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -55,7 +55,7 @@
 
 main() {
   Expect.equals(
-    typeOf<A<B<dynamic, dynamic>, dynamic>>(),
+    typeOf<B<B<dynamic, dynamic>, dynamic>>(),
     typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t07.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t07.dart
index 8783289..5ef290c 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t07.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t07.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [class
- * B<X extends B<X>>], [typedef class A<X1, X2 extends B<X2>>]
+ * B<X extends B<X>>; typedef class A<X1, X2 extends B<X2>>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -55,7 +55,7 @@
 
 main() {
   Expect.equals(
-    typeOf<A<dynamic, B<dynamic, dynamic>>>(),
+    typeOf<B<dynamic, B<dynamic, dynamic>>>(),
     typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t09.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t09.dart
index 3cd6a2e..a8c77c1 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t09.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t09.dart
@@ -43,8 +43,8 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [class
- * B<X extends B<X>>], [class C<X, Y>], [typedef A<X1 extends B<X2>, X2 extends
- * B<X2>>]
+ * B<X extends B<X>>; class C<X, Y>; typedef A<X1 extends B<X2>, X2 extends
+ * B<X2>> = C<X1, X2>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -57,7 +57,7 @@
 
 main() {
   Expect.equals(
-      typeOf<A<B<B<dynamic>>, B<dynamic>>>(),
+      typeOf<C<B<B<dynamic>>, B<dynamic>>>(),
       typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t10.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t10.dart
index 2e5bae7..3975bc9 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t10.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l2_t10.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [typedef
- * A<X1 extends A<X1, X2>, X2 extends A<X1, X2>>]
+ * A<X1 extends B<X1, X2>, X2 extends B<X1, X2>>]
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -51,11 +51,11 @@
 import "../../../../Utils/expect.dart";
 
 class B<X, Y> {}
-typedef A<X1 extends A<X1, X2>, X2 extends A<X1, X2>> = B<X1, X2>;
+typedef A<X1 extends B<X1, X2>, X2 extends B<X1, X2>> = B<X1, X2>;
 
 main() {
   Expect.equals(
-      typeOf<A<A<dynamic, dynamic>, A<dynamic, dynamic>>>(),
+      typeOf<B<B<dynamic, dynamic>, B<dynamic, dynamic>>>(),
       typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l3_t01.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l3_t01.dart
index 889a9ce..406054b 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l3_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l3_t01.dart
@@ -42,8 +42,8 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiate-to-bounds works as expected for the
- *  class [G<X1 extends X2, X2 extends X3, X3 extends G<X1, X2, X3>>]
+ * @description Checks that instantiate-to-bounds works as expected for [typedef
+ * G<X1 extends X2, X2 extends X3, X3 extends A<X1, X2, X3>>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -51,11 +51,11 @@
 import "../../../../Utils/expect.dart";
 
 class A<X, Y, Z> {}
-typedef G<X1 extends X2, X2 extends X3, X3 extends G<X1, X2, X3>> = A<X1, X2, X3>;
+typedef G<X1 extends X2, X2 extends X3, X3 extends A<X1, X2, X3>> = A<X1, X2, X3>;
 
 main() {
   Expect.equals(
-    typeOf<G<dynamic, dynamic, G<dynamic, dynamic, dynamic>>>(),
+    typeOf<A<dynamic, dynamic, A<dynamic, dynamic, dynamic>>>(),
     typeOf<G>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l4_t01.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l4_t01.dart
index a8fc7b1..3d38b32 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l4_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_l4_t01.dart
@@ -43,8 +43,8 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [class
- * A<X>], [class B<X> extends A<X>], [class C<X1, X2, X3, X4>], [typedef G<X1
- * extends A<X1>, X2 extends A<X1>, X3 extends B, X4 extends X2>]
+ * A<X>; class B<X> extends A<X>; class C<X1, X2, X3, X4>; typedef G<X1 extends
+ * A<X1>, X2 extends A<X1>, X3 extends B, X4 extends X2> = C<X1, X2, X3, X4>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -60,7 +60,7 @@
 
 main() {
   Expect.equals(
-    typeOf<G<A<dynamic>, A<A<dynamic>>, B<dynamic>, A<A<dynamic>>>>(),
+    typeOf<C<A<dynamic>, A<A<dynamic>>, B<dynamic>, A<A<dynamic>>>>(),
     typeOf<G>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l1_t01.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l1_t01.dart
index deb3bad..2981e5e 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l1_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l1_t01.dart
@@ -42,8 +42,9 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiation to bounds works OK for the
- * non-function typedef with [X Function()] parameter (covariant)
+ * @description Checks that instantiation to bounds works OK for non-function
+ * typedef with [X Function()] type parameter: [typedef G<X> = X Function();
+ * class C<X>; typedef A<X extends G<С<X>>> = C<X>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -53,11 +54,11 @@
 typedef G<X> = X Function();
 class C<X> {}
 
-typedef A<X extends G<A<X>>> = C<X>;
+typedef A<X extends G<С<X>>> = C<X>;
 
 main() {
   Expect.equals(
-    typeOf<A<G<A<dynamic>>>>(),
+    typeOf<С<G<C<dynamic>>>>(),
     typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l1_t02.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l1_t02.dart
index 3aba5e0..d85734b 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l1_t02.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l1_t02.dart
@@ -43,7 +43,8 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiation to bounds works OK for non-function
- * typedef with [typedef G<X> = Function(X)] parameter (contravariant)
+ * typedef with [typedef G<X> = Function(X)] type parameter: [typedef G<X> =
+ * void Function(X); class C<X>; typedef A<X extends G<C<X>>> = C<X>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -53,11 +54,11 @@
 typedef G<X> = void Function(X);
 class C<X> {}
 
-typedef A<X extends G<A<X>>> = C<X>;
+typedef A<X extends G<C<X>>> = C<X>;
 
 main() {
   Expect.equals(
-      typeOf<A<G<C<Null>>>>(),
+      typeOf<C<G<C<Null>>>>(),
       typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l1_t04.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l1_t04.dart
index 14146ec..60ba372 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l1_t04.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l1_t04.dart
@@ -43,7 +43,8 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiation to bounds works OK for non-function
- * typedef with [typedef G<X> = void Function()] parameter (not used)
+ * typedef with [typedef G<X> = void Function()] type parameter: [typedef G<X> =
+ * void Function(); class C<X>; typedef A<X extends G<C<X>>> = C<X>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -57,7 +58,7 @@
 
 main() {
   Expect.equals(
-      typeOf<A<G<C<dynamic>>>>(),
+      typeOf<C<G<C<dynamic>>>>(),
       typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t01.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t01.dart
index 987cb70..dfcec23 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t01.dart
@@ -43,8 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiation to bounds works OK for [typedef G<X> =
- * X Function()], [class C<X, Y>], [typedef A<X extends G<A<X, Y>>, Y extends
- * X>] (covariant)
+ * X Function(); class C<X, Y>; typedef A<X extends G<C<X, Y>>, Y extends X>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -57,7 +56,7 @@
 
 main() {
   Expect.equals(
-      typeOf<A<G<C<dynamic, dynamic>>, dynamic>>(),
+      typeOf<C<G<C<dynamic, dynamic>>, dynamic>>(),
       typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t02.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t02.dart
index 543fe80..1468820 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t02.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t02.dart
@@ -43,8 +43,8 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiation to bounds works OK for [typedef G<X> =
- * Function(X)], [class C<X, Y>], [typedef A<X extends G<A<X,Y>>, Y extends X> =
- * C<X, Y>] (covariant)
+ * Function(X); class C<X, Y>; typedef A<X extends G<A<X,Y>>, Y extends X> =
+ * C<X, Y>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -57,7 +57,7 @@
 
 main() {
   Expect.equals(
-      typeOf<A<G<C<Null, Null>>, dynamic>>(),
+      typeOf<C<G<C<Null, Null>>, dynamic>>(),
       typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t04.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t04.dart
index fb4c3dc..2d0a61f 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t04.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t04.dart
@@ -42,9 +42,9 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiation to bounds works OK for [class C<X, Y>],
-    [typedef G<X> = void Function()], [typedef A<X extends G<C<X,Y>>, Y extends
-    X> = C<X, Y>] (unused)
+ * @description Checks that instantiation to bounds works OK for [class C<X, Y>;
+ * typedef G<X> = void Function(); typedef A<X extends G<C<X,Y>>, Y extends X> =
+ * C<X, Y>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -57,7 +57,7 @@
 
 main() {
   Expect.equals(
-      typeOf<A<G<C<dynamic, dynamic>>, dynamic>>(),
+      typeOf<C<G<C<dynamic, dynamic>>, dynamic>>(),
       typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t05.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t05.dart
index 61e21c8..df8db90 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t05.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t05.dart
@@ -42,9 +42,9 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiation to bounds works OK for [class C<X,
- * Y>], [typedef G<X> = X Function()], [typedef A<X extends G<A<Y, X>>, Y
- * extends G<A<X, Y>>> = C<X, Y>]
+ * @description Checks that instantiation to bounds works OK for [class C<X,Y>;
+ * typedef G<X> = X Function(); typedef A<X extends G<A<Y, X>>, Y extends G<A<X,
+ * Y>>> = C<X, Y>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -57,7 +57,7 @@
 
 main() {
   Expect.equals(
-      typeOf<A<G<C<dynamic, dynamic>>, G<A<dynamic, dynamic>>>>(),
+      typeOf<C<G<C<dynamic, dynamic>>, G<C<dynamic, dynamic>>>>(),
       typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t06.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t06.dart
index fac0705..3372f76 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t06.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t06.dart
@@ -42,8 +42,9 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiation to bounds works OK for [typedef G<X> =
- * Function(X)], [class A<X extends G<A<Y, X>>, Y extends G<A<X, Y>>>]
+ * @description Checks that instantiation to bounds works OK for [class C<X, Y>;
+ * typedef G<X> = Function(X); typedef A<X extends G<C<Y, X>>, Y extends G<C<X,
+ * Y>>> = C<X, Y>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -56,7 +57,7 @@
 
 main() {
   Expect.equals(
-      typeOf<A<G<C<Null, Null>>, G<C<Null, Null>>>>(),
+      typeOf<C<G<C<Null, Null>>, G<C<Null, Null>>>>(),
       typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t08.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t08.dart
index 9a2b4a7..7307361 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t08.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/dynamic/nonfunction_typedef_l2_t08.dart
@@ -42,8 +42,9 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiation to bounds works OK for [typedef G<X> =
- * void Function()], [class A<X extends G<A<Y, X>>, Y extends G<A<X, Y>>>]
+ * @description Checks that instantiation to bounds works OK for [class C<X, Y>;
+ * typedef G<X> = void Function(); typedef A<X extends G<C<Y, X>>, Y extends
+ * G<C<X, Y>>> = C<X, Y>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -56,7 +57,7 @@
 
 main() {
   Expect.equals(
-      typeOf<A<G<C<dynamic, dynamic>>, G<C<dynamic, dynamic>>>>(),
+      typeOf<C<G<C<dynamic, dynamic>>, G<C<dynamic, dynamic>>>>(),
       typeOf<A>()
   );
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_FutureOr_l1_t02.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_FutureOr_l1_t02.dart
index e28dc8f..79b2bfb 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_FutureOr_l1_t02.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_FutureOr_l1_t02.dart
@@ -42,8 +42,8 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiate-to-bounds works as expected for [A<X
- * extends FutureOr<A<X>>]
+ * @description Checks that instantiate-to-bounds works as expected for [typedef
+ * A<X extends FutureOr<C<X>>]
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -55,17 +55,17 @@
 
 // Probably does not work here because of the issue 34264
 class C<X> {}
-typedef A<X extends FutureOr<A<X>>> = C<X>;
+typedef A<X extends FutureOr<C<X>>> = C<X>;
 
 main() {
   A source;
   var fsource = toF(source);
-  F<A<FutureOr<A<dynamic>>>> target = fsource;
+  F<A<FutureOr<C<dynamic>>>> target = fsource;
 
   F<A<dynamic>> target1 = fsource;                           //# 01: compile-time error
   F<A<FutureOr<dynamic>>> target2 = fsource;                 //# 02: compile-time error
-  F<A<FutureOr<A<FutureOr<dynamic>>>>> target3 = fsource;    //# 03: compile-time error
-  F<A<FutureOr<A<FutureOr<A<dynamic>>>>>> target4 = fsource; //# 04: compile-time error
+  F<A<FutureOr<C<FutureOr<dynamic>>>>> target3 = fsource;    //# 03: compile-time error
+  F<A<FutureOr<C<FutureOr<C<dynamic>>>>>> target4 = fsource; //# 04: compile-time error
 
-  A(); //# 05: compile-time error
+  A();                                                       //# 05: compile-time error
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t01.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t01.dart
index 87c8a16..fd1d8f1 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t01.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for
- * [typedef A<X extends A<X>>]
+ * [typedef A<X extends C<X>> = C<X>]
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -52,17 +52,17 @@
 F<X> toF<X>(X x) => null;
 
 class C<X> {}
-typedef A<X extends A<X>> = C<X>;
+typedef A<X extends C<X>> = C<X>;
 
 main() {
   A source;
   var fsource = toF(source);
-  F<A<A<dynamic>>> target = fsource;
+  F<A<C<dynamic>>> target = fsource;
 
   F<A<dynamic>> target1 = fsource;             //# 01: compile-time error
-  F<A<A<A<dynamic>>>> target2 = fsource;       //# 02: compile-time error
-  F<A<A<A<A<dynamic>>>>> target3 = fsource;    //# 03: compile-time error
-  F<A<A<A<A<A<dynamic>>>>>> target4 = fsource; //# 04: compile-time error
+  F<A<C<C<dynamic>>>> target2 = fsource;       //# 02: compile-time error
+  F<A<C<C<C<dynamic>>>>> target3 = fsource;    //# 03: compile-time error
+  F<A<C<C<C<C<dynamic>>>>>> target4 = fsource; //# 04: compile-time error
 
-  A();  //# 05: compile-time error
+  A();                                         //# 05: compile-time error
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t02.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t02.dart
index 5013beb..185ac10 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t02.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t02.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiation to bounds works OK for [typedef A<X
- * extends A<A<X>>>]
+ * extends C<C<X>>> = C<X>]
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -52,23 +52,23 @@
 F<X> toF<X>(X x) => null;
 
 class C<X> {}
-typedef A<X extends A<A<X>>> = C<X>;
+typedef A<X extends C<C<X>>> = C<X>;
 
 main() {
   A source;
   var fsource = toF(source);
 
-  F<A<A<A<dynamic>>>> target = fsource;
+  F<A<C<C<dynamic>>>> target = fsource;
 
   F<A<dynamic>> target1 = fsource;             //# 01: compile-time error
-  F<A<A<dynamic>>> target2 = fsource;          //# 02: compile-time error
-  F<A<A<A<A<dynamic>>>>> target3 = fsource;    //# 03: compile-time error
-  F<A<A<A<A<A<dynamic>>>>>> target4 = fsource; //# 04: compile-time error
+  F<A<C<dynamic>>> target2 = fsource;          //# 02: compile-time error
+  F<A<C<C<C<dynamic>>>>> target3 = fsource;    //# 03: compile-time error
+  F<A<C<C<C<C<dynamic>>>>>> target4 = fsource; //# 04: compile-time error
 
-  F<A<Null>> target5 = fsource;             //# 05: compile-time error
-  F<A<A<Null>>> target6 = fsource;          //# 06: compile-time error
-  F<A<A<A<A<Null>>>>> target7 = fsource;    //# 07: compile-time error
-  F<A<A<A<A<A<Null>>>>>> target8 = fsource; //# 08: compile-time error
+  F<A<Null>> target5 = fsource;                //# 05: compile-time error
+  F<A<C<Null>>> target6 = fsource;             //# 06: compile-time error
+  F<A<C<C<C<Null>>>>> target7 = fsource;       //# 07: compile-time error
+  F<A<C<C<C<C<Null>>>>>> target8 = fsource;    //# 08: compile-time error
 
-  A(); //# 09: compile-time error
+  A();                                         //# 09: compile-time error
 }
\ No newline at end of file
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t03.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t03.dart
index 92980d7..2b5a44f 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t03.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t03.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiation to bounds works as expected for
- * [class A<X extends A<X>>], [class B<X extends A<X>>]
+ * [class A<X extends A<X>>; typedef B<X extends A<X>>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -65,11 +65,11 @@
   F<B<A<A<A<dynamic>>>>> target3 = fsource;    //# 03: compile-time error
   F<B<A<A<A<A<dynamic>>>>>> target4 = fsource; //# 04: compile-time error
 
-  F<B<Null>> target5 = fsource;             //# 05: compile-time error
-  F<B<A<Null>>> target6 = fsource;          //# 06: compile-time error
-  F<B<A<A<Null>>>> target7 = fsource;       //# 07: compile-time error
-  F<B<A<A<A<Null>>>>> target8 = fsource;    //# 08: compile-time error
-  F<B<A<A<A<A<Null>>>>>> target9 = fsource; //# 09: compile-time error
+  F<B<Null>> target5 = fsource;                //# 05: compile-time error
+  F<B<A<Null>>> target6 = fsource;             //# 06: compile-time error
+  F<B<A<A<Null>>>> target7 = fsource;          //# 07: compile-time error
+  F<B<A<A<A<Null>>>>> target8 = fsource;       //# 08: compile-time error
+  F<B<A<A<A<A<Null>>>>>> target9 = fsource;    //# 09: compile-time error
 
-  B(); //# 10: compile-time error
+  B();                                         //# 10: compile-time error
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t04.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t04.dart
index 633fbe1..be8c820 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t04.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t04.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiation to bounds works as expected for
- * [class A<X extends A<X>>], [class B<X extends A<A<X>>>]
+ * [class A<X extends A<X>>; typedef B<X extends A<A<X>>> = A<X>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -65,11 +65,11 @@
   F<B<A<A<A<dynamic>>>>> target3 = fsource;    //# 03: compile-time error
   F<B<A<A<A<A<dynamic>>>>>> target4 = fsource; //# 04: compile-time error
 
-  F<B<Null>> target5 = fsource;             //# 05: compile-time error
-  F<B<A<Null>>> target6 = fsource;          //# 06: compile-time error
-  F<B<A<A<Null>>>> target7 = fsource;       //# 07: compile-time error
-  F<B<A<A<A<Null>>>>> target8 = fsource;    //# 08: compile-time error
-  F<B<A<A<A<A<Null>>>>>> target9 = fsource; //# 09: compile-time error
+  F<B<Null>> target5 = fsource;                //# 05: compile-time error
+  F<B<A<Null>>> target6 = fsource;             //# 06: compile-time error
+  F<B<A<A<Null>>>> target7 = fsource;          //# 07: compile-time error
+  F<B<A<A<A<Null>>>>> target8 = fsource;       //# 08: compile-time error
+  F<B<A<A<A<A<Null>>>>>> target9 = fsource;    //# 09: compile-time error
 
-  B(); //# 10: compile-time error
+  B();                                         //# 10: compile-time error
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t05.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t05.dart
index a751dfb..adaf29f 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t05.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t05.dart
@@ -42,8 +42,8 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiate-to-bounds works as expected for the
- * class [O<X extends M<O<X>>>].
+ * @description Checks that instantiate-to-bounds works as expected for [class
+ * M<X>; class N<X extends M<N<X>>>; typedef O<X extends M<N<X>>> = M<N<X>>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -52,24 +52,26 @@
 F<X> toF<X>(X x) => null;
 
 class M<X> {}
-typedef O<X extends M<O<X>>> = M<O<X>>;
+class N<X extends M<N<X>>> {}
+
+typedef O<X extends M<N<X>>> = M<N<X>>;
 
 main() {
   O source;
   var fsource = toF(source);
 
-  F<O<M<O<dynamic>>>> target = fsource;
+  F<O<M<N<M<dynamic>>>>> target = fsource;
 
   F<O<dynamic>> target1 = fsource;             //# 01: compile-time error
   F<O<M<dynamic>>> target2 = fsource;          //# 02: compile-time error
-  F<O<M<O<M<dynamic>>>>> target3 = fsource;    //# 03: compile-time error
-  F<O<M<O<M<O<dynamic>>>>>> target4 = fsource; //# 04: compile-time error
+  F<O<M<N<dynamic>>>> target3 = fsource;       //# 03: compile-time error
+  F<O<M<N<M<N<dynamic>>>>>> target4 = fsource; //# 04: compile-time error
 
-  F<O<Null>> target5 = fsource;             //# 05: compile-time error
-  F<O<M<Null>>> target6 = fsource;          //# 06: compile-time error
-  F<O<M<O<Null>>>> target7 = fsource;       //# 07: compile-time error
-  F<O<M<O<M<Null>>>>> target8 = fsource;    //# 08: compile-time error
-  F<O<M<O<M<O<Null>>>>>> target9 = fsource; //# 09: compile-time error
+  F<O<Null>> target5 = fsource;                //# 05: compile-time error
+  F<O<M<Null>>> target6 = fsource;             //# 06: compile-time error
+  F<O<M<N<Null>>>> target7 = fsource;          //# 07: compile-time error
+  F<O<M<N<M<Null>>>>> target8 = fsource;       //# 08: compile-time error
+  F<O<M<N<M<N<Null>>>>>> target9 = fsource;    //# 09: compile-time error
 
-  O(); //# 10: compile-time error
+  O();                                         //# 10: compile-time error
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t06.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t06.dart
index 0c38aec..ebffc16 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t06.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l1_t06.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [typedef
- * O<X extends M<O<M<O<M<O<X>>>>>>>].
+ * O<X extends M<M<M<M<M<M<X>>>>>>> = M<M<X>>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -52,28 +52,28 @@
 F<X> toF<X>(X x) => null;
 
 class M<X> {}
-typedef O<X extends M<O<M<O<M<O<X>>>>>>> = M<O<X>>;
+typedef O<X extends M<M<M<M<M<M<X>>>>>>> = M<M<X>>;
 
 main() {
   O source;
   var fsource = toF(source);
 
-  F<O<M<O<M<O<M<O<dynamic>>>>>>>> target = fsource;
+  F<O<M<M<M<M<M<M<dynamic>>>>>>>> target = fsource;
 
-  F<O<dynamic>> target1 = fsource;                //# 01: compile-time error
-  F<O<M<dynamic>>> target2 = fsource;             //# 02: compile-time error
-  F<O<M<O<M<dynamic>>>>> target3 = fsource;       //# 03: compile-time error
-  F<O<M<O<M<O<dynamic>>>>>> target4 = fsource;    //# 04: compile-time error
-  F<O<M<O<M<O<M<dynamic>>>>>>> target5 = fsource; //# 05: compile-time error
+  F<O<dynamic>> target1 = fsource;                         //# 01: compile-time error
+  F<O<M<dynamic>>> target2 = fsource;                      //# 02: compile-time error
+  F<O<M<M<M<dynamic>>>>> target3 = fsource;                //# 03: compile-time error
+  F<O<M<M<M<M<dynamic>>>>>> target4 = fsource;             //# 04: compile-time error
+  F<O<M<M<M<M<M<dynamic>>>>>>> target5 = fsource;          //# 05: compile-time error
 
-  F<O<M<O<M<O<M<O<M<dynamic>>>>>>>>> target6 = fsource;    //# 06: compile-time error
-  F<O<M<O<M<O<M<O<M<O<dynamic>>>>>>>>>> target7 = fsource; //# 07: compile-time error
+  F<O<M<M<M<M<M<M<M<dynamic>>>>>>>>> target6 = fsource;    //# 06: compile-time error
+  F<O<M<M<M<M<M<M<M<M<dynamic>>>>>>>>>> target7 = fsource; //# 07: compile-time error
 
-  F<O<Null>> target8 = fsource;              //# 08: compile-time error
-  F<O<M<Null>>> target9  = fsource;          //# 09: compile-time error
-  F<O<M<O<Null>>>> target10 = fsource;       //# 10: compile-time error
-  F<O<M<O<M<Null>>>>> target11 = fsource;    //# 11: compile-time error
-  F<O<M<O<M<O<Null>>>>>> target12 = fsource; //# 12: compile-time error
+  F<O<Null>> target8 = fsource;                            //# 08: compile-time error
+  F<O<M<Null>>> target9  = fsource;                        //# 09: compile-time error
+  F<O<M<M<Null>>>> target10 = fsource;                     //# 10: compile-time error
+  F<O<M<M<M<Null>>>>> target11 = fsource;                  //# 11: compile-time error
+  F<O<M<M<M<M<Null>>>>>> target12 = fsource;               //# 12: compile-time error
 
-  O(); //# 13: compile-time error
+  O();                                                     //# 13: compile-time error
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t01.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t01.dart
index 463b8b8..64614bf 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t01.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [typedef
- * A<X1 extends X2, X2 extends A<X1, X2>>]
+ * A<X1 extends X2, X2 extends C<X1, X2>>]
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -52,16 +52,16 @@
 F<X> toF<X>(X x) => null;
 
 class C<X1, X2> {}
-typedef A<X1 extends X2, X2 extends A<X1, X2>> = C<X1, X2>;
+typedef A<X1 extends X2, X2 extends C<X1, X2>> = C<X1, X2>;
 
 main() {
   A source;
   var fsource = toF(source);
 
-  F<A<dynamic, A<dynamic, dynamic>>> target = fsource;
+  F<A<dynamic, C<dynamic, dynamic>>> target = fsource;
 
   F<A<dynamic, dynamic>> target1 = fsource;                         //# 01: compile-time error
-  F<A<A<dynamic, dynamic>, A<dynamic, dynamic>>> target2 = fsource; //# 02: compile-time error
+  F<A<C<dynamic, dynamic>, C<dynamic, dynamic>>> target2 = fsource; //# 02: compile-time error
 
   A(); //# 03: compile-time error
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t02.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t02.dart
index 324fe2e..03235f1 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t02.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t02.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [typedef
- * [A<X1 extends A<X1, X2>, X2 extends X1>]
+ * [A<X1 extends C<X1, X2>, X2 extends X1>]
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -52,16 +52,16 @@
 F<X> toF<X>(X x) => null;
 
 class C<X1, X2> {}
-typedef A<X1 extends A<X1, X2>, X2 extends X1> = C<X1, X2>;
+typedef A<X1 extends C<X1, X2>, X2 extends X1> = C<X1, X2>;
 
 main() {
   A source;
   var fsource = toF(source);
 
-  F<A<A<dynamic, dynamic>, dynamic>> target = fsource;
+  F<A<C<dynamic, dynamic>, dynamic>> target = fsource;
 
   F<A<dynamic, dynamic>> target1 = fsource;             //# 01: compile-time error
-  F<A<dynamic, A<dynamic, dynamic>>> target2 = fsource; //# 02: compile-time error
+  F<A<dynamic, C<dynamic, dynamic>>> target2 = fsource; //# 02: compile-time error
 
   A(); //# 03: compile-time error
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t03.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t03.dart
index b8ba61e..56e6197 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t03.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t03.dart
@@ -42,8 +42,10 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiate-to-bounds works as expected for [typedef
- * A<String, X extends A<Null, A<String,X>>>]
+ * @description Checks that instantiate-to-bounds works as expected for [class
+ * C<X1, X2>; typedef A<Y extends String, X extends C<Null, C<String, X>>> =
+ * C<Y, X>].
+ * @Issue 34727, 34948
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -52,16 +54,16 @@
 F<X> toF<X>(X x) => null;
 
 class C<X1, X2> {}
-typedef A<Y extends String, X extends A<Null, A<String, X>>> = C<Y, X>;
+typedef A<Y extends String, X extends C<Null, C<String, X>>> = C<Y, X>;
 
 main() {
   A source;
   var fsource = toF(source);
 
-  F<A<String, A<Null, A<String, dynamic>>>> target = fsource;
+  F<A<String, A<Null, C<String, dynamic>>>> target = fsource;
 
   F<A<dynamic, dynamic>> target1 = fsource;                         //# 01: compile-time error
-  F<A<dynamic, A<dynamic, A<dynamic, dynamic>>>> target2 = fsource; //# 02: compile-time error
+  F<A<dynamic, C<dynamic, C<dynamic, dynamic>>>> target2 = fsource; //# 02: compile-time error
 
-  A(); //# 03: compile-time error
+  A();                                                              //# 03: compile-time error
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t04.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t04.dart
index 382d8b9..2c39ca6 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t04.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t04.dart
@@ -42,8 +42,9 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiate-to-bounds works as expected for [typedef
- * A<String, X extends A<void, A<String,X>>>]
+ * @description Checks that instantiate-to-bounds works as expected for [class
+ * C<X, Y>; typedef A<Y extends String, X extends C<void, C<String, X>>> = C<Y,
+ * X>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -52,16 +53,16 @@
 F<X> toF<X>(X x) => null;
 
 class C<X, Y> {}
-typedef A<Y extends String, X extends A<void, A<String, X>>> = C<Y, X>;
+typedef A<Y extends String, X extends C<void, C<String, X>>> = C<Y, X>;
 
 main() {
   A source;
   var fsource = toF(source);
 
-  F<A<String, A<void, A<String, dynamic>>>> target = fsource;
+  F<A<String, C<void, C<String, dynamic>>>> target = fsource;
 
   F<A<dynamic, dynamic>> target1 = fsource;                         //# 01: compile-time error
-  F<A<dynamic, A<dynamic, A<dynamic, dynamic>>>> target2 = fsource; //# 02: compile-time error
+  F<A<dynamic, C<dynamic, C<dynamic, dynamic>>>> target2 = fsource; //# 02: compile-time error
 
-  A(); //# 03: compile-time error
+  A();                                                              //# 03: compile-time error
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t05.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t05.dart
index 6ceaf4c..1ed4959 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t05.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t05.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [typedef
- * A<X1 extends X2, X2 extends A<X1, X2>>]
+ * A<X1 extends X2, X2 extends B<X1, X2>>]
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t06.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t06.dart
index 7a206e8..dcf167c 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t06.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t06.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [class
- * B<X extends B<X>>], [class A<X1 extends B<X1>, X2>]
+ * B<X extends B<X>>; class A<X1 extends B<X1>, X2>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t07.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t07.dart
index d57ba36..a4a6074 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t07.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t07.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [class
- * B<X extends B<X, Y>, Y>], [typedef A<X1, X2 extends B<X2, X1>>]
+ * B<X extends B<X, Y>, Y>; typedef A<X1, X2 extends B<X2, X1>>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t09.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t09.dart
index d79207d..e82e3f8 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t09.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t09.dart
@@ -43,8 +43,8 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [class
- * B<X extends B<X>>], [class C<X, Y>], [typedef A<X1 extends B<X2>, X2 extends
- * B<X2>>]
+ * B<X extends B<X>>; class C<X, Y>; typedef A<X1 extends B<X2>, X2 extends
+ * B<X2>> = C<X1, X2>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t10.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t10.dart
index f0b600b..9a36020 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t10.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l2_t10.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [typedef
- * A<X1 extends A<X1, X2>, X2 extends A<X1, X2>>]
+ * A<X1 extends B<X1, X2>, X2 extends B<X1, X2>>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -52,13 +52,13 @@
 F<X> toF<X>(X x) => null;
 
 class B<X, Y> {}
-typedef A<X1 extends A<X1, X2>, X2 extends A<X1, X2>> = B<X1, X2>;
+typedef A<X1 extends B<X1, X2>, X2 extends B<X1, X2>> = B<X1, X2>;
 
 main() {
   A source;
   var fsource = toF(source);
 
-  F<A<A<dynamic, dynamic>, A<dynamic, dynamic>>> target = fsource;
+  F<A<B<dynamic, dynamic>, B<dynamic, dynamic>>> target = fsource;
 
   F<A<dynamic, dynamic>> target1 = fsource; //# 01: compile-time error
   A();                                      //# 02: compile-time error
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l3_t01.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l3_t01.dart
index dd214c2..e97be16 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l3_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l3_t01.dart
@@ -43,8 +43,8 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiate-to-bounds works as expected for [typedef
- * G<X1 extends X2, X2 extends X3, X3 extends G<X1, X2, X3>>]
- *  extends X2, X2 extends A<X1, X2>>]
+ * G<X1 extends X2, X2 extends X3, X3 extends A<X1, X2, X3>>].
+ *  extends X2, X2 extends A<X1, X2>>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -53,15 +53,14 @@
 F<X> toF<X>(X x) => null;
 
 class A<X, Y, Z> {}
-typedef G<X1 extends X2, X2 extends X3, X3 extends G<X1, X2, X3>> = A<X1, X2, X3>;
+typedef G<X1 extends X2, X2 extends X3, X3 extends A<X1, X2, X3>> = A<X1, X2, X3>;
 
 main() {
-  A source;
+  G source;
   var fsource = toF(source);
 
-  F<A<dynamic, dynamic, A<dynamic, dynamic, dynamic>>> target = fsource;
+  F<G<dynamic, dynamic, A<dynamic, dynamic, dynamic>>> target = fsource;
+  F<G<dynamic, dynamic, dynamic>> target1 = fsource; //# 01: compile-time error
 
-  F<A<dynamic, dynamic, dynamic>> target1 = fsource;  //# 01: compile-time error
-
-  A();                                                //# 02: compile-time error
+  A();                                               //# 02: compile-time error
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l4_t01.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l4_t01.dart
index 8798e602..a55bd17 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l4_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_l4_t01.dart
@@ -42,8 +42,9 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiate-to-bounds works as expected for [typedef
- * G<X1 extends A<X1>, X2 extends A<X1>, X3 extends B, X4 extends X2>]
+ * @description Checks that instantiate-to-bounds works as expected for [class
+ * A<X>; class B<X> extends A<X>; class C<X1, X2, X3, X4>; typedef G<X1 extends
+ * A<X1>, X2 extends A<X1>, X3 extends B, X4 extends X2> = C<X1, X2, X3, X4>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l1_t01.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l1_t01.dart
index 854e307..a99f544 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l1_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l1_t01.dart
@@ -42,8 +42,9 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiation to bounds works OK for the class with
- * [typedef G<X> = X Function()] parameter (covariant)
+ * @description Checks that instantiation to bounds works OK for non-function
+ * typedef with [X Function()] type parameter: [typedef G<X> = X Function();
+ * class C<X>; typedef A<X extends G<С<X>>> = C<X>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -54,24 +55,24 @@
 typedef G<X> = X Function();
 class C<X> {}
 
-typedef A<X extends G<A<X>>> = C<X>;
+typedef A<X extends G<C<X>>> = C<X>;
 
 main() {
   A source;
   var fsource = toF(source);
-  F<A<G<A<dynamic>>>> target = fsource;
+  F<A<G<C<dynamic>>>> target = fsource;
 
-  F<A<G<A<Null>>>> target0 = fsource;          //# 01: compile-time error
+  F<A<G<C<Null>>>> target0 = fsource;          //# 01: compile-time error
 
   F<A<dynamic>> target1 = fsource;             //# 02: compile-time error
   F<A<G<dynamic>>> target2 = fsource;          //# 03: compile-time error
-  F<A<G<A<G<dynamic>>>>> target3 = fsource;    //# 04: compile-time error
-  F<A<G<A<G<A<dynamic>>>>>> target4 = fsource; //# 05: compile-time error
+  F<A<G<C<G<dynamic>>>>> target3 = fsource;    //# 04: compile-time error
+  F<A<G<C<G<C<dynamic>>>>>> target4 = fsource; //# 05: compile-time error
 
   F<A<Null>> target5 = fsource;                //# 06: compile-time error
   F<A<G<Null>>> target6 = fsource;             //# 07: compile-time error
-  F<A<G<A<G<Null>>>>> target7 = fsource;       //# 08: compile-time error
-  F<A<G<A<G<A<Null>>>>>> target8 = fsource;    //# 09: compile-time error
+  F<A<G<C<G<Null>>>>> target7 = fsource;       //# 08: compile-time error
+  F<A<G<C<G<C<Null>>>>>> target8 = fsource;    //# 09: compile-time error
 
   A();                                         //# 10: compile-time error
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l1_t02.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l1_t02.dart
index 3d87c2e..207bbc1 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l1_t02.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l1_t02.dart
@@ -42,8 +42,9 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiation to bounds works OK for the class with
- * [typedef G<X> = Function(X)] parameter (contravariant)
+ * @description Checks that instantiation to bounds works OK for non-function
+ * typedef with [typedef G<X> = Function(X)] type parameter: [typedef G<X> =
+ * void Function(X); class C<X>; typedef A<X extends G<C<X>>> = C<X>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -54,7 +55,7 @@
 typedef G<X> = void Function(X);
 class C<X> {}
 
-typedef A<X extends G<A<X>>> = C<X>;
+typedef A<X extends G<C<X>>> = C<X>;
 
 main() {
   A source;
@@ -64,12 +65,12 @@
   F<A<dynamic>> target1 = fsource;             //# 01: compile-time error
   F<A<G<dynamic>>> target2 = fsource;          //# 02: compile-time error
   F<A<G<C<G<dynamic>>>>> target3 = fsource;    //# 03: compile-time error
-  F<A<G<C<G<A<dynamic>>>>>> target4 = fsource; //# 04: compile-time error
+  F<A<G<C<G<C<dynamic>>>>>> target4 = fsource; //# 04: compile-time error
 
   F<A<Null>> target5 = fsource;                //# 05: compile-time error
   F<A<G<Null>>> target6 = fsource;             //# 06: compile-time error
-  F<A<G<A<G<Null>>>>> target7 = fsource;       //# 07: compile-time error
-  F<A<G<A<G<A<Null>>>>>> target8 = fsource;    //# 08: compile-time error
+  F<A<G<C<G<Null>>>>> target7 = fsource;       //# 07: compile-time error
+  F<A<G<C<G<C<Null>>>>>> target8 = fsource;    //# 08: compile-time error
 
   A();                                         //# 09: compile-time error
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l1_t03.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l1_t03.dart
index 1be837d..9869c1b 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l1_t03.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l1_t03.dart
@@ -43,14 +43,14 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiation to bounds works OK for [typedef G<X> =
- * X Function(X)], [class C<X>], [typedef A<X extends G<A<X>>>]
+ * X Function(X); class C<X>; typedef A<X extends G<C<X>>>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
 
 typedef G<X> = X Function(X);
 class C<X> {}
-typedef A<X extends G<A<X>>> = C<X>;
+typedef A<X extends G<C<X>>> = C<X>;
 
 main() {
   A source; //# 01: compile-time error
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l1_t04.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l1_t04.dart
index 4de478e..4f64999 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l1_t04.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l1_t04.dart
@@ -42,8 +42,9 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiation to bounds works OK for the class with
- * [typedef G<X> = X Function()] parameter (contravariant)
+ * @description Checks that instantiation to bounds works OK for non-function
+ * typedef with [typedef G<X> = void Function()] type parameter: [typedef G<X> =
+ * void Function(); class C<X>; typedef A<X extends G<C<X>>> = C<X>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -59,19 +60,19 @@
 main() {
   A source;
   var fsource = toF(source);
-  F<A<G<A<dynamic>>>> target = fsource;
+  F<A<G<C<dynamic>>>> target = fsource;
 
-  F<A<G<A<Null>>>> target0 = fsource;
+  F<A<G<C<Null>>>> target0 = fsource;
 
   F<A<dynamic>> target1 = fsource;          //# 01: compile-time error
   F<A<G<dynamic>>> target2 = fsource;
-  F<A<G<A<G<dynamic>>>>> target3 = fsource;
-  F<A<G<A<G<A<dynamic>>>>>> target4 = fsource;
+  F<A<G<C<G<dynamic>>>>> target3 = fsource;
+  F<A<G<C<G<C<dynamic>>>>>> target4 = fsource;
 
   F<A<Null>> target5 = fsource;             //# 02: compile-time error
   F<A<G<Null>>> target6 = fsource;
-  F<A<G<A<G<Null>>>>> target7 = fsource;
-  F<A<G<A<G<A<Null>>>>>> target8 = fsource;
+  F<A<G<C<G<Null>>>>> target7 = fsource;
+  F<A<G<C<G<C<Null>>>>>> target8 = fsource;
 
   A();
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t01.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t01.dart
index 3cea9ee..e80cd08 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t01.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t01.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiation to bounds works OK for [typedef G<X> =
- * X Function()], [typedef A<X extends G<A<X, Y>>, Y extends X>]
+ * X Function(); class C<X, Y>; typedef A<X extends G<C<X, Y>>, Y extends X>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -58,11 +58,11 @@
 main() {
   A source;
   var fsource = toF(source);
-  F<A<G<A<dynamic, dynamic>>, dynamic>> target = fsource;
+  F<A<G<C<dynamic, dynamic>>, dynamic>> target = fsource;
 
   F<A<dynamic, dynamic>> target1 = fsource;                   //# 01: compile-time error
   F<A<G<dynamic>, dynamic>> target2 = fsource;                //# 02: compile-time error
-  F<A<G<A<G<dynamic>, dynamic>>, dynamic>> target3 = fsource; //# 03: compile-time error
+  F<A<G<C<G<dynamic>, dynamic>>, dynamic>> target3 = fsource; //# 03: compile-time error
 
   A();                                                        //# 04: compile-time error
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t02.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t02.dart
index 4b423cc..f9689ef 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t02.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t02.dart
@@ -43,24 +43,8 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiation to bounds works OK for [typedef G<X> =
- * Function(X)], [class A<X extends G<A<X, Y>>, Y extends X>]
- *
- * In the test we have [G] with one type argument which is contravariant, so the
- * meaning of the raw [A] is [A<G<A<Null, Null>>, dynamic>], obtained as
- * follows:
- *
- * X                  Y
- * ----------------------------------
- * G<A<X, Y>>         X             // Initial values.
- * G<A<Null, Null>>   dynamic       // Break SCC {X, Y}.
- *
- * The resulting type is well-bounded, because it is super-bounded, because
- * [dynamic <: G<...>] fails, but [A<G<A<Object, Object>>, Null>] is
- * regular-bounded, because [Null <: ...` and `G<A<Object, Object>> <:
- * G<A<..., ...>>].
- * This also shows that the instance creation at the end is a compile-time
- * error.
- *
+ * Function(X); class C<X, Y>; typedef A<X extends G<C<X,Y>>, Y extends X> =
+ * C<X, Y>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -75,11 +59,11 @@
 main() {
   A source;
   var fsource = toF(source);
-  F<A<G<A<Null, Null>>, dynamic>> target = fsource;
+  F<A<G<C<Null, Null>>, dynamic>> target = fsource;
 
   F<A<dynamic, dynamic>> target1 = fsource;                   //# 01: compile-time error
   F<A<G<dynamic>, dynamic>> target2 = fsource;                //# 02: compile-time error
-  F<A<G<A<G<dynamic>, dynamic>>, dynamic>> target3 = fsource; //# 03: compile-time error
+  F<A<G<C<G<dynamic>, dynamic>>, dynamic>> target3 = fsource; //# 03: compile-time error
 
   A();                                                        //# 04: compile-time error
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t03.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t03.dart
index 4d15484..3133557 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t03.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t03.dart
@@ -42,8 +42,9 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiation to bounds works OK for [typedef G<X> =
- * X Function(X)], [typedef A<X extends G<A<X, Y>>, Y extends X>]
+ * @description Checks that instantiation to bounds works OK for [class C<X, Y>;
+ * typedef G<X> = X Function(X); typedef A<X extends G<A<X, Y>>, Y extends X> =
+ * C<X, Y>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -53,7 +54,7 @@
 
 class C<X, Y> {}
 typedef G<X> = X Function(X);
-typedef A<X extends G<A<X, Y>>, Y extends X> = C<X, Y>;
+typedef A<X extends G<C<X, Y>>, Y extends X> = C<X, Y>;
 
 main() {
   A source;  //# 01: compile-time error
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t04.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t04.dart
index 816267c..e337a9d 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t04.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t04.dart
@@ -43,7 +43,7 @@
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
  * @description Checks that instantiation to bounds works OK for [typedef G<X> =
- * void Function()], [typedef A<X extends G<C<X,Y>>, Y extends X>]
+ * void Function(); typedef A<X extends G<C<X,Y>>, Y extends X>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -58,11 +58,11 @@
 main() {
   A source;
   var fsource = toF(source);
-  F<A<G<A<dynamic, dynamic>>, dynamic>> target = fsource;
+  F<A<G<C<dynamic, dynamic>>, dynamic>> target = fsource;
 
   F<A<dynamic, dynamic>> target1 = fsource;           //# 01: compile-time error
   F<A<G<dynamic>, dynamic>> target2 = fsource;
-  F<A<G<A<G<dynamic>, dynamic>>, dynamic>> target3 = fsource;
+  F<A<G<C<G<dynamic>, dynamic>>, dynamic>> target3 = fsource;
 
   A();
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t05.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t05.dart
index 63a4d25..bb33ef8 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t05.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t05.dart
@@ -42,8 +42,9 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiation to bounds works OK for [typedef G<X> =
- * X Function()], [typedef A<X extends G<A<Y, X>>, Y extends G<A<X, Y>>>]
+ * @description Checks that instantiation to bounds works OK for [class C<X,Y>;
+ * typedef G<X> = X Function(); typedef A<X extends G<A<Y, X>>, Y extends G<A<X,
+ * Y>>> = C<X, Y>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -58,13 +59,13 @@
 main() {
   A source;
   var fsource = toF(source);
-  F<A<G<A<dynamic, dynamic>>, G<A<dynamic, dynamic>>>> target = fsource;
+  F<A<G<C<dynamic, dynamic>>, G<C<dynamic, dynamic>>>> target = fsource;
 
-  F<A<dynamic, G<A<dynamic, dynamic>>>> target1 = fsource;                   //# 01: compile-time error
-  F<A<G<dynamic>, G<A<dynamic, dynamic>>>> target2 = fsource;                //# 02: compile-time error
-  F<A<G<A<G<dynamic>, dynamic>>, G<A<dynamic, dynamic>>>> target3 = fsource; //# 03: compile-time error
-  F<A<G<A<dynamic, dynamic>>, dynamic>> target4 = fsource;                   //# 04: compile-time error
-  F<A<G<A<dynamic, dynamic>>, G<dynamic>>> target5 = fsource;                //# 05: compile-time error
+  F<A<dynamic, G<C<dynamic, dynamic>>>> target1 = fsource;                   //# 01: compile-time error
+  F<A<G<dynamic>, G<C<dynamic, dynamic>>>> target2 = fsource;                //# 02: compile-time error
+  F<A<G<C<G<dynamic>, dynamic>>, G<C<dynamic, dynamic>>>> target3 = fsource; //# 03: compile-time error
+  F<A<G<C<dynamic, dynamic>>, dynamic>> target4 = fsource;                   //# 04: compile-time error
+  F<A<G<C<dynamic, dynamic>>, G<dynamic>>> target5 = fsource;                //# 05: compile-time error
 
   A();  //# 06: compile-time error
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t06.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t06.dart
index 4b8400c..d3bcdfa 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t06.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t06.dart
@@ -42,8 +42,9 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiation to bounds works OK for [typedef G<X> =
- * Function(X)], [class A<X extends G<A<Y, X>>, Y extends G<A<X, Y>>>]
+ * @description Checks that instantiation to bounds works OK for [class C<X, Y>;
+ * typedef G<X> = Function(X); typedef A<X extends G<C<Y, X>>, Y extends G<C<X,
+ * Y>>> = C<X, Y>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -58,15 +59,15 @@
 main() {
   A source;
   var fsource = toF(source);
-  F<A<G<A<Null, Null>>, G<A<Null, Null>>>> target = fsource;
+  F<A<G<C<Null, Null>>, G<C<Null, Null>>>> target = fsource;
 
 
-  F<A<G<A<dynamic, dynamic>>, G<A<dynamic, dynamic>>>> target1 = fsource;    //# 01: compile-time error
-  F<A<dynamic, G<A<dynamic, dynamic>>>> target2 = fsource;                   //# 02: compile-time error
-  F<A<G<dynamic>, G<A<dynamic, dynamic>>>> target3 = fsource;                //# 03: compile-time error
-  F<A<G<A<G<dynamic>, dynamic>>, G<A<dynamic, dynamic>>>> target4 = fsource; //# 04: compile-time error
-  F<A<G<A<dynamic, dynamic>>, dynamic>> target5 = fsource;                   //# 05: compile-time error
-  F<A<G<A<dynamic, dynamic>>, G<dynamic>>> target6 = fsource;                //# 06: compile-time error
+  F<A<G<C<dynamic, dynamic>>, G<C<dynamic, dynamic>>>> target1 = fsource;    //# 01: compile-time error
+  F<A<dynamic, G<C<dynamic, dynamic>>>> target2 = fsource;                   //# 02: compile-time error
+  F<A<G<dynamic>, G<C<dynamic, dynamic>>>> target3 = fsource;                //# 03: compile-time error
+  F<A<G<C<G<dynamic>, dynamic>>, G<C<dynamic, dynamic>>>> target4 = fsource; //# 04: compile-time error
+  F<A<G<C<dynamic, dynamic>>, dynamic>> target5 = fsource;                   //# 05: compile-time error
+  F<A<G<C<dynamic, dynamic>>, G<dynamic>>> target6 = fsource;                //# 06: compile-time error
 
   A();                                                                       //# 07: compile-time error
 }
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t07.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t07.dart
index e8d1bfa..ff8215f 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t07.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t07.dart
@@ -42,8 +42,9 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiation to bounds works OK for [typedef G<X> =
- * X Function()], [class A<X extends G<A<Y, X>>, Y extends G<A<X, Y>>>]
+ * @description Checks that instantiation to bounds works OK for [class C<X, Y>;
+ * typedef G<X> = X Function(X); typedef A<X extends G<C<Y, X>>, Y extends
+ * G<C<X, Y>>> = C<X, Y>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -53,7 +54,7 @@
 
 class C<X, Y> {}
 typedef G<X> = X Function(X);
-typedef A<X extends G<A<Y, X>>, Y extends G<A<X, Y>>> = C<X, Y>;
+typedef A<X extends G<C<Y, X>>, Y extends G<C<X, Y>>> = C<X, Y>;
 
 main() {
   A source; //# 01: compile-time error
diff --git a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t08.dart b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t08.dart
index a2824c0..792f7ce 100644
--- a/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t08.dart
+++ b/LanguageFeatures/Instantiate-to-bound/nonfunction_typedef/static/nonfunction_typedef_l2_t08.dart
@@ -42,8 +42,9 @@
  *
  *   3. Otherwise, (when no dependencies exist) terminate with the result
  *   [<U1,m ..., Uk,m>].
- * @description Checks that instantiation to bounds works OK for [typedef G<X> =
- * void Function()], [typedef A<X extends G<A<Y, X>>, Y extends G<A<X, Y>>>]
+ * @description Checks that instantiation to bounds works OK for [class C<X, Y>;
+    typedef G<X> = void Function(); typedef A<X extends G<C<Y, X>>, Y extends
+    G<C<X, Y>>> = C<X, Y>].
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
@@ -58,13 +59,13 @@
 main() {
   A source;
   var fsource = toF(source);
-  F<A<G<A<dynamic, dynamic>>, G<A<dynamic, dynamic>>>> target = fsource;
+  F<A<G<C<dynamic, dynamic>>, G<C<dynamic, dynamic>>>> target = fsource;
 
-  F<A<dynamic, G<A<dynamic, dynamic>>>> target1 = fsource;                   //# 01: compile-time error
-  F<A<G<dynamic>, G<A<dynamic, dynamic>>>> target2 = fsource;
-  F<A<G<A<G<dynamic>, dynamic>>, G<A<dynamic, dynamic>>>> target3 = fsource;
-  F<A<G<A<dynamic, dynamic>>, dynamic>> target4 = fsource;                   //# 02: compile-time error
-  F<A<G<A<dynamic, dynamic>>, G<dynamic>>> target5 = fsource;
+  F<A<dynamic, G<C<dynamic, dynamic>>>> target1 = fsource;                   //# 01: compile-time error
+  F<A<G<dynamic>, G<C<dynamic, dynamic>>>> target2 = fsource;
+  F<A<G<C<G<dynamic>, dynamic>>, G<C<dynamic, dynamic>>>> target3 = fsource;
+  F<A<G<C<dynamic, dynamic>>, dynamic>> target4 = fsource;                   //# 02: compile-time error
+  F<A<G<C<dynamic, dynamic>>, G<dynamic>>> target5 = fsource;
 
   A();
 }