[cfe] Make TypeBuilder sealed
This changes the TypeBuilder to be a sealed class and changes
implementation to use exhaustive switch, including fixes for all
missing cases found.
Change-Id: I24436801c93ee43858d35ed6b396489fd13125be
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/322960
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
diff --git a/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart
index 196e647..a171a3d 100644
--- a/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart
@@ -8,18 +8,17 @@
import '../problems.dart';
import '../source/source_library_builder.dart';
import 'library_builder.dart';
-import 'named_type_builder.dart';
import 'nullability_builder.dart';
import 'type_builder.dart';
-class FixedTypeBuilder extends TypeBuilder {
+class FixedTypeBuilderImpl extends FixedTypeBuilder {
final DartType type;
@override
final Uri? fileUri;
@override
final int? charOffset;
- const FixedTypeBuilder(this.type, this.fileUri, this.charOffset);
+ const FixedTypeBuilderImpl(this.type, this.fileUri, this.charOffset);
@override
TypeBuilder clone(
diff --git a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
index accc9f0..fc086a3 100644
--- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
@@ -28,7 +28,6 @@
import 'library_builder.dart';
import 'metadata_builder.dart';
import 'modifier_builder.dart';
-import 'named_type_builder.dart';
import 'omitted_type_builder.dart';
import 'type_builder.dart';
import 'variable_builder.dart';
diff --git a/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
index 584691b..58808e1 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
@@ -13,15 +13,18 @@
import '../kernel/implicit_field_type.dart';
import '../source/source_library_builder.dart';
import 'formal_parameter_builder.dart';
+import 'inferable_type_builder.dart';
import 'library_builder.dart';
-import 'named_type_builder.dart';
import 'nullability_builder.dart';
import 'type_builder.dart';
import 'type_variable_builder.dart';
-abstract class FunctionTypeBuilder extends TypeBuilder {
+abstract class FunctionTypeBuilderImpl extends FunctionTypeBuilder {
+ @override
final TypeBuilder returnType;
+ @override
final List<TypeVariableBuilder>? typeVariables;
+ @override
final List<ParameterBuilder>? formals;
@override
final NullabilityBuilder nullabilityBuilder;
@@ -30,7 +33,7 @@
@override
final int charOffset;
- factory FunctionTypeBuilder(
+ factory FunctionTypeBuilderImpl(
TypeBuilder returnType,
List<TypeVariableBuilder>? typeVariables,
List<ParameterBuilder>? formals,
@@ -64,7 +67,7 @@
nullabilityBuilder, fileUri, charOffset);
}
- FunctionTypeBuilder._(this.returnType, this.typeVariables, this.formals,
+ FunctionTypeBuilderImpl._(this.returnType, this.typeVariables, this.formals,
this.nullabilityBuilder, this.fileUri, this.charOffset);
@override
@@ -190,7 +193,7 @@
return formal.clone(newTypes, contextLibrary, contextDeclaration);
}, growable: false);
}
- return new FunctionTypeBuilder(
+ return new FunctionTypeBuilderImpl(
returnType.clone(newTypes, contextLibrary, contextDeclaration),
clonedTypeVariables,
clonedFormals,
@@ -202,7 +205,7 @@
@override
FunctionTypeBuilder withNullabilityBuilder(
NullabilityBuilder nullabilityBuilder) {
- return new FunctionTypeBuilder(returnType, typeVariables, formals,
+ return new FunctionTypeBuilderImpl(returnType, typeVariables, formals,
nullabilityBuilder, fileUri, charOffset);
}
}
@@ -211,7 +214,7 @@
///
/// This is the normal function type whose return type or parameter types are
/// either explicit or omitted.
-class _ExplicitFunctionTypeBuilder extends FunctionTypeBuilder {
+class _ExplicitFunctionTypeBuilder extends FunctionTypeBuilderImpl {
_ExplicitFunctionTypeBuilder(
TypeBuilder returnType,
List<TypeVariableBuilder>? typeVariables,
@@ -239,7 +242,7 @@
/// This occurs through macros where return type or parameter types can be
/// defined in terms of inferred types, making this type indirectly depend
/// on type inference.
-class _InferredFunctionTypeBuilder extends FunctionTypeBuilder
+class _InferredFunctionTypeBuilder extends FunctionTypeBuilderImpl
with InferableTypeBuilderMixin {
_InferredFunctionTypeBuilder(
TypeBuilder returnType,
diff --git a/pkg/front_end/lib/src/fasta/builder/inferable_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/inferable_type_builder.dart
new file mode 100644
index 0000000..48e1dda
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/builder/inferable_type_builder.dart
@@ -0,0 +1,69 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:kernel/ast.dart' show DartType;
+import 'package:kernel/class_hierarchy.dart';
+
+import '../source/source_library_builder.dart';
+import 'omitted_type_builder.dart';
+import 'type_builder.dart';
+
+abstract class InferableType {
+ /// Triggers inference of this type.
+ ///
+ /// If an [Inferable] has been register, this is called to infer the type of
+ /// this builder. Otherwise the type is inferred to be `dynamic`.
+ DartType inferType(ClassHierarchyBase hierarchy);
+}
+
+class InferableTypeUse implements InferableType {
+ final SourceLibraryBuilder sourceLibraryBuilder;
+ final TypeBuilder typeBuilder;
+ final TypeUse typeUse;
+
+ InferableTypeUse(this.sourceLibraryBuilder, this.typeBuilder, this.typeUse);
+
+ @override
+ DartType inferType(ClassHierarchyBase hierarchy) {
+ return typeBuilder.build(sourceLibraryBuilder, typeUse,
+ hierarchy: hierarchy);
+ }
+}
+
+mixin InferableTypeBuilderMixin {
+ bool get hasType => _type != null;
+
+ DartType? _type;
+
+ DartType get type => _type!;
+
+ List<InferredTypeListener>? _listeners;
+
+ bool get isExplicit;
+
+ void registerInferredTypeListener(InferredTypeListener onType) {
+ if (isExplicit) return;
+ if (hasType) {
+ onType.onInferredType(type);
+ } else {
+ (_listeners ??= []).add(onType);
+ }
+ }
+
+ DartType registerType(DartType type) {
+ // TODO(johnniwinther): Avoid multiple registration from enums and
+ // duplicated fields.
+ if (_type == null) {
+ _type = type;
+ List<InferredTypeListener>? listeners = _listeners;
+ if (listeners != null) {
+ _listeners = null;
+ for (InferredTypeListener listener in listeners) {
+ listener.onInferredType(type);
+ }
+ }
+ }
+ return _type!;
+ }
+}
diff --git a/pkg/front_end/lib/src/fasta/builder/invalid_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/invalid_type_builder.dart
index 6b92550..3568f2b 100644
--- a/pkg/front_end/lib/src/fasta/builder/invalid_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/invalid_type_builder.dart
@@ -4,8 +4,6 @@
import 'package:front_end/src/fasta/builder/library_builder.dart';
-import 'package:front_end/src/fasta/builder/named_type_builder.dart';
-
import 'package:front_end/src/fasta/builder/nullability_builder.dart';
import 'package:front_end/src/fasta/source/source_library_builder.dart';
@@ -20,14 +18,14 @@
///
/// This builder results in the creation of an [InvalidType] and can only be
/// used when an error has already been reported.
-class InvalidTypeBuilder extends TypeBuilder {
+class InvalidTypeBuilderImpl extends InvalidTypeBuilder {
@override
final Uri fileUri;
@override
final int charOffset;
- InvalidTypeBuilder(this.fileUri, this.charOffset);
+ InvalidTypeBuilderImpl(this.fileUri, this.charOffset);
@override
DartType build(LibraryBuilder library, TypeUse typeUse,
diff --git a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
index 1c18991..5514c0f 100644
--- a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
@@ -38,6 +38,7 @@
import 'builder.dart';
import 'builtin_type_declaration_builder.dart';
import 'class_builder.dart';
+import 'inferable_type_builder.dart';
import 'invalid_type_declaration_builder.dart';
import 'library_builder.dart';
import 'nullability_builder.dart';
@@ -92,10 +93,11 @@
Unexpected,
}
-abstract class NamedTypeBuilder extends TypeBuilder {
+abstract class NamedTypeBuilderImpl extends NamedTypeBuilder {
@override
final Object name;
+ @override
List<TypeBuilder>? arguments;
@override
@@ -115,7 +117,8 @@
final bool hasExplicitTypeArguments;
- factory NamedTypeBuilder(Object name, NullabilityBuilder nullabilityBuilder,
+ factory NamedTypeBuilderImpl(
+ Object name, NullabilityBuilder nullabilityBuilder,
{List<TypeBuilder>? arguments,
Uri? fileUri,
int? charOffset,
@@ -144,7 +147,7 @@
performTypeCanonicalization: performTypeCanonicalization);
}
- NamedTypeBuilder._(
+ NamedTypeBuilderImpl._(
{required this.name,
required this.nullabilityBuilder,
this.arguments,
@@ -159,13 +162,13 @@
this.hasExplicitTypeArguments = arguments != null,
this._declaration = declaration;
- factory NamedTypeBuilder.forDartType(
+ factory NamedTypeBuilderImpl.forDartType(
DartType type,
TypeDeclarationBuilder _declaration,
NullabilityBuilder nullabilityBuilder,
{List<TypeBuilder>? arguments}) = _ExplicitNamedTypeBuilder.forDartType;
- factory NamedTypeBuilder.fromTypeDeclarationBuilder(
+ factory NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
TypeDeclarationBuilder declaration, NullabilityBuilder nullabilityBuilder,
{List<TypeBuilder>? arguments,
Uri? fileUri,
@@ -173,7 +176,7 @@
required InstanceTypeVariableAccessState instanceTypeVariableAccess,
DartType? type}) = _ExplicitNamedTypeBuilder.fromTypeDeclarationBuilder;
- factory NamedTypeBuilder.forInvalidType(String name,
+ factory NamedTypeBuilderImpl.forInvalidType(String name,
NullabilityBuilder nullabilityBuilder, LocatedMessage message,
{List<LocatedMessage>? context}) =
_ExplicitNamedTypeBuilder.forInvalidType;
@@ -184,6 +187,7 @@
@override
bool get isVoidType => declaration is VoidTypeDeclarationBuilder;
+ @override
void bind(LibraryBuilder libraryBuilder, TypeDeclarationBuilder declaration) {
_declaration = declaration.origin;
_check(libraryBuilder);
@@ -199,6 +203,7 @@
}
}
+ @override
int get nameOffset {
if (name is Identifier) {
Identifier identifier = name as Identifier;
@@ -207,10 +212,12 @@
return charOffset!;
}
+ @override
int get nameLength {
return nameText.length;
}
+ @override
void resolveIn(
Scope scope, int charOffset, Uri fileUri, LibraryBuilder library) {
if (_declaration != null) return;
@@ -348,6 +355,7 @@
return buffer;
}
+ @override
InvalidTypeDeclarationBuilder buildInvalidTypeDeclarationBuilder(
LocatedMessage message,
{List<LocatedMessage>? context}) {
@@ -572,7 +580,8 @@
.clone(newTypes, contextLibrary, contextDeclaration);
}, growable: false);
}
- NamedTypeBuilder newType = new NamedTypeBuilder(name, nullabilityBuilder,
+ NamedTypeBuilderImpl newType = new NamedTypeBuilderImpl(
+ name, nullabilityBuilder,
arguments: clonedArguments,
fileUri: fileUri,
charOffset: charOffset,
@@ -588,7 +597,7 @@
@override
NamedTypeBuilder withNullabilityBuilder(
NullabilityBuilder nullabilityBuilder) {
- return new NamedTypeBuilder.fromTypeDeclarationBuilder(
+ return new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
declaration!, nullabilityBuilder,
arguments: arguments,
fileUri: fileUri,
@@ -598,16 +607,17 @@
/// Returns a copy of this named type using the provided type [arguments]
/// instead of the original type arguments.
+ @override
NamedTypeBuilder withArguments(List<TypeBuilder> arguments) {
if (_declaration != null) {
- return new NamedTypeBuilder.fromTypeDeclarationBuilder(
+ return new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
_declaration!, nullabilityBuilder,
arguments: arguments,
fileUri: fileUri,
charOffset: charOffset,
instanceTypeVariableAccess: _instanceTypeVariableAccess);
} else {
- return new NamedTypeBuilder(name, nullabilityBuilder,
+ return new NamedTypeBuilderImpl(name, nullabilityBuilder,
arguments: arguments,
fileUri: fileUri,
charOffset: charOffset,
@@ -620,7 +630,7 @@
///
/// This is the normal function type whose type arguments are either explicit or
/// omitted.
-class _ExplicitNamedTypeBuilder extends NamedTypeBuilder {
+class _ExplicitNamedTypeBuilder extends NamedTypeBuilderImpl {
DartType? _type;
_ExplicitNamedTypeBuilder(Object name, NullabilityBuilder nullabilityBuilder,
@@ -700,7 +710,7 @@
///
/// This occurs through macros where type arguments can be defined in terms of
/// inferred types, making this type indirectly depend on type inference.
-class _InferredNamedTypeBuilder extends NamedTypeBuilder
+class _InferredNamedTypeBuilder extends NamedTypeBuilderImpl
with InferableTypeBuilderMixin {
_InferredNamedTypeBuilder(Object name, NullabilityBuilder nullabilityBuilder,
{List<TypeBuilder>? arguments,
diff --git a/pkg/front_end/lib/src/fasta/builder/omitted_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/omitted_type_builder.dart
index 3a0a7d0..f0b6638 100644
--- a/pkg/front_end/lib/src/fasta/builder/omitted_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/omitted_type_builder.dart
@@ -7,14 +7,14 @@
import '../kernel/implicit_field_type.dart';
import '../source/source_library_builder.dart';
+import 'inferable_type_builder.dart';
import 'library_builder.dart';
-import 'named_type_builder.dart';
import 'nullability_builder.dart';
import 'type_builder.dart';
import 'type_declaration_builder.dart';
-abstract class OmittedTypeBuilder extends TypeBuilder {
- const OmittedTypeBuilder();
+abstract class OmittedTypeBuilderImpl extends OmittedTypeBuilder {
+ const OmittedTypeBuilderImpl();
@override
Supertype? buildMixedInType(LibraryBuilder library) {
@@ -55,8 +55,10 @@
return this;
}
+ @override
bool get hasType;
+ @override
DartType get type;
}
@@ -67,7 +69,7 @@
/// field types and initializing formal types, use [InferableTypeBuilder]
/// instead. This should be created through
/// [SourceLibraryBuilder.addInferableType] to ensure the type is inferred.
-class ImplicitTypeBuilder extends OmittedTypeBuilder {
+class ImplicitTypeBuilder extends OmittedTypeBuilderImpl {
const ImplicitTypeBuilder();
@override
@@ -102,7 +104,7 @@
///
/// [InferableTypeBuilder] should be created through
/// [SourceLibraryBuilder.addInferableType] to ensure the type is inferred.
-class InferableTypeBuilder extends OmittedTypeBuilder
+class InferableTypeBuilder extends OmittedTypeBuilderImpl
with InferableTypeBuilderMixin
implements InferableType {
@override
@@ -184,7 +186,7 @@
///
/// This is used in macro generated code to create type annotations from
/// inferred types in the original code.
-class DependentTypeBuilder extends OmittedTypeBuilder
+class DependentTypeBuilder extends OmittedTypeBuilderImpl
with InferableTypeBuilderMixin
implements InferredTypeListener {
final OmittedTypeBuilder typeBuilder;
diff --git a/pkg/front_end/lib/src/fasta/builder/record_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/record_type_builder.dart
index 10d7d4c..3179835 100644
--- a/pkg/front_end/lib/src/fasta/builder/record_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/record_type_builder.dart
@@ -19,14 +19,16 @@
import '../kernel/implicit_field_type.dart';
import '../source/source_library_builder.dart';
import '../util/helpers.dart';
+import 'inferable_type_builder.dart';
import 'library_builder.dart';
import 'metadata_builder.dart';
-import 'named_type_builder.dart';
import 'nullability_builder.dart';
import 'type_builder.dart';
-abstract class RecordTypeBuilder extends TypeBuilder {
+abstract class RecordTypeBuilderImpl extends RecordTypeBuilder {
+ @override
final List<RecordTypeFieldBuilder>? positionalFields;
+ @override
final List<RecordTypeFieldBuilder>? namedFields;
@override
final NullabilityBuilder nullabilityBuilder;
@@ -35,7 +37,7 @@
@override
final int charOffset;
- factory RecordTypeBuilder(
+ factory RecordTypeBuilderImpl(
List<RecordTypeFieldBuilder>? positional,
List<RecordTypeFieldBuilder>? named,
NullabilityBuilder nullabilityBuilder,
@@ -65,7 +67,7 @@
positional, named, nullabilityBuilder, fileUri, charOffset);
}
- RecordTypeBuilder._(this.positionalFields, this.namedFields,
+ RecordTypeBuilderImpl._(this.positionalFields, this.namedFields,
this.nullabilityBuilder, this.fileUri, this.charOffset);
@override
@@ -292,14 +294,14 @@
return entry.clone(newTypes, contextLibrary, contextDeclaration);
}, growable: false);
}
- return new RecordTypeBuilder(
+ return new RecordTypeBuilderImpl(
clonedPositional, clonedNamed, nullabilityBuilder, fileUri, charOffset);
}
@override
RecordTypeBuilder withNullabilityBuilder(
NullabilityBuilder nullabilityBuilder) {
- return new RecordTypeBuilder(
+ return new RecordTypeBuilderImpl(
positionalFields, namedFields, nullabilityBuilder, fileUri, charOffset);
}
}
@@ -308,7 +310,7 @@
///
/// This is the normal record type whose field types are either explicit or
/// omitted.
-class _ExplicitRecordTypeBuilder extends RecordTypeBuilder {
+class _ExplicitRecordTypeBuilder extends RecordTypeBuilderImpl {
_ExplicitRecordTypeBuilder(
List<RecordTypeFieldBuilder>? positionalFields,
List<RecordTypeFieldBuilder>? namedFields,
@@ -334,7 +336,7 @@
///
/// This occurs through macros where field types can be defined in terms of
/// inferred types, making this type indirectly depend on type inference.
-class _InferredRecordTypeBuilder extends RecordTypeBuilder
+class _InferredRecordTypeBuilder extends RecordTypeBuilderImpl
with InferableTypeBuilderMixin {
_InferredRecordTypeBuilder(
List<RecordTypeFieldBuilder>? positionalFields,
diff --git a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
index b6070ef..2fa1d10 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
@@ -373,7 +373,7 @@
List<TypeBuilder> freshTypeArguments = [
if (typeVariables != null)
for (TypeVariableBuilder typeVariable in typeVariables!)
- new NamedTypeBuilder.fromTypeDeclarationBuilder(
+ new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
typeVariable, libraryBuilder.nonNullableBuilder,
arguments: const [],
fileUri: fileUri,
diff --git a/pkg/front_end/lib/src/fasta/builder/type_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
index 0323687..9b89136 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
@@ -8,11 +8,15 @@
import 'package:kernel/class_hierarchy.dart';
import '../kernel/type_algorithms.dart';
+import '../messages.dart';
+import '../scope.dart';
import '../source/source_library_builder.dart';
+import 'formal_parameter_builder.dart';
+import 'invalid_type_declaration_builder.dart';
import 'library_builder.dart';
-import 'named_type_builder.dart';
import 'nullability_builder.dart';
import 'omitted_type_builder.dart';
+import 'record_type_builder.dart';
import 'type_alias_builder.dart';
import 'type_declaration_builder.dart';
import 'type_variable_builder.dart';
@@ -275,7 +279,7 @@
macroTypeArgument,
}
-abstract class TypeBuilder {
+sealed class TypeBuilder {
const TypeBuilder();
TypeDeclarationBuilder? get declaration => null;
@@ -429,60 +433,51 @@
this;
}
-abstract class InferableType {
- /// Triggers inference of this type.
- ///
- /// If an [Inferable] has been register, this is called to infer the type of
- /// this builder. Otherwise the type is inferred to be `dynamic`.
- DartType inferType(ClassHierarchyBase hierarchy);
+abstract class OmittedTypeBuilder extends TypeBuilder {
+ const OmittedTypeBuilder();
+
+ bool get hasType;
+
+ DartType get type;
}
-class InferableTypeUse implements InferableType {
- final SourceLibraryBuilder sourceLibraryBuilder;
- final TypeBuilder typeBuilder;
- final TypeUse typeUse;
-
- InferableTypeUse(this.sourceLibraryBuilder, this.typeBuilder, this.typeUse);
-
+abstract class FunctionTypeBuilder extends TypeBuilder {
@override
- DartType inferType(ClassHierarchyBase hierarchy) {
- return typeBuilder.build(sourceLibraryBuilder, typeUse,
- hierarchy: hierarchy);
- }
+ int get charOffset;
+ TypeBuilder get returnType;
+ List<ParameterBuilder>? get formals;
+ List<TypeVariableBuilder>? get typeVariables;
}
-mixin InferableTypeBuilderMixin implements TypeBuilder {
- bool get hasType => _type != null;
+abstract class InvalidTypeBuilder extends TypeBuilder {}
- DartType? _type;
-
- DartType get type => _type!;
-
- List<InferredTypeListener>? _listeners;
-
+abstract class NamedTypeBuilder extends TypeBuilder {
@override
- void registerInferredTypeListener(InferredTypeListener onType) {
- if (isExplicit) return;
- if (hasType) {
- onType.onInferredType(type);
- } else {
- (_listeners ??= []).add(onType);
- }
- }
+ Object get name;
- DartType registerType(DartType type) {
- // TODO(johnniwinther): Avoid multiple registration from enums and
- // duplicated fields.
- if (_type == null) {
- _type = type;
- List<InferredTypeListener>? listeners = _listeners;
- if (listeners != null) {
- _listeners = null;
- for (InferredTypeListener listener in listeners) {
- listener.onInferredType(type);
- }
- }
- }
- return _type!;
- }
+ int get nameOffset;
+
+ int get nameLength;
+
+ void resolveIn(
+ Scope scope, int charOffset, Uri fileUri, LibraryBuilder library);
+ void bind(LibraryBuilder libraryBuilder, TypeDeclarationBuilder declaration);
+ List<TypeBuilder>? get arguments;
+ NamedTypeBuilder withArguments(List<TypeBuilder> arguments);
+ InvalidTypeDeclarationBuilder buildInvalidTypeDeclarationBuilder(
+ LocatedMessage message,
+ {List<LocatedMessage>? context});
+}
+
+abstract class RecordTypeBuilder extends TypeBuilder {
+ List<RecordTypeFieldBuilder>? get positionalFields;
+ List<RecordTypeFieldBuilder>? get namedFields;
+ @override
+ int get charOffset;
+ @override
+ Uri get fileUri;
+}
+
+abstract class FixedTypeBuilder extends TypeBuilder {
+ const FixedTypeBuilder();
}
diff --git a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
index 0d4f649..f528799 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
@@ -19,10 +19,12 @@
import '../util/helpers.dart';
import 'builder.dart';
import 'class_builder.dart';
+import 'formal_parameter_builder.dart';
import 'library_builder.dart';
import 'metadata_builder.dart';
-import 'named_type_builder.dart';
import 'nullability_builder.dart';
+import 'record_type_builder.dart';
+import 'type_alias_builder.dart';
import 'type_builder.dart';
import 'type_declaration_builder.dart';
@@ -191,8 +193,8 @@
return new TypeParameterType(parameter, nullability);
}
- void finish(
- LibraryBuilder library, ClassBuilder object, TypeBuilder dynamicType) {
+ void finish(SourceLibraryBuilder library, ClassBuilder object,
+ TypeBuilder dynamicType) {
if (isPatch) return;
DartType objectType = object.buildAliasedType(
library,
@@ -265,3 +267,90 @@
growable: true);
}
}
+
+List<TypeVariableBuilder> sortTypeVariablesTopologically(
+ Iterable<TypeVariableBuilder> typeVariables) {
+ Set<TypeVariableBuilder> unhandled = new Set<TypeVariableBuilder>.identity()
+ ..addAll(typeVariables);
+ List<TypeVariableBuilder> result = <TypeVariableBuilder>[];
+ while (unhandled.isNotEmpty) {
+ TypeVariableBuilder rootVariable = unhandled.first;
+ unhandled.remove(rootVariable);
+ if (rootVariable.bound != null) {
+ _sortTypeVariablesTopologicallyFromRoot(
+ rootVariable.bound!, unhandled, result);
+ }
+ result.add(rootVariable);
+ }
+ return result;
+}
+
+void _sortTypeVariablesTopologicallyFromRoot(TypeBuilder root,
+ Set<TypeVariableBuilder> unhandled, List<TypeVariableBuilder> result) {
+ List<TypeVariableBuilder>? foundTypeVariables;
+ List<TypeBuilder>? internalDependents;
+
+ switch (root) {
+ case NamedTypeBuilder(:TypeDeclarationBuilder? declaration):
+ if (declaration is ClassBuilder) {
+ foundTypeVariables = declaration.typeVariables;
+ } else if (declaration is TypeAliasBuilder) {
+ foundTypeVariables = declaration.typeVariables;
+ internalDependents = <TypeBuilder>[declaration.type];
+ } else if (declaration is TypeVariableBuilder) {
+ foundTypeVariables = <TypeVariableBuilder>[declaration];
+ }
+ case FunctionTypeBuilder(
+ :List<TypeVariableBuilder>? typeVariables,
+ :List<ParameterBuilder>? formals,
+ :TypeBuilder returnType
+ ):
+ foundTypeVariables = typeVariables;
+ if (formals != null) {
+ internalDependents = <TypeBuilder>[];
+ for (ParameterBuilder formal in formals) {
+ internalDependents.add(formal.type);
+ }
+ }
+ if (returnType is! OmittedTypeBuilder) {
+ (internalDependents ??= <TypeBuilder>[]).add(returnType);
+ }
+ case RecordTypeBuilder(
+ :List<RecordTypeFieldBuilder>? positionalFields,
+ :List<RecordTypeFieldBuilder>? namedFields
+ ):
+ if (positionalFields != null) {
+ internalDependents = <TypeBuilder>[];
+ for (RecordTypeFieldBuilder field in positionalFields) {
+ internalDependents.add(field.type);
+ }
+ }
+ if (namedFields != null) {
+ internalDependents ??= <TypeBuilder>[];
+ for (RecordTypeFieldBuilder field in namedFields) {
+ internalDependents.add(field.type);
+ }
+ }
+ case OmittedTypeBuilder():
+ case FixedTypeBuilder():
+ case InvalidTypeBuilder():
+ }
+
+ if (foundTypeVariables != null && foundTypeVariables.isNotEmpty) {
+ for (TypeVariableBuilder variable in foundTypeVariables) {
+ if (unhandled.contains(variable)) {
+ unhandled.remove(variable);
+ if (variable.bound != null) {
+ _sortTypeVariablesTopologicallyFromRoot(
+ variable.bound!, unhandled, result);
+ }
+ result.add(variable);
+ }
+ }
+ }
+ if (internalDependents != null && internalDependents.isNotEmpty) {
+ for (TypeBuilder type in internalDependents) {
+ _sortTypeVariablesTopologicallyFromRoot(type, unhandled, result);
+ }
+ }
+}
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index 229affd..15c5014 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -96,9 +96,7 @@
import 'builder/name_iterator.dart' show NameIterator;
-import 'builder/named_type_builder.dart' show NamedTypeBuilder;
-
-import 'builder/type_builder.dart' show TypeBuilder;
+import 'builder/type_builder.dart' show NamedTypeBuilder, TypeBuilder;
import 'builder/type_declaration_builder.dart' show TypeDeclarationBuilder;
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 3d4dda5..6668fa4 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -4953,7 +4953,7 @@
Message message = fasta.templateNotAType.withArguments(displayName);
libraryBuilder.addProblem(
message, offset, lengthOfSpan(beginToken, suffix), uri);
- push(new NamedTypeBuilder.forInvalidType(
+ push(new NamedTypeBuilderImpl.forInvalidType(
name,
libraryBuilder.nullableBuilderIfTrue(isMarkedAsNullable),
message.withLocation(
@@ -4981,7 +4981,7 @@
// TODO(ahe): Arguments could be passed here.
libraryBuilder.addProblem(
name.message, name.charOffset, name.name.length, name.fileUri);
- result = new NamedTypeBuilder.forInvalidType(
+ result = new NamedTypeBuilderImpl.forInvalidType(
name.name,
libraryBuilder.nullableBuilderIfTrue(isMarkedAsNullable),
name.message
@@ -5049,7 +5049,7 @@
const FixedNullableList<RecordTypeFieldBuilder>().popNonNullable(stack,
hasNamedFields ? count - 1 : count, dummyRecordTypeFieldBuilder);
- push(new RecordTypeBuilder(
+ push(new RecordTypeBuilderImpl(
positionalFields,
namedFields,
questionMark != null
@@ -5082,7 +5082,7 @@
push(new RecordTypeFieldBuilder(
[],
type is ParserRecovery
- ? new InvalidTypeBuilder(uri, type.charOffset)
+ ? new InvalidTypeBuilderImpl(uri, type.charOffset)
: type as TypeBuilder,
name is Identifier ? name.name : null,
name is Identifier ? name.charOffset : TreeNode.noOffset));
@@ -5136,7 +5136,7 @@
debugEvent("VoidKeyword");
int offset = offsetForToken(token);
// "void" is always nullable.
- push(new NamedTypeBuilder.fromTypeDeclarationBuilder(
+ push(new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
new VoidTypeDeclarationBuilder(
const VoidType(), libraryBuilder, offset),
const NullabilityBuilder.inherent(),
@@ -8998,42 +8998,80 @@
void _validateTypeVariableUseInternal(TypeBuilder? builder,
{required bool allowPotentiallyConstantType}) {
- if (builder is NamedTypeBuilder) {
- if (builder.declaration!.isTypeVariable) {
- TypeVariableBuilder typeParameterBuilder =
- builder.declaration as TypeVariableBuilder;
- TypeParameter typeParameter = typeParameterBuilder.parameter;
- if (typeParameter.parent is Class ||
- typeParameter.parent is Extension) {
- if (constantContext != ConstantContext.none &&
- (!inConstructorInitializer || !allowPotentiallyConstantType)) {
- LocatedMessage message = fasta.messageTypeVariableInConstantContext
- .withLocation(builder.fileUri!, builder.charOffset!,
- typeParameter.name!.length);
- builder.bind(
- libraryBuilder,
- new InvalidTypeDeclarationBuilder(
- typeParameter.name!, message));
- addProblem(
- message.messageObject, message.charOffset, message.length);
+ switch (builder) {
+ case NamedTypeBuilder(
+ :TypeDeclarationBuilder? declaration,
+ :List<TypeBuilder>? arguments
+ ):
+ if (declaration!.isTypeVariable) {
+ TypeVariableBuilder typeParameterBuilder =
+ declaration as TypeVariableBuilder;
+ TypeParameter typeParameter = typeParameterBuilder.parameter;
+ if (typeParameter.parent is Class ||
+ typeParameter.parent is Extension) {
+ if (constantContext != ConstantContext.none &&
+ (!inConstructorInitializer || !allowPotentiallyConstantType)) {
+ LocatedMessage message =
+ fasta.messageTypeVariableInConstantContext.withLocation(
+ builder.fileUri!,
+ builder.charOffset!,
+ typeParameter.name!.length);
+ builder.bind(
+ libraryBuilder,
+ new InvalidTypeDeclarationBuilder(
+ typeParameter.name!, message));
+ addProblem(
+ message.messageObject, message.charOffset, message.length);
+ }
}
}
- }
- if (builder.arguments != null) {
- for (TypeBuilder typeBuilder in builder.arguments!) {
- _validateTypeVariableUseInternal(typeBuilder,
- allowPotentiallyConstantType: allowPotentiallyConstantType);
+ if (arguments != null) {
+ for (TypeBuilder typeBuilder in arguments) {
+ _validateTypeVariableUseInternal(typeBuilder,
+ allowPotentiallyConstantType: allowPotentiallyConstantType);
+ }
}
- }
- } else if (builder is FunctionTypeBuilder) {
- _validateTypeVariableUseInternal(builder.returnType,
- allowPotentiallyConstantType: allowPotentiallyConstantType);
- if (builder.formals != null) {
- for (ParameterBuilder formalParameterBuilder in builder.formals!) {
- _validateTypeVariableUseInternal(formalParameterBuilder.type,
- allowPotentiallyConstantType: allowPotentiallyConstantType);
+ case FunctionTypeBuilder(
+ :List<TypeVariableBuilder>? typeVariables,
+ :List<ParameterBuilder>? formals,
+ :TypeBuilder returnType
+ ):
+ if (typeVariables != null) {
+ for (TypeVariableBuilder typeVariable in typeVariables) {
+ _validateTypeVariableUseInternal(typeVariable.bound,
+ allowPotentiallyConstantType: allowPotentiallyConstantType);
+ _validateTypeVariableUseInternal(typeVariable.defaultType,
+ allowPotentiallyConstantType: allowPotentiallyConstantType);
+ }
}
- }
+ _validateTypeVariableUseInternal(returnType,
+ allowPotentiallyConstantType: allowPotentiallyConstantType);
+ if (formals != null) {
+ for (ParameterBuilder formalParameterBuilder in formals) {
+ _validateTypeVariableUseInternal(formalParameterBuilder.type,
+ allowPotentiallyConstantType: allowPotentiallyConstantType);
+ }
+ }
+ case RecordTypeBuilder(
+ :List<RecordTypeFieldBuilder>? positionalFields,
+ :List<RecordTypeFieldBuilder>? namedFields
+ ):
+ if (positionalFields != null) {
+ for (RecordTypeFieldBuilder field in positionalFields) {
+ _validateTypeVariableUseInternal(field.type,
+ allowPotentiallyConstantType: allowPotentiallyConstantType);
+ }
+ }
+ if (namedFields != null) {
+ for (RecordTypeFieldBuilder field in namedFields) {
+ _validateTypeVariableUseInternal(field.type,
+ allowPotentiallyConstantType: allowPotentiallyConstantType);
+ }
+ }
+ case OmittedTypeBuilder():
+ case FixedTypeBuilder():
+ case InvalidTypeBuilder():
+ case null:
}
}
@@ -9830,7 +9868,7 @@
TypeBuilder toFunctionType(
TypeBuilder returnType, NullabilityBuilder nullabilityBuilder,
[List<TypeVariableBuilder>? typeParameters]) {
- return new FunctionTypeBuilder(returnType, typeParameters, parameters,
+ return new FunctionTypeBuilderImpl(returnType, typeParameters, parameters,
nullabilityBuilder, uri, charOffset);
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder_context.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder_context.dart
index b22f095..19a9918 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder_context.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder_context.dart
@@ -13,7 +13,6 @@
import '../builder/invalid_type_declaration_builder.dart';
import '../builder/library_builder.dart';
import '../builder/named_type_builder.dart';
-import '../builder/omitted_type_builder.dart';
import '../builder/type_builder.dart';
import '../constant_context.dart' show ConstantContext;
import '../dill/dill_class_builder.dart';
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index a715e8e..5323341 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -6263,7 +6263,9 @@
bool visitFunctionType(FunctionType node) {
final List<TypeParameter> parameters = node.typeParameters;
_availableVariables.addAll(parameters);
- final bool result = node.returnType.accept(this) &&
+ final bool result = node.typeParameters
+ .every((p) => p.bound.accept(this) && p.defaultType.accept(this)) &&
+ node.returnType.accept(this) &&
node.positionalParameters.every((p) => p.accept(this)) &&
node.namedParameters.every((p) => p.type.accept(this));
_availableVariables.removeAll(parameters);
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index 10b819c..b86d38f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -260,7 +260,9 @@
Message message = templateNotAType.withArguments(token.lexeme);
_helper.libraryBuilder
.addProblem(message, fileOffset, lengthForToken(token), _uri);
- return new NamedTypeBuilder.forInvalidType(token.lexeme, nullabilityBuilder,
+ return new NamedTypeBuilderImpl.forInvalidType(
+ token.lexeme,
+ nullabilityBuilder,
message.withLocation(_uri, fileOffset, lengthForToken(token)));
}
@@ -2966,7 +2968,7 @@
}
_helper.libraryBuilder.addProblem(
message.messageObject, message.charOffset, message.length, message.uri);
- return new NamedTypeBuilder.forInvalidType(
+ return new NamedTypeBuilderImpl.forInvalidType(
name, nullabilityBuilder, message);
}
@@ -3073,7 +3075,7 @@
return new DependentTypeBuilder(
(declaration as OmittedTypeDeclarationBuilder).omittedTypeBuilder);
}
- return new NamedTypeBuilder(targetName, nullabilityBuilder,
+ return new NamedTypeBuilderImpl(targetName, nullabilityBuilder,
arguments: arguments,
fileUri: _uri,
charOffset: fileOffset,
@@ -3172,7 +3174,7 @@
} else {
if (declarationBuilder is DeclarationBuilder) {
if (aliasedTypeArguments != null) {
- new NamedTypeBuilder(
+ new NamedTypeBuilderImpl(
aliasBuilder.name, const NullabilityBuilder.omitted(),
arguments: aliasedTypeArguments,
fileUri: _uri,
@@ -3192,7 +3194,7 @@
aliasedTypeArguments = <TypeBuilder>[];
for (TypeVariableBuilder typeVariable
in aliasBuilder.typeVariables!) {
- aliasedTypeArguments.add(new NamedTypeBuilder(
+ aliasedTypeArguments.add(new NamedTypeBuilderImpl(
typeVariable.name, const NullabilityBuilder.omitted(),
fileUri: _uri,
charOffset: fileOffset,
@@ -4211,7 +4213,7 @@
offsetForToken(prefixGenerator.token),
lengthOfSpan(prefixGenerator.token, token),
_uri);
- return new NamedTypeBuilder.forInvalidType(
+ return new NamedTypeBuilderImpl.forInvalidType(
_plainNameForRead,
nullabilityBuilder,
message.withLocation(_uri, offsetForToken(prefixGenerator.token),
@@ -4319,14 +4321,14 @@
{required bool allowPotentiallyConstantType,
required bool performTypeCanonicalization}) {
_helper.libraryBuilder.addProblem(message, fileOffset, noLength, _uri);
- return new NamedTypeBuilder.forInvalidType(token.lexeme, nullabilityBuilder,
- message.withLocation(_uri, fileOffset, noLength));
+ return new NamedTypeBuilderImpl.forInvalidType(token.lexeme,
+ nullabilityBuilder, message.withLocation(_uri, fileOffset, noLength));
}
TypeBuilder buildTypeWithResolvedArgumentsDoNotAddProblem(
NullabilityBuilder nullabilityBuilder) {
- return new NamedTypeBuilder.forInvalidType(token.lexeme, nullabilityBuilder,
- message.withLocation(_uri, fileOffset, noLength));
+ return new NamedTypeBuilderImpl.forInvalidType(token.lexeme,
+ nullabilityBuilder, message.withLocation(_uri, fileOffset, noLength));
}
@override
diff --git a/pkg/front_end/lib/src/fasta/kernel/hierarchy/hierarchy_node.dart b/pkg/front_end/lib/src/fasta/kernel/hierarchy/hierarchy_node.dart
index 73b6d8b..c3c0d4c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/hierarchy/hierarchy_node.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/hierarchy/hierarchy_node.dart
@@ -296,8 +296,8 @@
typeArguments.length,
(int i) => _hierarchy.loader.computeTypeBuilder(typeArguments[i]),
growable: false);
- NamedTypeBuilder mixedInTypeBuilder =
- _classBuilder.mixedInTypeBuilder as NamedTypeBuilder;
+ NamedTypeBuilderImpl mixedInTypeBuilder =
+ _classBuilder.mixedInTypeBuilder as NamedTypeBuilderImpl;
mixedInTypeBuilder.arguments = inferredArguments;
return mixinNode;
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/hierarchy/members_node.dart b/pkg/front_end/lib/src/fasta/kernel/hierarchy/members_node.dart
index 7e173bb..c8bba62 100644
--- a/pkg/front_end/lib/src/fasta/kernel/hierarchy/members_node.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/hierarchy/members_node.dart
@@ -15,7 +15,6 @@
import '../../builder/formal_parameter_builder.dart';
import '../../builder/library_builder.dart';
import '../../builder/member_builder.dart';
-import '../../builder/named_type_builder.dart';
import '../../builder/omitted_type_builder.dart';
import '../../builder/type_alias_builder.dart';
import '../../builder/type_builder.dart';
diff --git a/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart b/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart
index a257ab6..e835bb4 100644
--- a/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart
@@ -11,7 +11,7 @@
import 'package:kernel/src/assumptions.dart';
import 'package:kernel/src/printer.dart';
-import '../builder/type_builder.dart';
+import '../builder/inferable_type_builder.dart';
import '../constant_context.dart';
import '../fasta_codes.dart';
import '../problems.dart' show unsupported;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index f8a634f..19f4c19 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -106,31 +106,31 @@
// 'dynamic' is always nullable.
// TODO(johnniwinther): Why isn't this using a FixedTypeBuilder?
- final NamedTypeBuilder dynamicType = new NamedTypeBuilder(
+ final NamedTypeBuilder dynamicType = new NamedTypeBuilderImpl(
"dynamic", const NullabilityBuilder.inherent(),
instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
- final NamedTypeBuilder objectType = new NamedTypeBuilder(
+ final NamedTypeBuilder objectType = new NamedTypeBuilderImpl(
"Object", const NullabilityBuilder.omitted(),
instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
// Null is always nullable.
// TODO(johnniwinther): This could (maybe) use a FixedTypeBuilder when we
// have NullType?
- final NamedTypeBuilder nullType = new NamedTypeBuilder(
+ final NamedTypeBuilder nullType = new NamedTypeBuilderImpl(
"Null", const NullabilityBuilder.inherent(),
instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
// TODO(johnniwinther): Why isn't this using a FixedTypeBuilder?
- final NamedTypeBuilder bottomType = new NamedTypeBuilder(
+ final NamedTypeBuilder bottomType = new NamedTypeBuilderImpl(
"Never", const NullabilityBuilder.omitted(),
instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
- final NamedTypeBuilder enumType = new NamedTypeBuilder(
+ final NamedTypeBuilder enumType = new NamedTypeBuilderImpl(
"Enum", const NullabilityBuilder.omitted(),
instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
- final NamedTypeBuilder underscoreEnumType = new NamedTypeBuilder(
+ final NamedTypeBuilder underscoreEnumType = new NamedTypeBuilderImpl(
"_Enum", const NullabilityBuilder.omitted(),
instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro/macro.dart b/pkg/front_end/lib/src/fasta/kernel/macro/macro.dart
index 982e4a6..e6b667d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/macro/macro.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/macro/macro.dart
@@ -23,9 +23,7 @@
import '../../builder/formal_parameter_builder.dart';
import '../../builder/library_builder.dart';
import '../../builder/member_builder.dart';
-import '../../builder/named_type_builder.dart';
import '../../builder/nullability_builder.dart';
-import '../../builder/omitted_type_builder.dart';
import '../../builder/type_alias_builder.dart';
import '../../builder/type_builder.dart';
import '../../builder/type_declaration_builder.dart';
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
index fc6b94e..7424604c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
@@ -18,7 +18,6 @@
import '../builder/library_builder.dart';
import '../builder/named_type_builder.dart';
import '../builder/nullability_builder.dart';
-import '../builder/omitted_type_builder.dart';
import '../builder/record_type_builder.dart';
import '../builder/type_alias_builder.dart';
import '../builder/type_builder.dart';
@@ -58,26 +57,28 @@
// type variable.
int computeTypeVariableBuilderVariance(TypeVariableBuilder variable,
TypeBuilder? type, LibraryBuilder libraryBuilder) {
- if (type is NamedTypeBuilder) {
- assert(type.declaration != null);
- TypeDeclarationBuilder? declaration = type.declaration;
- if (declaration is TypeVariableBuilder) {
- if (declaration == variable) {
- return Variance.covariant;
- } else {
- return Variance.unrelated;
- }
- } else {
- if (declaration is ClassBuilder) {
+ switch (type) {
+ case NamedTypeBuilder(
+ :TypeDeclarationBuilder? declaration,
+ :List<TypeBuilder>? arguments
+ ):
+ assert(declaration != null);
+ if (declaration is TypeVariableBuilder) {
+ if (declaration == variable) {
+ return Variance.covariant;
+ } else {
+ return Variance.unrelated;
+ }
+ } else if (declaration is ClassBuilder) {
int result = Variance.unrelated;
- if (type.arguments != null) {
- for (int i = 0; i < type.arguments!.length; ++i) {
+ if (arguments != null) {
+ for (int i = 0; i < arguments.length; ++i) {
result = Variance.meet(
result,
Variance.combine(
declaration.cls.typeParameters[i].variance,
computeTypeVariableBuilderVariance(
- variable, type.arguments![i], libraryBuilder)));
+ variable, arguments[i], libraryBuilder)));
}
}
return result;
@@ -124,42 +125,72 @@
}
return result;
}
- }
- } else if (type is FunctionTypeBuilder) {
- int result = Variance.unrelated;
- if (type.returnType is! OmittedTypeBuilder) {
- result = Variance.meet(
- result,
- computeTypeVariableBuilderVariance(
- variable, type.returnType, libraryBuilder));
- }
- if (type.typeVariables != null) {
- for (TypeVariableBuilder typeVariable in type.typeVariables!) {
- // If [variable] is referenced in the bound at all, it makes the
- // variance of [variable] in the entire type invariant. The invocation
- // of [computeVariance] below is made to simply figure out if [variable]
- // occurs in the bound.
- if (typeVariable.bound != null &&
- computeTypeVariableBuilderVariance(
- variable, typeVariable.bound!, libraryBuilder) !=
- Variance.unrelated) {
- result = Variance.invariant;
- }
- }
- }
- if (type.formals != null) {
- for (ParameterBuilder formal in type.formals!) {
+ return Variance.unrelated;
+ case FunctionTypeBuilder(
+ :List<TypeVariableBuilder>? typeVariables,
+ :List<ParameterBuilder>? formals,
+ :TypeBuilder returnType
+ ):
+ int result = Variance.unrelated;
+ if (returnType is! OmittedTypeBuilder) {
result = Variance.meet(
result,
- Variance.combine(
- Variance.contravariant,
- computeTypeVariableBuilderVariance(
- variable, formal.type, libraryBuilder)));
+ computeTypeVariableBuilderVariance(
+ variable, returnType, libraryBuilder));
}
- }
- return result;
+ if (typeVariables != null) {
+ for (TypeVariableBuilder typeVariable in typeVariables) {
+ // If [variable] is referenced in the bound at all, it makes the
+ // variance of [variable] in the entire type invariant. The
+ // invocation of [computeVariance] below is made to simply figure out
+ // if [variable] occurs in the bound.
+ if (typeVariable.bound != null &&
+ computeTypeVariableBuilderVariance(
+ variable, typeVariable.bound!, libraryBuilder) !=
+ Variance.unrelated) {
+ result = Variance.invariant;
+ }
+ }
+ }
+ if (formals != null) {
+ for (ParameterBuilder formal in formals) {
+ result = Variance.meet(
+ result,
+ Variance.combine(
+ Variance.contravariant,
+ computeTypeVariableBuilderVariance(
+ variable, formal.type, libraryBuilder)));
+ }
+ }
+ return result;
+ case RecordTypeBuilder(
+ :List<RecordTypeFieldBuilder>? positionalFields,
+ :List<RecordTypeFieldBuilder>? namedFields
+ ):
+ int result = Variance.unrelated;
+ if (positionalFields != null) {
+ for (RecordTypeFieldBuilder field in positionalFields) {
+ result = Variance.meet(
+ result,
+ computeTypeVariableBuilderVariance(
+ variable, field.type, libraryBuilder));
+ }
+ }
+ if (namedFields != null) {
+ for (RecordTypeFieldBuilder field in namedFields) {
+ result = Variance.meet(
+ result,
+ computeTypeVariableBuilderVariance(
+ variable, field.type, libraryBuilder));
+ }
+ }
+ return result;
+ case FixedTypeBuilder():
+ case InvalidTypeBuilder():
+ case OmittedTypeBuilder():
+ case null:
+ return Variance.unrelated;
}
- return Variance.unrelated;
}
/// Combines syntactic nullabilities on types for performing type substitution.
@@ -187,18 +218,42 @@
List<TypeBuilder> unboundTypes,
List<TypeVariableBuilder> unboundTypeVariables,
{final int variance = Variance.covariant}) {
- if (type is NamedTypeBuilder) {
- if (type.declaration is TypeVariableBuilder) {
- if (variance == Variance.contravariant) {
- TypeBuilder? replacement = lowerSubstitution[type.declaration];
- if (replacement != null) {
- return replacement.withNullabilityBuilder(
- combineNullabilityBuildersForSubstitution(
- replacement.nullabilityBuilder, type.nullabilityBuilder));
- }
- return type;
- }
- TypeBuilder? replacement = upperSubstitution[type.declaration];
+ switch (type) {
+ case NamedTypeBuilder():
+ return _substituteNamedTypeBuilder(type, upperSubstitution,
+ lowerSubstitution, unboundTypes, unboundTypeVariables,
+ variance: variance);
+
+ case FunctionTypeBuilder():
+ return _substituteFunctionTypeBuilder(type, upperSubstitution,
+ lowerSubstitution, unboundTypes, unboundTypeVariables,
+ variance: variance);
+
+ case RecordTypeBuilder():
+ return _substituteRecordTypeBuilder(type, upperSubstitution,
+ lowerSubstitution, unboundTypes, unboundTypeVariables,
+ variance: variance);
+
+ case OmittedTypeBuilder():
+ case FixedTypeBuilder():
+ case InvalidTypeBuilder():
+ return type;
+ }
+}
+
+TypeBuilder _substituteNamedTypeBuilder(
+ NamedTypeBuilder type,
+ Map<TypeVariableBuilder, TypeBuilder> upperSubstitution,
+ Map<TypeVariableBuilder, TypeBuilder> lowerSubstitution,
+ List<TypeBuilder> unboundTypes,
+ List<TypeVariableBuilder> unboundTypeVariables,
+ {final int variance = Variance.covariant}) {
+ TypeDeclarationBuilder? declaration = type.declaration;
+ List<TypeBuilder>? arguments = type.arguments;
+
+ if (declaration is TypeVariableBuilder) {
+ if (variance == Variance.contravariant) {
+ TypeBuilder? replacement = lowerSubstitution[declaration];
if (replacement != null) {
return replacement.withNullabilityBuilder(
combineNullabilityBuildersForSubstitution(
@@ -206,221 +261,245 @@
}
return type;
}
- if (type.arguments == null || type.arguments!.length == 0) {
- return type;
+ TypeBuilder? replacement = upperSubstitution[declaration];
+ if (replacement != null) {
+ return replacement.withNullabilityBuilder(
+ combineNullabilityBuildersForSubstitution(
+ replacement.nullabilityBuilder, type.nullabilityBuilder));
}
- List<TypeBuilder>? arguments;
- TypeDeclarationBuilder? declaration = type.declaration;
+ return type;
+ }
+ if (arguments == null || arguments.length == 0) {
+ return type;
+ }
+ List<TypeBuilder>? newArguments;
+ if (declaration == null) {
+ assert(
+ identical(upperSubstitution, lowerSubstitution),
+ "Can only handle unbound named type builders identical "
+ "`upperSubstitution` and `lowerSubstitution`.");
+ for (int i = 0; i < arguments.length; ++i) {
+ TypeBuilder substitutedArgument = substituteRange(
+ arguments[i],
+ upperSubstitution,
+ lowerSubstitution,
+ unboundTypes,
+ unboundTypeVariables,
+ variance: variance);
+ if (substitutedArgument != arguments[i]) {
+ newArguments ??= arguments.toList();
+ newArguments[i] = substitutedArgument;
+ }
+ }
+ } else if (declaration is ClassBuilder) {
+ for (int i = 0; i < arguments.length; ++i) {
+ TypeBuilder substitutedArgument = substituteRange(
+ arguments[i],
+ upperSubstitution,
+ lowerSubstitution,
+ unboundTypes,
+ unboundTypeVariables,
+ variance: variance);
+ if (substitutedArgument != arguments[i]) {
+ newArguments ??= arguments.toList();
+ newArguments[i] = substitutedArgument;
+ }
+ }
+ } else if (declaration is ExtensionTypeDeclarationBuilder) {
+ for (int i = 0; i < arguments.length; ++i) {
+ TypeBuilder substitutedArgument = substituteRange(
+ arguments[i],
+ upperSubstitution,
+ lowerSubstitution,
+ unboundTypes,
+ unboundTypeVariables,
+ variance: variance);
+ if (substitutedArgument != arguments[i]) {
+ newArguments ??= arguments.toList();
+ newArguments[i] = substitutedArgument;
+ }
+ }
+ } else if (declaration is TypeAliasBuilder) {
+ for (int i = 0; i < arguments.length; ++i) {
+ TypeVariableBuilder variable = declaration.typeVariables![i];
+ TypeBuilder substitutedArgument = substituteRange(
+ arguments[i],
+ upperSubstitution,
+ lowerSubstitution,
+ unboundTypes,
+ unboundTypeVariables,
+ variance: Variance.combine(variance, variable.variance));
+ if (substitutedArgument != arguments[i]) {
+ newArguments ??= arguments.toList();
+ newArguments[i] = substitutedArgument;
+ }
+ }
+ } else if (declaration is InvalidTypeDeclarationBuilder) {
+ // Don't substitute.
+ } else {
+ assert(false, "Unexpected named type builder declaration: $declaration.");
+ }
+ if (newArguments != null) {
+ NamedTypeBuilder newTypeBuilder = type.withArguments(newArguments);
if (declaration == null) {
- assert(
- identical(upperSubstitution, lowerSubstitution),
- "Can only handle unbound named type builders identical "
- "`upperSubstitution` and `lowerSubstitution`.");
- for (int i = 0; i < type.arguments!.length; ++i) {
- TypeBuilder substitutedArgument = substituteRange(
- type.arguments![i],
- upperSubstitution,
- lowerSubstitution,
- unboundTypes,
- unboundTypeVariables,
- variance: variance);
- if (substitutedArgument != type.arguments![i]) {
- arguments ??= type.arguments!.toList();
- arguments[i] = substitutedArgument;
- }
- }
- } else if (declaration is ClassBuilder) {
- for (int i = 0; i < type.arguments!.length; ++i) {
- TypeBuilder substitutedArgument = substituteRange(
- type.arguments![i],
- upperSubstitution,
- lowerSubstitution,
- unboundTypes,
- unboundTypeVariables,
- variance: variance);
- if (substitutedArgument != type.arguments![i]) {
- arguments ??= type.arguments!.toList();
- arguments[i] = substitutedArgument;
- }
- }
- } else if (declaration is ExtensionTypeDeclarationBuilder) {
- for (int i = 0; i < type.arguments!.length; ++i) {
- TypeBuilder substitutedArgument = substituteRange(
- type.arguments![i],
- upperSubstitution,
- lowerSubstitution,
- unboundTypes,
- unboundTypeVariables,
- variance: variance);
- if (substitutedArgument != type.arguments![i]) {
- arguments ??= type.arguments!.toList();
- arguments[i] = substitutedArgument;
- }
- }
- } else if (declaration is TypeAliasBuilder) {
- for (int i = 0; i < type.arguments!.length; ++i) {
- TypeVariableBuilder variable = declaration.typeVariables![i];
- TypeBuilder substitutedArgument = substituteRange(
- type.arguments![i],
- upperSubstitution,
- lowerSubstitution,
- unboundTypes,
- unboundTypeVariables,
- variance: Variance.combine(variance, variable.variance));
- if (substitutedArgument != type.arguments![i]) {
- arguments ??= type.arguments!.toList();
- arguments[i] = substitutedArgument;
- }
- }
- } else if (declaration is InvalidTypeDeclarationBuilder) {
- // Don't substitute.
- } else {
- assert(false, "Unexpected named type builder declaration: $declaration.");
+ unboundTypes.add(newTypeBuilder);
}
- if (arguments != null) {
- NamedTypeBuilder newTypeBuilder = type.withArguments(arguments);
- if (declaration == null) {
- unboundTypes.add(newTypeBuilder);
- }
- return newTypeBuilder;
- }
- return type;
- } else if (type is FunctionTypeBuilder) {
- List<TypeVariableBuilder>? variables;
- if (type.typeVariables != null) {
- variables = new List<TypeVariableBuilder>.filled(
- type.typeVariables!.length, dummyTypeVariableBuilder);
- }
- List<ParameterBuilder>? formals;
- if (type.formals != null) {
- formals = new List<ParameterBuilder>.filled(
- type.formals!.length, dummyFormalParameterBuilder);
- }
- TypeBuilder? returnType;
- bool changed = false;
+ return newTypeBuilder;
+ }
+ return type;
+}
- Map<TypeVariableBuilder, TypeBuilder>? functionTypeUpperSubstitution;
- Map<TypeVariableBuilder, TypeBuilder>? functionTypeLowerSubstitution;
- if (type.typeVariables != null) {
- for (int i = 0; i < variables!.length; i++) {
- TypeVariableBuilder variable = type.typeVariables![i];
- TypeBuilder? bound;
- if (variable.bound != null) {
- bound = substituteRange(variable.bound!, upperSubstitution,
- lowerSubstitution, unboundTypes, unboundTypeVariables,
- variance: Variance.invariant);
- }
- if (bound != variable.bound) {
- TypeVariableBuilder newTypeVariableBuilder = variables[i] =
- new TypeVariableBuilder(variable.name, variable.parent,
- variable.charOffset, variable.fileUri,
- bound: bound, kind: TypeVariableKind.function);
- unboundTypeVariables.add(newTypeVariableBuilder);
- if (functionTypeUpperSubstitution == null) {
- functionTypeUpperSubstitution = {}..addAll(upperSubstitution);
- functionTypeLowerSubstitution = {}..addAll(lowerSubstitution);
- }
- functionTypeUpperSubstitution[variable] =
- functionTypeLowerSubstitution![variable] =
- new NamedTypeBuilder.fromTypeDeclarationBuilder(
- newTypeVariableBuilder,
- const NullabilityBuilder.omitted(),
- instanceTypeVariableAccess:
- InstanceTypeVariableAccessState.Unexpected);
- changed = true;
- } else {
- variables[i] = variable;
- }
- }
- }
- if (type.formals != null) {
- for (int i = 0; i < formals!.length; i++) {
- ParameterBuilder formal = type.formals![i];
- TypeBuilder parameterType = substituteRange(
- formal.type,
- functionTypeUpperSubstitution ?? upperSubstitution,
- functionTypeLowerSubstitution ?? lowerSubstitution,
- unboundTypes,
- unboundTypeVariables,
- variance: Variance.combine(variance, Variance.contravariant));
- if (parameterType != formal.type) {
- formals[i] = new FunctionTypeParameterBuilder(
- formal.metadata, formal.kind, parameterType, formal.name);
- changed = true;
- } else {
- formals[i] = formal;
- }
- }
- }
- returnType = substituteRange(
- type.returnType,
- functionTypeUpperSubstitution ?? upperSubstitution,
- functionTypeLowerSubstitution ?? lowerSubstitution,
- unboundTypes,
- unboundTypeVariables,
- variance: variance);
- changed = changed || returnType != type.returnType;
+TypeBuilder _substituteFunctionTypeBuilder(
+ FunctionTypeBuilder type,
+ Map<TypeVariableBuilder, TypeBuilder> upperSubstitution,
+ Map<TypeVariableBuilder, TypeBuilder> lowerSubstitution,
+ List<TypeBuilder> unboundTypes,
+ List<TypeVariableBuilder> unboundTypeVariables,
+ {final int variance = Variance.covariant}) {
+ List<TypeVariableBuilder>? typeVariables = type.typeVariables;
+ List<ParameterBuilder>? formals = type.formals;
+ TypeBuilder returnType = type.returnType;
- if (changed) {
- return new FunctionTypeBuilder(returnType, variables, formals,
- type.nullabilityBuilder, type.fileUri, type.charOffset);
- }
- return type;
- } else if (type is RecordTypeBuilder) {
- bool changed = false;
+ List<TypeVariableBuilder>? newTypeVariables;
+ if (typeVariables != null) {
+ newTypeVariables = new List<TypeVariableBuilder>.filled(
+ typeVariables.length, dummyTypeVariableBuilder);
+ }
+ List<ParameterBuilder>? newFormals;
+ TypeBuilder newReturnType;
+ bool changed = false;
- List<RecordTypeFieldBuilder>? positional = type.positionalFields != null
- ? new List<RecordTypeFieldBuilder>.of(type.positionalFields!)
- : null;
- List<RecordTypeFieldBuilder>? named = type.namedFields != null
- ? new List<RecordTypeFieldBuilder>.of(type.namedFields!)
- : null;
- if (positional != null) {
- for (int i = 0; i < positional.length; i++) {
- RecordTypeFieldBuilder positionalFieldBuilder = positional[i];
- TypeBuilder positionalFieldType = substituteRange(
- positionalFieldBuilder.type,
- upperSubstitution,
- lowerSubstitution,
- unboundTypes,
- unboundTypeVariables,
- variance: variance);
- if (positionalFieldType != positionalFieldBuilder.type) {
- positional[i] = new RecordTypeFieldBuilder(
- positionalFieldBuilder.metadata,
- positionalFieldType,
- positionalFieldBuilder.name,
- positionalFieldBuilder.charOffset);
- changed = true;
+ Map<TypeVariableBuilder, TypeBuilder>? functionTypeUpperSubstitution;
+ Map<TypeVariableBuilder, TypeBuilder>? functionTypeLowerSubstitution;
+ if (typeVariables != null) {
+ for (int i = 0; i < newTypeVariables!.length; i++) {
+ TypeVariableBuilder variable = typeVariables[i];
+ TypeBuilder? bound;
+ if (variable.bound != null) {
+ bound = substituteRange(variable.bound!, upperSubstitution,
+ lowerSubstitution, unboundTypes, unboundTypeVariables,
+ variance: Variance.invariant);
+ }
+ if (bound != variable.bound) {
+ TypeVariableBuilder newTypeVariableBuilder = newTypeVariables[i] =
+ new TypeVariableBuilder(variable.name, variable.parent,
+ variable.charOffset, variable.fileUri,
+ bound: bound, kind: TypeVariableKind.function);
+ unboundTypeVariables.add(newTypeVariableBuilder);
+ if (functionTypeUpperSubstitution == null) {
+ functionTypeUpperSubstitution = {}..addAll(upperSubstitution);
+ functionTypeLowerSubstitution = {}..addAll(lowerSubstitution);
}
+ functionTypeUpperSubstitution[variable] =
+ functionTypeLowerSubstitution![variable] =
+ new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
+ newTypeVariableBuilder, const NullabilityBuilder.omitted(),
+ instanceTypeVariableAccess:
+ InstanceTypeVariableAccessState.Unexpected);
+ changed = true;
+ } else {
+ newTypeVariables[i] = variable;
}
}
- if (named != null) {
- for (int i = 0; i < named.length; i++) {
- RecordTypeFieldBuilder namedFieldBuilder = named[i];
- TypeBuilder namedFieldType = substituteRange(
- namedFieldBuilder.type,
- upperSubstitution,
- lowerSubstitution,
- unboundTypes,
- unboundTypeVariables,
- variance: variance);
- if (namedFieldType != namedFieldBuilder.type) {
- named[i] = new RecordTypeFieldBuilder(
- namedFieldBuilder.metadata,
- namedFieldType,
- namedFieldBuilder.name,
- namedFieldBuilder.charOffset);
- changed = true;
- }
+ }
+ if (formals != null) {
+ newFormals = new List<ParameterBuilder>.filled(
+ formals.length, dummyFormalParameterBuilder);
+ for (int i = 0; i < formals.length; i++) {
+ ParameterBuilder formal = formals[i];
+ TypeBuilder parameterType = substituteRange(
+ formal.type,
+ functionTypeUpperSubstitution ?? upperSubstitution,
+ functionTypeLowerSubstitution ?? lowerSubstitution,
+ unboundTypes,
+ unboundTypeVariables,
+ variance: Variance.combine(variance, Variance.contravariant));
+ if (parameterType != formal.type) {
+ newFormals[i] = new FunctionTypeParameterBuilder(
+ formal.metadata, formal.kind, parameterType, formal.name);
+ changed = true;
+ } else {
+ newFormals[i] = formal;
}
}
+ }
+ newReturnType = substituteRange(
+ returnType,
+ functionTypeUpperSubstitution ?? upperSubstitution,
+ functionTypeLowerSubstitution ?? lowerSubstitution,
+ unboundTypes,
+ unboundTypeVariables,
+ variance: variance);
+ changed = changed || newReturnType != returnType;
- if (changed) {
- return new RecordTypeBuilder(positional, named, type.nullabilityBuilder,
- type.fileUri, type.charOffset);
+ if (changed) {
+ return new FunctionTypeBuilderImpl(newReturnType, newTypeVariables,
+ newFormals, type.nullabilityBuilder, type.fileUri, type.charOffset);
+ }
+ return type;
+}
+
+TypeBuilder _substituteRecordTypeBuilder(
+ RecordTypeBuilder type,
+ Map<TypeVariableBuilder, TypeBuilder> upperSubstitution,
+ Map<TypeVariableBuilder, TypeBuilder> lowerSubstitution,
+ List<TypeBuilder> unboundTypes,
+ List<TypeVariableBuilder> unboundTypeVariables,
+ {final int variance = Variance.covariant}) {
+ List<RecordTypeFieldBuilder>? positionalFields = type.positionalFields;
+ List<RecordTypeFieldBuilder>? namedFields = type.namedFields;
+
+ bool changed = false;
+ List<RecordTypeFieldBuilder>? newPositionalFields = positionalFields != null
+ ? new List<RecordTypeFieldBuilder>.of(positionalFields)
+ : null;
+ List<RecordTypeFieldBuilder>? newNamedFields = namedFields != null
+ ? new List<RecordTypeFieldBuilder>.of(namedFields)
+ : null;
+ if (newPositionalFields != null) {
+ for (int i = 0; i < newPositionalFields.length; i++) {
+ RecordTypeFieldBuilder positionalFieldBuilder = newPositionalFields[i];
+ TypeBuilder positionalFieldType = substituteRange(
+ positionalFieldBuilder.type,
+ upperSubstitution,
+ lowerSubstitution,
+ unboundTypes,
+ unboundTypeVariables,
+ variance: variance);
+ if (positionalFieldType != positionalFieldBuilder.type) {
+ newPositionalFields[i] = new RecordTypeFieldBuilder(
+ positionalFieldBuilder.metadata,
+ positionalFieldType,
+ positionalFieldBuilder.name,
+ positionalFieldBuilder.charOffset);
+ changed = true;
+ }
}
- return type;
+ }
+ if (newNamedFields != null) {
+ for (int i = 0; i < newNamedFields.length; i++) {
+ RecordTypeFieldBuilder namedFieldBuilder = newNamedFields[i];
+ TypeBuilder namedFieldType = substituteRange(
+ namedFieldBuilder.type,
+ upperSubstitution,
+ lowerSubstitution,
+ unboundTypes,
+ unboundTypeVariables,
+ variance: variance);
+ if (namedFieldType != namedFieldBuilder.type) {
+ newNamedFields[i] = new RecordTypeFieldBuilder(
+ namedFieldBuilder.metadata,
+ namedFieldType,
+ namedFieldBuilder.name,
+ namedFieldBuilder.charOffset);
+ changed = true;
+ }
+ }
+ }
+
+ if (changed) {
+ return new RecordTypeBuilderImpl(newPositionalFields, newNamedFields,
+ type.nullabilityBuilder, type.fileUri, type.charOffset);
}
return type;
}
@@ -515,28 +594,54 @@
}, growable: false);
void collectReferencesFrom(int index, TypeBuilder? type) {
- if (type is NamedTypeBuilder) {
- if (type.declaration is TypeVariableBuilder &&
- this.variables.contains(type.declaration)) {
- edges[variableIndices[type.declaration]!].add(index);
- }
- if (type.arguments != null) {
- for (TypeBuilder argument in type.arguments!) {
- collectReferencesFrom(index, argument);
+ switch (type) {
+ case NamedTypeBuilder(
+ :TypeDeclarationBuilder? declaration,
+ :List<TypeBuilder>? arguments
+ ):
+ if (declaration is TypeVariableBuilder &&
+ this.variables.contains(declaration)) {
+ edges[variableIndices[declaration]!].add(index);
}
- }
- } else if (type is FunctionTypeBuilder) {
- if (type.typeVariables != null) {
- for (TypeVariableBuilder typeVariable in type.typeVariables!) {
- collectReferencesFrom(index, typeVariable.bound);
+ if (arguments != null) {
+ for (TypeBuilder argument in arguments) {
+ collectReferencesFrom(index, argument);
+ }
}
- }
- if (type.formals != null) {
- for (ParameterBuilder parameter in type.formals!) {
- collectReferencesFrom(index, parameter.type);
+ case FunctionTypeBuilder(
+ :List<TypeVariableBuilder>? typeVariables,
+ :List<ParameterBuilder>? formals,
+ :TypeBuilder returnType
+ ):
+ if (typeVariables != null) {
+ for (TypeVariableBuilder typeVariable in typeVariables) {
+ collectReferencesFrom(index, typeVariable.bound);
+ }
}
- }
- collectReferencesFrom(index, type.returnType);
+ if (formals != null) {
+ for (ParameterBuilder parameter in formals) {
+ collectReferencesFrom(index, parameter.type);
+ }
+ }
+ collectReferencesFrom(index, returnType);
+ case RecordTypeBuilder(
+ :List<RecordTypeFieldBuilder>? positionalFields,
+ :List<RecordTypeFieldBuilder>? namedFields
+ ):
+ if (positionalFields != null) {
+ for (RecordTypeFieldBuilder field in positionalFields) {
+ collectReferencesFrom(index, field.type);
+ }
+ }
+ if (namedFields != null) {
+ for (RecordTypeFieldBuilder field in namedFields) {
+ collectReferencesFrom(index, field.type);
+ }
+ }
+ case FixedTypeBuilder():
+ case InvalidTypeBuilder():
+ case OmittedTypeBuilder():
+ case null:
}
}
@@ -561,35 +666,62 @@
TypeBuilder? type,
) {
List<NamedTypeBuilder> uses = <NamedTypeBuilder>[];
- if (type is NamedTypeBuilder) {
- if (type.declaration == variable) {
- uses.add(type);
- } else {
- if (type.arguments != null) {
- for (TypeBuilder argument in type.arguments!) {
- uses.addAll(findVariableUsesInType(variable, argument));
+ switch (type) {
+ case NamedTypeBuilder(
+ :TypeDeclarationBuilder? declaration,
+ :List<TypeBuilder>? arguments
+ ):
+ if (declaration == variable) {
+ uses.add(type);
+ } else {
+ if (arguments != null) {
+ for (TypeBuilder argument in arguments) {
+ uses.addAll(findVariableUsesInType(variable, argument));
+ }
}
}
- }
- } else if (type is FunctionTypeBuilder) {
- uses.addAll(findVariableUsesInType(variable, type.returnType));
- if (type.typeVariables != null) {
- for (TypeVariableBuilder dependentVariable in type.typeVariables!) {
- if (dependentVariable.bound != null) {
- uses.addAll(
- findVariableUsesInType(variable, dependentVariable.bound));
- }
- if (dependentVariable.defaultType != null) {
- uses.addAll(
- findVariableUsesInType(variable, dependentVariable.defaultType));
+ break;
+ case FunctionTypeBuilder(
+ :List<TypeVariableBuilder>? typeVariables,
+ :List<ParameterBuilder>? formals,
+ :TypeBuilder returnType
+ ):
+ uses.addAll(findVariableUsesInType(variable, returnType));
+ if (typeVariables != null) {
+ for (TypeVariableBuilder dependentVariable in typeVariables) {
+ if (dependentVariable.bound != null) {
+ uses.addAll(
+ findVariableUsesInType(variable, dependentVariable.bound));
+ }
+ if (dependentVariable.defaultType != null) {
+ uses.addAll(findVariableUsesInType(
+ variable, dependentVariable.defaultType));
+ }
}
}
- }
- if (type.formals != null) {
- for (ParameterBuilder formal in type.formals!) {
- uses.addAll(findVariableUsesInType(variable, formal.type));
+ if (formals != null) {
+ for (ParameterBuilder formal in formals) {
+ uses.addAll(findVariableUsesInType(variable, formal.type));
+ }
}
- }
+ case RecordTypeBuilder(
+ :List<RecordTypeFieldBuilder>? positionalFields,
+ :List<RecordTypeFieldBuilder>? namedFields
+ ):
+ if (positionalFields != null) {
+ for (RecordTypeFieldBuilder field in positionalFields) {
+ uses.addAll(findVariableUsesInType(variable, field.type));
+ }
+ }
+ if (namedFields != null) {
+ for (RecordTypeFieldBuilder field in namedFields) {
+ uses.addAll(findVariableUsesInType(variable, field.type));
+ }
+ }
+ case FixedTypeBuilder():
+ case InvalidTypeBuilder():
+ case OmittedTypeBuilder():
+ case null:
}
return uses;
}
@@ -627,99 +759,127 @@
/// [findInboundReferences].
List<Object> findRawTypesWithInboundReferences(TypeBuilder? type) {
List<Object> typesAndDependencies = <Object>[];
- if (type is NamedTypeBuilder) {
- if (type.arguments == null) {
- TypeDeclarationBuilder? declaration = type.declaration;
- if (declaration is DillClassBuilder) {
- bool hasInbound = false;
- List<TypeParameter> typeParameters = declaration.cls.typeParameters;
- for (int i = 0; i < typeParameters.length && !hasInbound; ++i) {
- if (containsTypeVariable(
- typeParameters[i].bound, typeParameters.toSet())) {
- hasInbound = true;
+ switch (type) {
+ case NamedTypeBuilder(
+ :TypeDeclarationBuilder? declaration,
+ :List<TypeBuilder>? arguments
+ ):
+ if (arguments == null) {
+ if (declaration is DillClassBuilder) {
+ bool hasInbound = false;
+ List<TypeParameter> typeParameters = declaration.cls.typeParameters;
+ for (int i = 0; i < typeParameters.length && !hasInbound; ++i) {
+ if (containsTypeVariable(
+ typeParameters[i].bound, typeParameters.toSet())) {
+ hasInbound = true;
+ }
}
- }
- if (hasInbound) {
- typesAndDependencies.add(type);
- typesAndDependencies.add(const <Object>[]);
- }
- } else if (declaration is DillTypeAliasBuilder) {
- bool hasInbound = false;
- List<TypeParameter> typeParameters = declaration.typedef.typeParameters;
- for (int i = 0; i < typeParameters.length && !hasInbound; ++i) {
- if (containsTypeVariable(
- typeParameters[i].bound, typeParameters.toSet())) {
- hasInbound = true;
+ if (hasInbound) {
+ typesAndDependencies.add(type);
+ typesAndDependencies.add(const <Object>[]);
}
- }
- if (hasInbound) {
- typesAndDependencies.add(type);
- typesAndDependencies.add(const <Object>[]);
- }
- } else if (declaration is ClassBuilder &&
- declaration.typeVariables != null) {
- List<Object> dependencies =
- findInboundReferences(declaration.typeVariables!);
- if (dependencies.length != 0) {
- typesAndDependencies.add(type);
- typesAndDependencies.add(dependencies);
- }
- } else if (declaration is ExtensionTypeDeclarationBuilder &&
- declaration.typeParameters != null) {
- List<Object> dependencies =
- findInboundReferences(declaration.typeParameters!);
- if (dependencies.length != 0) {
- typesAndDependencies.add(type);
- typesAndDependencies.add(dependencies);
- }
- } else if (declaration is TypeAliasBuilder) {
- if (declaration.typeVariables != null) {
+ } else if (declaration is DillTypeAliasBuilder) {
+ bool hasInbound = false;
+ List<TypeParameter> typeParameters =
+ declaration.typedef.typeParameters;
+ for (int i = 0; i < typeParameters.length && !hasInbound; ++i) {
+ if (containsTypeVariable(
+ typeParameters[i].bound, typeParameters.toSet())) {
+ hasInbound = true;
+ }
+ }
+ if (hasInbound) {
+ typesAndDependencies.add(type);
+ typesAndDependencies.add(const <Object>[]);
+ }
+ } else if (declaration is ClassBuilder &&
+ declaration.typeVariables != null) {
List<Object> dependencies =
findInboundReferences(declaration.typeVariables!);
if (dependencies.length != 0) {
typesAndDependencies.add(type);
typesAndDependencies.add(dependencies);
}
- }
- if (declaration.type is FunctionTypeBuilder) {
- FunctionTypeBuilder type = declaration.type as FunctionTypeBuilder;
- if (type.typeVariables != null) {
+ } else if (declaration is ExtensionTypeDeclarationBuilder &&
+ declaration.typeParameters != null) {
+ List<Object> dependencies =
+ findInboundReferences(declaration.typeParameters!);
+ if (dependencies.length != 0) {
+ typesAndDependencies.add(type);
+ typesAndDependencies.add(dependencies);
+ }
+ } else if (declaration is TypeAliasBuilder) {
+ if (declaration.typeVariables != null) {
List<Object> dependencies =
- findInboundReferences(type.typeVariables!);
+ findInboundReferences(declaration.typeVariables!);
if (dependencies.length != 0) {
typesAndDependencies.add(type);
typesAndDependencies.add(dependencies);
}
}
+ if (declaration.type is FunctionTypeBuilder) {
+ FunctionTypeBuilder type = declaration.type as FunctionTypeBuilder;
+ if (type.typeVariables != null) {
+ List<Object> dependencies =
+ findInboundReferences(type.typeVariables!);
+ if (dependencies.length != 0) {
+ typesAndDependencies.add(type);
+ typesAndDependencies.add(dependencies);
+ }
+ }
+ }
}
- }
- } else {
- for (TypeBuilder argument in type.arguments!) {
- typesAndDependencies
- .addAll(findRawTypesWithInboundReferences(argument));
- }
- }
- } else if (type is FunctionTypeBuilder) {
- typesAndDependencies
- .addAll(findRawTypesWithInboundReferences(type.returnType));
- if (type.typeVariables != null) {
- for (TypeVariableBuilder variable in type.typeVariables!) {
- if (variable.bound != null) {
+ } else {
+ for (TypeBuilder argument in arguments) {
typesAndDependencies
- .addAll(findRawTypesWithInboundReferences(variable.bound));
+ .addAll(findRawTypesWithInboundReferences(argument));
}
- if (variable.defaultType != null) {
+ }
+ case FunctionTypeBuilder(
+ :List<TypeVariableBuilder>? typeVariables,
+ :List<ParameterBuilder>? formals,
+ :TypeBuilder returnType
+ ):
+ typesAndDependencies
+ .addAll(findRawTypesWithInboundReferences(returnType));
+ if (typeVariables != null) {
+ for (TypeVariableBuilder variable in typeVariables) {
+ if (variable.bound != null) {
+ typesAndDependencies
+ .addAll(findRawTypesWithInboundReferences(variable.bound));
+ }
+ if (variable.defaultType != null) {
+ typesAndDependencies.addAll(
+ findRawTypesWithInboundReferences(variable.defaultType));
+ }
+ }
+ }
+ if (formals != null) {
+ for (ParameterBuilder formal in formals) {
typesAndDependencies
- .addAll(findRawTypesWithInboundReferences(variable.defaultType));
+ .addAll(findRawTypesWithInboundReferences(formal.type));
}
}
- }
- if (type.formals != null) {
- for (ParameterBuilder formal in type.formals!) {
- typesAndDependencies
- .addAll(findRawTypesWithInboundReferences(formal.type));
+ case RecordTypeBuilder(
+ :List<RecordTypeFieldBuilder>? positionalFields,
+ :List<RecordTypeFieldBuilder>? namedFields
+ ):
+ if (positionalFields != null) {
+ for (RecordTypeFieldBuilder field in positionalFields) {
+ typesAndDependencies
+ .addAll(findRawTypesWithInboundReferences(field.type));
+ }
}
- }
+ if (namedFields != null) {
+ for (RecordTypeFieldBuilder field in namedFields) {
+ typesAndDependencies
+ .addAll(findRawTypesWithInboundReferences(field.type));
+ }
+ }
+ case FixedTypeBuilder():
+ case InvalidTypeBuilder():
+ case OmittedTypeBuilder():
+ case null:
}
return typesAndDependencies;
}
@@ -812,80 +972,110 @@
visited ??= new Set<TypeDeclarationBuilder>.identity();
List<List<RawTypeCycleElement>> paths = <List<RawTypeCycleElement>>[];
- if (start is NamedTypeBuilder) {
- void visitTypeVariables(List<TypeVariableBuilder>? typeVariables) {
- if (typeVariables == null) return;
+ switch (start) {
+ case NamedTypeBuilder(
+ :TypeDeclarationBuilder? declaration,
+ :List<TypeBuilder>? arguments
+ ):
+ void visitTypeVariables(List<TypeVariableBuilder>? typeVariables) {
+ if (typeVariables == null) return;
- for (TypeVariableBuilder variable in typeVariables) {
- if (variable.bound != null) {
- for (List<RawTypeCycleElement> path
- in findRawTypePathsToDeclaration(variable.bound, end, visited)) {
- if (path.isNotEmpty) {
- paths.add(<RawTypeCycleElement>[
- new RawTypeCycleElement(start, null)
- ]..addAll(path..first.typeVariable = variable));
+ for (TypeVariableBuilder variable in typeVariables) {
+ if (variable.bound != null) {
+ for (List<RawTypeCycleElement> path
+ in findRawTypePathsToDeclaration(
+ variable.bound, end, visited)) {
+ if (path.isNotEmpty) {
+ paths.add(<RawTypeCycleElement>[
+ new RawTypeCycleElement(start, null)
+ ]..addAll(path..first.typeVariable = variable));
+ }
}
}
}
}
- }
- if (start.arguments == null) {
- TypeDeclarationBuilder? declaration = start.declaration;
- if (declaration == end) {
- paths.add(<RawTypeCycleElement>[new RawTypeCycleElement(start, null)]);
- } else if (visited.add(start.declaration!)) {
- if (declaration is ClassBuilder) {
- visitTypeVariables(declaration.typeVariables);
- } else if (declaration is TypeAliasBuilder) {
- visitTypeVariables(declaration.typeVariables);
- if (declaration.type is FunctionTypeBuilder) {
- FunctionTypeBuilder type = declaration.type as FunctionTypeBuilder;
- visitTypeVariables(type.typeVariables);
+ if (arguments == null) {
+ if (declaration == end) {
+ paths
+ .add(<RawTypeCycleElement>[new RawTypeCycleElement(start, null)]);
+ } else if (visited.add(start.declaration!)) {
+ if (declaration is ClassBuilder) {
+ visitTypeVariables(declaration.typeVariables);
+ } else if (declaration is TypeAliasBuilder) {
+ visitTypeVariables(declaration.typeVariables);
+ if (declaration.type is FunctionTypeBuilder) {
+ FunctionTypeBuilder type =
+ declaration.type as FunctionTypeBuilder;
+ visitTypeVariables(type.typeVariables);
+ }
+ } else if (declaration is ExtensionBuilder) {
+ visitTypeVariables(declaration.typeParameters);
+ } else if (declaration is ExtensionTypeDeclarationBuilder) {
+ visitTypeVariables(declaration.typeParameters);
+ } else if (declaration is TypeVariableBuilder) {
+ // Do nothing. The type variable is handled by its parent
+ // declaration.
+ } else if (declaration is BuiltinTypeDeclarationBuilder) {
+ // Do nothing.
+ } else if (declaration is InvalidTypeDeclarationBuilder) {
+ // Do nothing.
+ } else {
+ unhandled(
+ '$declaration (${declaration.runtimeType})',
+ 'findRawTypePathsToDeclaration',
+ declaration?.charOffset ?? -1,
+ declaration?.fileUri);
}
- } else if (declaration is ExtensionBuilder) {
- visitTypeVariables(declaration.typeParameters);
- } else if (declaration is ExtensionTypeDeclarationBuilder) {
- visitTypeVariables(declaration.typeParameters);
- } else if (declaration is TypeVariableBuilder) {
- // Do nothing. The type variable is handled by its parent declaration.
- } else if (declaration is BuiltinTypeDeclarationBuilder) {
- // Do nothing.
- } else if (declaration is InvalidTypeDeclarationBuilder) {
- // Do nothing.
- } else {
- unhandled(
- '$declaration (${declaration.runtimeType})',
- 'findRawTypePathsToDeclaration',
- declaration?.charOffset ?? -1,
- declaration?.fileUri);
+ visited.remove(declaration);
}
- visited.remove(declaration);
- }
- } else {
- for (TypeBuilder argument in start.arguments!) {
- paths.addAll(findRawTypePathsToDeclaration(argument, end, visited));
- }
- }
- } else if (start is FunctionTypeBuilder) {
- paths.addAll(findRawTypePathsToDeclaration(start.returnType, end, visited));
- if (start.typeVariables != null) {
- for (TypeVariableBuilder variable in start.typeVariables!) {
- if (variable.bound != null) {
- paths.addAll(
- findRawTypePathsToDeclaration(variable.bound, end, visited));
- }
- if (variable.defaultType != null) {
- paths.addAll(findRawTypePathsToDeclaration(
- variable.defaultType, end, visited));
+ } else {
+ for (TypeBuilder argument in arguments) {
+ paths.addAll(findRawTypePathsToDeclaration(argument, end, visited));
}
}
- }
- if (start.formals != null) {
- for (ParameterBuilder formal in start.formals!) {
- paths.addAll(findRawTypePathsToDeclaration(formal.type, end, visited));
+ case FunctionTypeBuilder(
+ :List<TypeVariableBuilder>? typeVariables,
+ :List<ParameterBuilder>? formals,
+ :TypeBuilder returnType
+ ):
+ paths.addAll(findRawTypePathsToDeclaration(returnType, end, visited));
+ if (typeVariables != null) {
+ for (TypeVariableBuilder variable in typeVariables) {
+ if (variable.bound != null) {
+ paths.addAll(
+ findRawTypePathsToDeclaration(variable.bound, end, visited));
+ }
+ if (variable.defaultType != null) {
+ paths.addAll(findRawTypePathsToDeclaration(
+ variable.defaultType, end, visited));
+ }
+ }
}
- }
+ if (formals != null) {
+ for (ParameterBuilder formal in formals) {
+ paths
+ .addAll(findRawTypePathsToDeclaration(formal.type, end, visited));
+ }
+ }
+ case RecordTypeBuilder(
+ :List<RecordTypeFieldBuilder>? positionalFields,
+ :List<RecordTypeFieldBuilder>? namedFields
+ ):
+ if (positionalFields != null) {
+ for (RecordTypeFieldBuilder field in positionalFields) {
+ paths.addAll(findRawTypePathsToDeclaration(field.type, end, visited));
+ }
+ }
+ if (namedFields != null) {
+ for (RecordTypeFieldBuilder field in namedFields) {
+ paths.addAll(findRawTypePathsToDeclaration(field.type, end, visited));
+ }
+ }
+ case FixedTypeBuilder():
+ case InvalidTypeBuilder():
+ case OmittedTypeBuilder():
+ case null:
}
return paths;
}
@@ -1086,66 +1276,51 @@
/// Finds generic function type sub-terms in [type].
void findUnaliasedGenericFunctionTypes(TypeBuilder? type,
{required List<FunctionTypeBuilder> result}) {
- if (type is FunctionTypeBuilder) {
- if (type.typeVariables != null && type.typeVariables!.length > 0) {
- result.add(type);
-
- for (TypeVariableBuilder typeVariable in type.typeVariables!) {
- findUnaliasedGenericFunctionTypes(typeVariable.bound, result: result);
- findUnaliasedGenericFunctionTypes(typeVariable.defaultType,
- result: result);
- }
- }
- findUnaliasedGenericFunctionTypes(type.returnType, result: result);
- if (type.formals != null) {
- for (ParameterBuilder formal in type.formals!) {
- findUnaliasedGenericFunctionTypes(formal.type, result: result);
- }
- }
- } else if (type is NamedTypeBuilder) {
- if (type.arguments != null) {
- for (TypeBuilder argument in type.arguments!) {
- findUnaliasedGenericFunctionTypes(argument, result: result);
- }
- }
- }
-}
-
-/// Finds generic function type sub-terms in [type] including the aliased ones.
-void findGenericFunctionTypes(TypeBuilder? type,
- {required List<TypeBuilder> result}) {
- if (type is FunctionTypeBuilder) {
- if (type.typeVariables != null && type.typeVariables!.length > 0) {
- result.add(type);
-
- for (TypeVariableBuilder typeVariable in type.typeVariables!) {
- findGenericFunctionTypes(typeVariable.bound, result: result);
- findGenericFunctionTypes(typeVariable.defaultType, result: result);
- }
- }
- findGenericFunctionTypes(type.returnType, result: result);
- if (type.formals != null) {
- for (ParameterBuilder formal in type.formals!) {
- findGenericFunctionTypes(formal.type, result: result);
- }
- }
- } else if (type is NamedTypeBuilder) {
- if (type.arguments != null) {
- for (TypeBuilder argument in type.arguments!) {
- findGenericFunctionTypes(argument, result: result);
- }
- }
-
- TypeDeclarationBuilder? declaration = type.declaration;
- // TODO(cstefantsova): Unalias beyond the first layer for the check.
- if (declaration is TypeAliasBuilder) {
- TypeBuilder? rhsType = declaration.type;
- if (rhsType is FunctionTypeBuilder &&
- rhsType.typeVariables != null &&
- rhsType.typeVariables!.isNotEmpty) {
+ switch (type) {
+ case FunctionTypeBuilder(
+ :List<TypeVariableBuilder>? typeVariables,
+ :List<ParameterBuilder>? formals,
+ :TypeBuilder returnType
+ ):
+ if (typeVariables != null && typeVariables.length > 0) {
result.add(type);
+
+ for (TypeVariableBuilder typeVariable in typeVariables) {
+ findUnaliasedGenericFunctionTypes(typeVariable.bound, result: result);
+ findUnaliasedGenericFunctionTypes(typeVariable.defaultType,
+ result: result);
+ }
}
- }
+ findUnaliasedGenericFunctionTypes(returnType, result: result);
+ if (formals != null) {
+ for (ParameterBuilder formal in formals) {
+ findUnaliasedGenericFunctionTypes(formal.type, result: result);
+ }
+ }
+ case NamedTypeBuilder(:List<TypeBuilder>? arguments):
+ if (arguments != null) {
+ for (TypeBuilder argument in arguments) {
+ findUnaliasedGenericFunctionTypes(argument, result: result);
+ }
+ }
+ case RecordTypeBuilder(
+ :List<RecordTypeFieldBuilder>? positionalFields,
+ :List<RecordTypeFieldBuilder>? namedFields
+ ):
+ if (positionalFields != null) {
+ for (RecordTypeFieldBuilder field in positionalFields) {
+ findUnaliasedGenericFunctionTypes(field.type, result: result);
+ }
+ }
+ if (namedFields != null) {
+ for (RecordTypeFieldBuilder field in namedFields) {
+ findUnaliasedGenericFunctionTypes(field.type, result: result);
+ }
+ }
+ case FixedTypeBuilder():
+ case InvalidTypeBuilder():
+ case OmittedTypeBuilder():
+ case null:
}
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart b/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart
index 5b66ae0..5311736 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart
@@ -63,33 +63,33 @@
@override
TypeBuilder visitInvalidType(InvalidType node) {
- return new FixedTypeBuilder(
+ return new FixedTypeBuilderImpl(
node, /* fileUri = */ null, /* charOffset = */ null);
}
@override
TypeBuilder visitDynamicType(DynamicType node) {
// 'dynamic' is always nullable.
- return new NamedTypeBuilder.forDartType(
+ return new NamedTypeBuilderImpl.forDartType(
node, dynamicDeclaration, const NullabilityBuilder.inherent());
}
@override
TypeBuilder visitVoidType(VoidType node) {
// 'void' is always nullable.
- return new NamedTypeBuilder.forDartType(
+ return new NamedTypeBuilderImpl.forDartType(
node, voidDeclaration, const NullabilityBuilder.inherent());
}
@override
TypeBuilder visitNeverType(NeverType node) {
- return new NamedTypeBuilder.forDartType(node, neverDeclaration,
+ return new NamedTypeBuilderImpl.forDartType(node, neverDeclaration,
new NullabilityBuilder.fromNullability(node.nullability));
}
@override
TypeBuilder visitNullType(NullType node) {
- return new NamedTypeBuilder.forDartType(
+ return new NamedTypeBuilderImpl.forDartType(
node, nullDeclaration, const NullabilityBuilder.inherent());
}
@@ -104,7 +104,7 @@
kernelArguments.length, (int i) => kernelArguments[i].accept(this),
growable: false);
}
- return new NamedTypeBuilder.forDartType(
+ return new NamedTypeBuilderImpl.forDartType(
node, cls, new NullabilityBuilder.fromNullability(node.nullability),
arguments: arguments);
}
@@ -121,7 +121,7 @@
kernelArguments.length, (int i) => kernelArguments[i].accept(this),
growable: false);
}
- return new NamedTypeBuilder.forDartType(node, extensionTypeDeclaration,
+ return new NamedTypeBuilderImpl.forDartType(node, extensionTypeDeclaration,
new NullabilityBuilder.fromNullability(node.nullability),
arguments: arguments);
}
@@ -129,7 +129,7 @@
@override
TypeBuilder visitFutureOrType(FutureOrType node) {
TypeBuilder argument = node.typeArgument.accept(this);
- return new NamedTypeBuilder.forDartType(node, futureOrDeclaration,
+ return new NamedTypeBuilderImpl.forDartType(node, futureOrDeclaration,
new NullabilityBuilder.fromNullability(node.nullability),
arguments: [argument]);
}
@@ -164,7 +164,7 @@
new FunctionTypeParameterBuilder(
/* metadata = */ null, kind, type, parameter.name);
}
- return new FunctionTypeBuilder(
+ return new FunctionTypeBuilderImpl(
returnType,
typeVariables,
formals,
@@ -185,7 +185,7 @@
}
LibraryBuilder library =
loader.lookupLibraryBuilder(kernelLibrary!.importUri)!;
- return new NamedTypeBuilder.fromTypeDeclarationBuilder(
+ return new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
new TypeVariableBuilder.fromKernel(parameter, library),
new NullabilityBuilder.fromNullability(node.nullability),
instanceTypeVariableAccess: InstanceTypeVariableAccessState.Allowed,
@@ -224,7 +224,7 @@
growable: false);
}
- return new RecordTypeBuilder(
+ return new RecordTypeBuilderImpl(
positionalBuilders,
namedBuilders,
new NullabilityBuilder.fromNullability(node.nullability),
diff --git a/pkg/front_end/lib/src/fasta/kernel/utils.dart b/pkg/front_end/lib/src/fasta/kernel/utils.dart
index a841767..8cf4400 100644
--- a/pkg/front_end/lib/src/fasta/kernel/utils.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/utils.dart
@@ -242,7 +242,7 @@
new CombinatorBuilder(false, {}, -1, dummyUri);
final MetadataBuilder dummyMetadataBuilder = new MetadataBuilder(dummyToken);
final TypeBuilder dummyTypeBuilder =
- new FixedTypeBuilder(dummyDartType, dummyUri, -1);
+ new FixedTypeBuilderImpl(dummyDartType, dummyUri, -1);
final FormalParameterBuilder dummyFormalParameterBuilder =
new FormalParameterBuilder(null, FormalParameterKind.requiredPositional, 0,
const ImplicitTypeBuilder(), '', null, -1,
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index ec09839..23e32ea 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -26,7 +26,6 @@
import '../builder/declaration_builder.dart';
import '../builder/extension_builder.dart';
import '../builder/formal_parameter_builder.dart';
-import '../builder/function_type_builder.dart';
import '../builder/metadata_builder.dart';
import '../builder/modifier_builder.dart';
import '../builder/type_builder.dart';
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 5410993..f846f8e 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -29,7 +29,6 @@
import '../builder/constructor_reference_builder.dart';
import '../builder/fixed_type_builder.dart';
import '../builder/formal_parameter_builder.dart';
-import '../builder/function_type_builder.dart';
import '../builder/invalid_type_builder.dart';
import '../builder/invalid_type_declaration_builder.dart';
import '../builder/metadata_builder.dart';
@@ -1474,7 +1473,7 @@
Object? onType = pop();
if (onType is ParserRecovery) {
ParserRecovery parserRecovery = onType;
- onType = new FixedTypeBuilder(
+ onType = new FixedTypeBuilderImpl(
const InvalidType(), uri, parserRecovery.charOffset);
}
List<TypeVariableBuilder>? typeVariables =
@@ -1942,7 +1941,7 @@
substitution = {};
for (int i = 0; i < synthesizedTypeVariables.length; i++) {
substitution[enclosingDeclarationScopeBuilder.typeVariables![i]] =
- new NamedTypeBuilder.fromTypeDeclarationBuilder(
+ new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
synthesizedTypeVariables[i], const NullabilityBuilder.omitted(),
instanceTypeVariableAccess:
declarationContext.instanceTypeVariableAccessState);
@@ -2139,7 +2138,7 @@
? new List<TypeBuilder>.generate(
declaration.typeVariables!.length,
(int index) =>
- new NamedTypeBuilder.fromTypeDeclarationBuilder(
+ new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
typeVariables![index],
const NullabilityBuilder.omitted(),
instanceTypeVariableAccess:
@@ -2907,7 +2906,7 @@
const FixedNullableList<RecordTypeFieldBuilder>().popNonNullable(stack,
hasNamedFields ? count - 1 : count, dummyRecordTypeFieldBuilder);
- push(new RecordTypeBuilder(
+ push(new RecordTypeBuilderImpl(
positionalFields,
namedFields,
questionMark != null
@@ -2942,7 +2941,7 @@
push(new RecordTypeFieldBuilder(
metadata,
type is ParserRecovery
- ? new InvalidTypeBuilder(uri, type.charOffset)
+ ? new InvalidTypeBuilderImpl(uri, type.charOffset)
: type as TypeBuilder,
name is String ? name : null,
name is String ? nameOffset : -1));
@@ -3062,7 +3061,7 @@
// elsewhere.
addProblem(
messageTypedefNullableType, equals.charOffset, equals.length);
- aliasedType = new NamedTypeBuilder.fromTypeDeclarationBuilder(
+ aliasedType = new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
new InvalidTypeDeclarationBuilder(
"${name}",
messageTypedefNullableType.withLocation(
@@ -3083,7 +3082,7 @@
aliasedType = type;
} else {
addProblem(messageTypedefNotType, equals.charOffset, equals.length);
- aliasedType = new NamedTypeBuilder.fromTypeDeclarationBuilder(
+ aliasedType = new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
new InvalidTypeDeclarationBuilder(
"${name}",
messageTypedefNotType.withLocation(
@@ -3098,7 +3097,7 @@
if (type is TypeBuilder) {
addProblem(
messageTypedefNotFunction, equals.charOffset, equals.length);
- aliasedType = new NamedTypeBuilder.fromTypeDeclarationBuilder(
+ aliasedType = new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
new InvalidTypeDeclarationBuilder(
"${name}",
messageTypedefNotFunction.withLocation(
@@ -3108,7 +3107,7 @@
InstanceTypeVariableAccessState.Allowed);
} else {
addProblem(messageTypedefNotType, equals.charOffset, equals.length);
- aliasedType = new NamedTypeBuilder.fromTypeDeclarationBuilder(
+ aliasedType = new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
new InvalidTypeDeclarationBuilder(
"${name}",
messageTypedefNotType.withLocation(
@@ -3406,7 +3405,7 @@
: templateCycleInTypeVariables.withArguments(
builder.name, via.join("', '"));
addProblem(message, builder.charOffset, builder.name.length);
- builder.bound = new NamedTypeBuilder(
+ builder.bound = new NamedTypeBuilderImpl(
builder.name, const NullabilityBuilder.omitted(),
fileUri: uri,
charOffset: builder.charOffset,
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 0476825..c758760 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -977,7 +977,7 @@
}
}
if (message != null) {
- return new NamedTypeBuilder(
+ return new NamedTypeBuilderImpl(
supertype.name as String, const NullabilityBuilder.omitted(),
fileUri: fileUri,
charOffset: charOffset,
diff --git a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
index c92af93..40d5336 100644
--- a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
@@ -15,7 +15,6 @@
import '../builder/formal_parameter_builder.dart';
import '../builder/member_builder.dart';
import '../builder/metadata_builder.dart';
-import '../builder/named_type_builder.dart';
import '../builder/omitted_type_builder.dart';
import '../builder/type_alias_builder.dart';
import '../builder/type_builder.dart';
diff --git a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
index 5de9170..f963df5 100644
--- a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
@@ -151,7 +151,7 @@
// TODO(ahe): These types shouldn't be looked up in scope, they come
// directly from dart:core.
- NamedTypeBuilder intType = new NamedTypeBuilder(
+ NamedTypeBuilder intType = new NamedTypeBuilderImpl(
"int", const NullabilityBuilder.omitted(),
instanceTypeVariableAccess:
// If "int" resolves to an instance type variable then that we would
@@ -164,13 +164,13 @@
// enhanced enums feature where enums can actually declare type
// variables.
InstanceTypeVariableAccessState.Unexpected);
- NamedTypeBuilder stringType = new NamedTypeBuilder(
+ NamedTypeBuilder stringType = new NamedTypeBuilderImpl(
"String", const NullabilityBuilder.omitted(),
instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
- NamedTypeBuilder objectType = new NamedTypeBuilder(
+ NamedTypeBuilder objectType = new NamedTypeBuilderImpl(
"Object", const NullabilityBuilder.omitted(),
instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
- supertypeBuilder ??= new NamedTypeBuilder(
+ supertypeBuilder ??= new NamedTypeBuilderImpl(
"_Enum", const NullabilityBuilder.omitted(),
instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
Class cls = new Class(
@@ -183,12 +183,12 @@
Map<String, MemberBuilder> setters = <String, MemberBuilder>{};
Map<String, MemberBuilder> constructors = <String, MemberBuilder>{};
List<SourceFieldBuilder> elementBuilders = <SourceFieldBuilder>[];
- NamedTypeBuilder selfType = new NamedTypeBuilder(
+ NamedTypeBuilder selfType = new NamedTypeBuilderImpl(
name, const NullabilityBuilder.omitted(),
instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected,
fileUri: fileUri,
charOffset: charOffset);
- NamedTypeBuilder listType = new NamedTypeBuilder(
+ NamedTypeBuilder listType = new NamedTypeBuilderImpl(
"List", const NullabilityBuilder.omitted(),
arguments: <TypeBuilder>[selfType],
instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
diff --git a/pkg/front_end/lib/src/fasta/source/source_extension_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/source/source_extension_type_declaration_builder.dart
index 8d68d9f..6b6f432 100644
--- a/pkg/front_end/lib/src/fasta/source/source_extension_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_extension_type_declaration_builder.dart
@@ -2,7 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'package:front_end/src/fasta/builder/function_type_builder.dart';
import 'package:front_end/src/fasta/builder/record_type_builder.dart';
import 'package:front_end/src/fasta/kernel/body_builder_context.dart';
import 'package:kernel/ast.dart';
@@ -20,7 +19,6 @@
import '../builder/member_builder.dart';
import '../builder/metadata_builder.dart';
import '../builder/name_iterator.dart';
-import '../builder/named_type_builder.dart';
import '../builder/type_alias_builder.dart';
import '../builder/type_builder.dart';
import '../builder/type_declaration_builder.dart';
@@ -275,111 +273,119 @@
// We allow creating new type variables during unaliasing. This type
// variables are short-lived and therefore don't need to be bound.
unboundTypeVariables: []);
- if (unaliased is NamedTypeBuilder) {
- TypeDeclarationBuilder? declaration = unaliased.declaration;
- if (declaration is ExtensionTypeDeclarationBuilder) {
- if (!seenExtensionTypeDeclarations.add(declaration)) {
- List<LocatedMessage> context = [];
- for (ExtensionTypeDeclarationBuilder extensionTypeDeclarationBuilder
- in seenExtensionTypeDeclarations) {
- if (extensionTypeDeclarationBuilder != this) {
- context.add(messageExtensionTypeDeclarationCause.withLocation(
- extensionTypeDeclarationBuilder.fileUri,
- extensionTypeDeclarationBuilder.charOffset,
- extensionTypeDeclarationBuilder.name.length));
+ switch (unaliased) {
+ case NamedTypeBuilder(
+ :TypeDeclarationBuilder? declaration,
+ :List<TypeBuilder>? arguments
+ ):
+ if (declaration is ExtensionTypeDeclarationBuilder) {
+ if (!seenExtensionTypeDeclarations.add(declaration)) {
+ List<LocatedMessage> context = [];
+ for (ExtensionTypeDeclarationBuilder extensionTypeDeclarationBuilder
+ in seenExtensionTypeDeclarations) {
+ if (extensionTypeDeclarationBuilder != this) {
+ context.add(messageExtensionTypeDeclarationCause.withLocation(
+ extensionTypeDeclarationBuilder.fileUri,
+ extensionTypeDeclarationBuilder.charOffset,
+ extensionTypeDeclarationBuilder.name.length));
+ }
+ }
+ for (TypeAliasBuilder typeAliasBuilder in usedTypeAliasBuilders) {
+ context.add(messageTypedefCause.withLocation(
+ typeAliasBuilder.fileUri,
+ typeAliasBuilder.charOffset,
+ typeAliasBuilder.name.length));
+ }
+ libraryBuilder.addProblem(
+ messageCyclicRepresentationDependency,
+ representationFieldBuilder!.type.charOffset!,
+ noLength,
+ representationFieldBuilder!.type.fileUri,
+ context: context);
+ return true;
+ } else {
+ TypeBuilder? representationTypeBuilder =
+ declaration.declaredRepresentationTypeBuilder;
+ if (representationTypeBuilder != null) {
+ if (_checkRepresentationDependency(
+ representationTypeBuilder,
+ seenExtensionTypeDeclarations.toSet(),
+ usedTypeAliasBuilders.toSet())) {
+ return true;
+ }
}
}
- for (TypeAliasBuilder typeAliasBuilder in usedTypeAliasBuilders) {
- context.add(messageTypedefCause.withLocation(
- typeAliasBuilder.fileUri,
- typeAliasBuilder.charOffset,
- typeAliasBuilder.name.length));
- }
- libraryBuilder.addProblem(
- messageCyclicRepresentationDependency,
- representationFieldBuilder!.type.charOffset!,
- noLength,
- representationFieldBuilder!.type.fileUri,
- context: context);
- return true;
- } else {
- TypeBuilder? representationTypeBuilder =
- declaration.declaredRepresentationTypeBuilder;
- if (representationTypeBuilder != null) {
+ }
+ if (arguments != null) {
+ for (TypeBuilder typeArgument in arguments) {
if (_checkRepresentationDependency(
- representationTypeBuilder,
+ typeArgument,
seenExtensionTypeDeclarations.toSet(),
usedTypeAliasBuilders.toSet())) {
return true;
}
}
}
- }
- List<TypeBuilder>? typeArguments = unaliased.arguments;
- if (typeArguments != null) {
- for (TypeBuilder typeArgument in typeArguments) {
- if (_checkRepresentationDependency(
- typeArgument,
- seenExtensionTypeDeclarations.toSet(),
- usedTypeAliasBuilders.toSet())) {
- return true;
+ case FunctionTypeBuilder(
+ :List<TypeVariableBuilder>? typeVariables,
+ :List<ParameterBuilder>? formals,
+ :TypeBuilder returnType
+ ):
+ if (_checkRepresentationDependency(
+ returnType,
+ seenExtensionTypeDeclarations.toSet(),
+ usedTypeAliasBuilders.toSet())) {
+ return true;
+ }
+ if (formals != null) {
+ for (ParameterBuilder formal in formals) {
+ if (_checkRepresentationDependency(
+ formal.type,
+ seenExtensionTypeDeclarations.toSet(),
+ usedTypeAliasBuilders.toSet())) {
+ return true;
+ }
}
}
- }
- } else if (unaliased is FunctionTypeBuilder) {
- if (_checkRepresentationDependency(
- unaliased.returnType,
- seenExtensionTypeDeclarations.toSet(),
- usedTypeAliasBuilders.toSet())) {
- return true;
- }
- List<ParameterBuilder>? formals = unaliased.formals;
- if (formals != null) {
- for (ParameterBuilder formal in formals) {
- if (_checkRepresentationDependency(
- formal.type,
- seenExtensionTypeDeclarations.toSet(),
- usedTypeAliasBuilders.toSet())) {
- return true;
+ if (typeVariables != null) {
+ for (TypeVariableBuilder typeVariable in typeVariables) {
+ TypeBuilder? bound = typeVariable.bound;
+ if (_checkRepresentationDependency(
+ bound,
+ seenExtensionTypeDeclarations.toSet(),
+ usedTypeAliasBuilders.toSet())) {
+ return true;
+ }
}
}
- }
- List<TypeVariableBuilder>? typeVariables = unaliased.typeVariables;
- if (typeVariables != null) {
- for (TypeVariableBuilder typeVariable in typeVariables) {
- TypeBuilder? bound = typeVariable.bound;
- if (_checkRepresentationDependency(
- bound,
- seenExtensionTypeDeclarations.toSet(),
- usedTypeAliasBuilders.toSet())) {
- return true;
+ case RecordTypeBuilder(
+ :List<RecordTypeFieldBuilder>? positionalFields,
+ :List<RecordTypeFieldBuilder>? namedFields
+ ):
+ if (positionalFields != null) {
+ for (RecordTypeFieldBuilder field in positionalFields) {
+ if (_checkRepresentationDependency(
+ field.type,
+ seenExtensionTypeDeclarations.toSet(),
+ usedTypeAliasBuilders.toSet())) {
+ return true;
+ }
}
}
- }
- } else if (unaliased is RecordTypeBuilder) {
- List<RecordTypeFieldBuilder>? positionalFields =
- unaliased.positionalFields;
- if (positionalFields != null) {
- for (RecordTypeFieldBuilder field in positionalFields) {
- if (_checkRepresentationDependency(
- field.type,
- seenExtensionTypeDeclarations.toSet(),
- usedTypeAliasBuilders.toSet())) {
- return true;
+ if (namedFields != null) {
+ for (RecordTypeFieldBuilder field in namedFields) {
+ if (_checkRepresentationDependency(
+ field.type,
+ seenExtensionTypeDeclarations.toSet(),
+ usedTypeAliasBuilders.toSet())) {
+ return true;
+ }
}
}
- }
- List<RecordTypeFieldBuilder>? namedFields = unaliased.namedFields;
- if (namedFields != null) {
- for (RecordTypeFieldBuilder field in namedFields) {
- if (_checkRepresentationDependency(
- field.type,
- seenExtensionTypeDeclarations.toSet(),
- usedTypeAliasBuilders.toSet())) {
- return true;
- }
- }
- }
+ case OmittedTypeBuilder():
+ case FixedTypeBuilder():
+ case InvalidTypeBuilder():
+ case null:
}
return false;
}
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 4204f19..40a09e9 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -39,11 +39,10 @@
import '../builder/extension_builder.dart';
import '../builder/extension_type_declaration_builder.dart';
import '../builder/field_builder.dart';
-import '../builder/fixed_type_builder.dart';
import '../builder/formal_parameter_builder.dart';
import '../builder/function_builder.dart';
import '../builder/function_type_builder.dart';
-import '../builder/invalid_type_builder.dart';
+import '../builder/inferable_type_builder.dart';
import '../builder/invalid_type_declaration_builder.dart';
import '../builder/library_builder.dart';
import '../builder/member_builder.dart';
@@ -1557,7 +1556,7 @@
if (cls != objectClass) {
cls.supertype ??= objectClass.asRawSupertype;
declaration.supertypeBuilder ??=
- new NamedTypeBuilder.fromTypeDeclarationBuilder(
+ new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
objectClassBuilder, const NullabilityBuilder.omitted(),
instanceTypeVariableAccess:
InstanceTypeVariableAccessState.Unexpected);
@@ -1757,7 +1756,7 @@
return new DependentTypeBuilder(builder.omittedTypeBuilder);
}
}
- return registerUnresolvedNamedType(new NamedTypeBuilder(
+ return registerUnresolvedNamedType(new NamedTypeBuilderImpl(
name, nullabilityBuilder,
arguments: arguments,
fileUri: fileUri,
@@ -1772,7 +1771,7 @@
TypeBuilder addVoidType(int charOffset) {
// 'void' is always nullable.
- return new NamedTypeBuilder.fromTypeDeclarationBuilder(
+ return new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
new VoidTypeDeclarationBuilder(const VoidType(), this, charOffset),
const NullabilityBuilder.inherent(),
charOffset: charOffset,
@@ -2555,72 +2554,64 @@
/// Helper function that returns `true` if a type variable with a name
/// from [typeVariableNames] is referenced in [type].
bool usesTypeVariables(TypeBuilder? type) {
- if (type is NamedTypeBuilder) {
- if (type.declaration is TypeVariableBuilder) {
- return typeVariableNames!.contains(type.declaration!.name);
- }
+ switch (type) {
+ case NamedTypeBuilder(
+ :TypeDeclarationBuilder? declaration,
+ :List<TypeBuilder>? arguments
+ ):
+ if (declaration is TypeVariableBuilder) {
+ return typeVariableNames!.contains(declaration.name);
+ }
- List<TypeBuilder>? typeArguments = type.arguments;
- if (typeArguments != null && typeVariables != null) {
- for (TypeBuilder argument in typeArguments) {
- if (usesTypeVariables(argument)) {
- return true;
+ if (arguments != null && typeVariables != null) {
+ for (TypeBuilder argument in arguments) {
+ if (usesTypeVariables(argument)) {
+ return true;
+ }
}
}
- }
- } else if (type is FunctionTypeBuilder) {
- if (type.formals != null) {
- for (ParameterBuilder formal in type.formals!) {
- if (usesTypeVariables(formal.type)) {
- return true;
+ case FunctionTypeBuilder(
+ :List<ParameterBuilder>? formals,
+ :List<TypeVariableBuilder>? typeVariables
+ ):
+ if (formals != null) {
+ for (ParameterBuilder formal in formals) {
+ if (usesTypeVariables(formal.type)) {
+ return true;
+ }
}
}
- }
- List<TypeVariableBuilder>? typeVariables = type.typeVariables;
- if (typeVariables != null) {
- for (TypeVariableBuilder variable in typeVariables) {
- if (usesTypeVariables(variable.bound)) {
- return true;
+ if (typeVariables != null) {
+ for (TypeVariableBuilder variable in typeVariables) {
+ if (usesTypeVariables(variable.bound)) {
+ return true;
+ }
}
}
- }
- return usesTypeVariables(type.returnType);
- } else if (type is RecordTypeBuilder) {
- if (type.positionalFields != null) {
- for (RecordTypeFieldBuilder fieldBuilder
- in type.positionalFields!) {
- if (usesTypeVariables(fieldBuilder.type)) {
- return true;
+ return usesTypeVariables(type.returnType);
+ case RecordTypeBuilder(
+ :List<RecordTypeFieldBuilder>? positionalFields,
+ :List<RecordTypeFieldBuilder>? namedFields
+ ):
+ if (positionalFields != null) {
+ for (RecordTypeFieldBuilder fieldBuilder in positionalFields) {
+ if (usesTypeVariables(fieldBuilder.type)) {
+ return true;
+ }
}
}
- }
- if (type.namedFields != null) {
- for (RecordTypeFieldBuilder fieldBuilder in type.namedFields!) {
- if (usesTypeVariables(fieldBuilder.type)) {
- return true;
+ if (namedFields != null) {
+ for (RecordTypeFieldBuilder fieldBuilder in namedFields) {
+ if (usesTypeVariables(fieldBuilder.type)) {
+ return true;
+ }
}
}
- }
- } else if (type is DependentTypeBuilder) {
- return false;
- } else if (type is FixedTypeBuilder) {
- return false;
- } else if (type is ImplicitTypeBuilder) {
- return false;
- } else if (type is InferableTypeBuilder) {
- return false;
- } else if (type is InvalidTypeBuilder) {
- return false;
- } else if (type is OmittedTypeBuilder) {
- return false;
- } else if (type == null) {
- return false;
- } else {
- return unhandled(
- "${type.runtimeType}",
- "SourceLibraryBuilder._applyMixins.usesTypeVariables",
- type.charOffset ?? TreeNode.noOffset,
- type.fileUri ?? fileUri);
+ case FixedTypeBuilder():
+ case InvalidTypeBuilder():
+ case OmittedTypeBuilder():
+ case null:
+ return false;
}
return false;
}
@@ -2689,7 +2680,7 @@
applicationTypeArguments = <TypeBuilder>[];
for (TypeVariableBuilder typeVariable in typeVariables) {
applicationTypeArguments.add(
- new NamedTypeBuilder.fromTypeDeclarationBuilder(
+ new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
// The type variable types passed as arguments to the
// generic class representing the anonymous mixin
// application should refer back to the type variables of
@@ -3224,7 +3215,7 @@
TypeParameterScopeKind.extensionDeclaration) {
// Make the synthesized return type invalid for extensions.
String name = currentTypeParameterScopeBuilder.parent!.name;
- returnType = new NamedTypeBuilder.forInvalidType(
+ returnType = new NamedTypeBuilderImpl.forInvalidType(
currentTypeParameterScopeBuilder.parent!.name,
const NullabilityBuilder.omitted(),
messageExtensionDeclaresConstructor.withLocation(
@@ -3337,7 +3328,7 @@
TypeParameterScopeBuilder savedDeclaration =
currentTypeParameterScopeBuilder;
currentTypeParameterScopeBuilder = factoryDeclaration;
- if (returnType is NamedTypeBuilder && !typeVariables.isEmpty) {
+ if (returnType is NamedTypeBuilderImpl && !typeVariables.isEmpty) {
returnType.arguments =
new List<TypeBuilder>.generate(typeVariables.length, (int index) {
return addNamedType(
@@ -3486,7 +3477,7 @@
NullabilityBuilder nullabilityBuilder,
Uri fileUri,
int charOffset) {
- FunctionTypeBuilder builder = new FunctionTypeBuilder(returnType,
+ FunctionTypeBuilder builder = new FunctionTypeBuilderImpl(returnType,
typeVariables, formals, nullabilityBuilder, fileUri, charOffset);
checkTypeVariables(typeVariables, null);
if (typeVariables != null) {
@@ -3951,29 +3942,23 @@
return copy;
}
- int finishTypeVariables(ClassBuilder object, TypeBuilder dynamicType) {
- int count = 0;
-
+ /// Adds all [unboundTypeVariables] to [typeVariableBuilders], mapping them
+ /// to this library.
+ ///
+ /// This is used to compute the bounds of type variable while taking the
+ /// bound dependencies, which might span multiple libraries, into account.
+ void collectUnboundTypeVariables(
+ Map<TypeVariableBuilder, SourceLibraryBuilder> typeVariableBuilders) {
Iterable<SourceLibraryBuilder>? patches = this.patchLibraries;
if (patches != null) {
for (SourceLibraryBuilder patchLibrary in patches) {
- count += patchLibrary.finishTypeVariables(object, dynamicType);
+ patchLibrary.collectUnboundTypeVariables(typeVariableBuilders);
}
}
-
- count += unboundTypeVariables.length;
-
- // Ensure that type parameters are built after their dependencies by sorting
- // them topologically using references in bounds.
- for (TypeVariableBuilder builder
- in _sortTypeVariablesTopologically(unboundTypeVariables)) {
- builder.finish(this, object, dynamicType);
+ for (TypeVariableBuilder builder in unboundTypeVariables) {
+ typeVariableBuilders[builder] = this;
}
unboundTypeVariables.clear();
-
- processPendingNullabilities();
-
- return count;
}
/// Assigns nullabilities to types in [_pendingNullabilities].
@@ -3984,6 +3969,13 @@
/// may be bounds to some of the type parameters of other types from the input
/// list.
void processPendingNullabilities() {
+ Iterable<SourceLibraryBuilder>? patches = this.patchLibraries;
+ if (patches != null) {
+ for (SourceLibraryBuilder patchLibrary in patches) {
+ patchLibrary.processPendingNullabilities();
+ }
+ }
+
// The bounds of type parameters may be type-parameter types of other
// parameters from the same declaration. In this case we need to set the
// nullability for them first. To preserve the ordering, we implement a
@@ -5750,78 +5742,6 @@
}
}
-List<TypeVariableBuilder> _sortTypeVariablesTopologically(
- Iterable<TypeVariableBuilder> typeVariables) {
- Set<TypeVariableBuilder> unhandled = new Set<TypeVariableBuilder>.identity()
- ..addAll(typeVariables);
- List<TypeVariableBuilder> result = <TypeVariableBuilder>[];
- while (unhandled.isNotEmpty) {
- TypeVariableBuilder rootVariable = unhandled.first;
- unhandled.remove(rootVariable);
- if (rootVariable.bound != null) {
- _sortTypeVariablesTopologicallyFromRoot(
- rootVariable.bound!, unhandled, result);
- }
- result.add(rootVariable);
- }
- return result;
-}
-
-void _sortTypeVariablesTopologicallyFromRoot(TypeBuilder root,
- Set<TypeVariableBuilder> unhandled, List<TypeVariableBuilder> result) {
- List<TypeVariableBuilder>? typeVariables;
- List<TypeBuilder>? internalDependents;
-
- if (root is NamedTypeBuilder) {
- TypeDeclarationBuilder? declaration = root.declaration;
- if (declaration is ClassBuilder) {
- if (declaration.typeVariables != null &&
- declaration.typeVariables!.isNotEmpty) {
- typeVariables = declaration.typeVariables;
- }
- } else if (declaration is TypeAliasBuilder) {
- if (declaration.typeVariables != null &&
- declaration.typeVariables!.isNotEmpty) {
- typeVariables = declaration.typeVariables;
- }
- internalDependents = <TypeBuilder>[declaration.type];
- } else if (declaration is TypeVariableBuilder) {
- typeVariables = <TypeVariableBuilder>[declaration];
- }
- } else if (root is FunctionTypeBuilder) {
- if (root.typeVariables != null && root.typeVariables!.isNotEmpty) {
- typeVariables = root.typeVariables;
- }
- if (root.formals != null && root.formals!.isNotEmpty) {
- internalDependents = <TypeBuilder>[];
- for (ParameterBuilder formal in root.formals!) {
- internalDependents.add(formal.type);
- }
- }
- if (root.returnType is! OmittedTypeBuilder) {
- (internalDependents ??= <TypeBuilder>[]).add(root.returnType);
- }
- }
-
- if (typeVariables != null && typeVariables.isNotEmpty) {
- for (TypeVariableBuilder variable in typeVariables) {
- if (unhandled.contains(variable)) {
- unhandled.remove(variable);
- if (variable.bound != null) {
- _sortTypeVariablesTopologicallyFromRoot(
- variable.bound!, unhandled, result);
- }
- result.add(variable);
- }
- }
- }
- if (internalDependents != null && internalDependents.isNotEmpty) {
- for (TypeBuilder type in internalDependents) {
- _sortTypeVariablesTopologicallyFromRoot(type, unhandled, result);
- }
- }
-}
-
class PendingNullability {
final Uri fileUri;
final int charOffset;
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 5100d76..ccf6ceec 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -45,6 +45,7 @@
import '../builder/class_builder.dart';
import '../builder/extension_builder.dart';
import '../builder/extension_type_declaration_builder.dart';
+import '../builder/inferable_type_builder.dart';
import '../builder/invalid_type_declaration_builder.dart';
import '../builder/library_builder.dart';
import '../builder/member_builder.dart';
@@ -56,6 +57,7 @@
import '../builder/type_alias_builder.dart';
import '../builder/type_builder.dart';
import '../builder/type_declaration_builder.dart';
+import '../builder/type_variable_builder.dart';
import '../builder_graph.dart';
import '../denylisted_classes.dart'
show denylistedCoreClasses, denylistedTypedDataClasses;
@@ -1842,11 +1844,27 @@
void finishTypeVariables(Iterable<SourceLibraryBuilder> libraryBuilders,
ClassBuilder object, TypeBuilder dynamicType) {
- int count = 0;
+ Map<TypeVariableBuilder, SourceLibraryBuilder> unboundTypeVariableBuilders =
+ {};
for (SourceLibraryBuilder library in libraryBuilders) {
- count += library.finishTypeVariables(object, dynamicType);
+ library.collectUnboundTypeVariables(unboundTypeVariableBuilders);
}
- ticker.logMs("Resolved $count type-variable bounds");
+
+ // Ensure that type parameters are built after their dependencies by sorting
+ // them topologically using references in bounds.
+ List<TypeVariableBuilder> sortedTypeVariableBuilders =
+ sortTypeVariablesTopologically(unboundTypeVariableBuilders.keys);
+ for (TypeVariableBuilder builder in sortedTypeVariableBuilders) {
+ builder.finish(
+ unboundTypeVariableBuilders[builder]!, object, dynamicType);
+ }
+
+ for (SourceLibraryBuilder library in libraryBuilders) {
+ library.processPendingNullabilities();
+ }
+
+ ticker.logMs(
+ "Resolved ${sortedTypeVariableBuilders.length} type-variable bounds");
}
/// Computes variances of type parameters on typedefs in [libraryBuilders].
@@ -1973,7 +1991,7 @@
cls.supertype = null;
cls.mixedInType = null;
classBuilder.supertypeBuilder =
- new NamedTypeBuilder.fromTypeDeclarationBuilder(
+ new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
objectClass, const NullabilityBuilder.omitted(),
instanceTypeVariableAccess:
InstanceTypeVariableAccessState.Unexpected);
diff --git a/pkg/front_end/lib/src/testing/id_testing_utils.dart b/pkg/front_end/lib/src/testing/id_testing_utils.dart
index 14068bd..443c699 100644
--- a/pkg/front_end/lib/src/testing/id_testing_utils.dart
+++ b/pkg/front_end/lib/src/testing/id_testing_utils.dart
@@ -7,7 +7,6 @@
import '../fasta/builder/class_builder.dart';
import '../fasta/builder/library_builder.dart';
import '../fasta/builder/member_builder.dart';
-import '../fasta/builder/named_type_builder.dart';
import '../fasta/builder/type_builder.dart';
import '../fasta/builder/type_variable_builder.dart';
import '../fasta/builder/extension_builder.dart';
diff --git a/pkg/front_end/testcases/general/bounds_type_parameters.dart b/pkg/front_end/testcases/general/bounds_type_parameters.dart
index 1e78739..32c9cfc 100644
--- a/pkg/front_end/testcases/general/bounds_type_parameters.dart
+++ b/pkg/front_end/testcases/general/bounds_type_parameters.dart
@@ -10,6 +10,8 @@
class G<X extends Class<X>> {}
+class H<X extends (Class<X>, int)> {}
+
typedef Typedef1<
T1 extends F, // Error
T2 extends F<dynamic>, // Ok
@@ -26,7 +28,31 @@
S5 extends G<ConcreteClass>, // Ok
S6 extends G<Class<ConcreteClass>>, // Ok
S7 extends G<Object>, // Error
- S8 extends G<int> // Error
+ S8 extends G<int>, // Error
+ U1 extends (F, int), // Error
+ U2 extends (F<dynamic>, int), // Ok
+ U3 extends (F<Class>, int), // Ok
+ U4 extends (F<Class<dynamic>>, int), // Ok
+ U5 extends (F<ConcreteClass>, int), // Ok
+ U6 extends (F<Class<ConcreteClass>>, int), // Ok
+ U7 extends (F<Object>, int), // Error
+ U8 extends (F<int>, int), // Error
+ V1 extends ({G a, int b}), // Error
+ V2 extends ({G<dynamic> a, int b}), // Ok
+ V3 extends ({G<Class> a, int b}), // Ok
+ V4 extends ({G<Class<dynamic>> a, int b}), // Ok
+ V5 extends ({G<ConcreteClass> a, int b}), // Ok
+ V6 extends ({G<Class<ConcreteClass>> a, int b}), // Ok
+ V7 extends ({G<Object> a, int b}), // Error
+ V8 extends ({G<int> a, int b}), // Error
+ W1 extends H, // Error
+ W2 extends H<dynamic>, // Ok
+ W3 extends H<(Class, int)>, // Ok
+ W4 extends H<(Class<dynamic>, int)>, // Ok
+ W5 extends H<(ConcreteClass, int)>, // Ok
+ W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+ W7 extends H<(Object, int)>, // Error
+ W8 extends H<(int, int)> // Error
>
= void Function();
@@ -46,7 +72,31 @@
S5 extends G<ConcreteClass>, // Ok
S6 extends G<Class<ConcreteClass>>, // Ok
S7 extends G<Object>, // Error
- S8 extends G<int> // Error
+ S8 extends G<int>, // Error
+ U1 extends (F, int), // Error
+ U2 extends (F<dynamic>, int), // Ok
+ U3 extends (F<Class>, int), // Ok
+ U4 extends (F<Class<dynamic>>, int), // Ok
+ U5 extends (F<ConcreteClass>, int), // Ok
+ U6 extends (F<Class<ConcreteClass>>, int), // Ok
+ U7 extends (F<Object>, int), // Error
+ U8 extends (F<int>, int), // Error
+ V1 extends ({G a, int b}), // Error
+ V2 extends ({G<dynamic> a, int b}), // Ok
+ V3 extends ({G<Class> a, int b}), // Ok
+ V4 extends ({G<Class<dynamic>> a, int b}), // Ok
+ V5 extends ({G<ConcreteClass> a, int b}), // Ok
+ V6 extends ({G<Class<ConcreteClass>> a, int b}), // Ok
+ V7 extends ({G<Object> a, int b}), // Error
+ V8 extends ({G<int> a, int b}), // Error
+ W1 extends H, // Error
+ W2 extends H<dynamic>, // Ok
+ W3 extends H<(Class, int)>, // Ok
+ W4 extends H<(Class<dynamic>, int)>, // Ok
+ W5 extends H<(ConcreteClass, int)>, // Ok
+ W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+ W7 extends H<(Object, int)>, // Error
+ W8 extends H<(int, int)> // Error
>();
typedef void Typedef3<
@@ -65,7 +115,31 @@
S5 extends G<ConcreteClass>, // Ok
S6 extends G<Class<ConcreteClass>>, // Ok
S7 extends G<Object>, // Error
- S8 extends G<int> // Error
+ S8 extends G<int>, // Error
+ U1 extends (F, int), // Error
+ U2 extends (F<dynamic>, int), // Ok
+ U3 extends (F<Class>, int), // Ok
+ U4 extends (F<Class<dynamic>>, int), // Ok
+ U5 extends (F<ConcreteClass>, int), // Ok
+ U6 extends (F<Class<ConcreteClass>>, int), // Ok
+ U7 extends (F<Object>, int), // Error
+ U8 extends (F<int>, int), // Error
+ V1 extends ({G a, int b}), // Error
+ V2 extends ({G<dynamic> a, int b}), // Ok
+ V3 extends ({G<Class> a, int b}), // Ok
+ V4 extends ({G<Class<dynamic>> a, int b}), // Ok
+ V5 extends ({G<ConcreteClass> a, int b}), // Ok
+ V6 extends ({G<Class<ConcreteClass>> a, int b}), // Ok
+ V7 extends ({G<Object> a, int b}), // Error
+ V8 extends ({G<int> a, int b}), // Error
+ W1 extends H, // Error
+ W2 extends H<dynamic>, // Ok
+ W3 extends H<(Class, int)>, // Ok
+ W4 extends H<(Class<dynamic>, int)>, // Ok
+ W5 extends H<(ConcreteClass, int)>, // Ok
+ W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+ W7 extends H<(Object, int)>, // Error
+ W8 extends H<(int, int)> // Error
>();
class Class1<
@@ -84,7 +158,31 @@
S5 extends G<ConcreteClass>, // Ok
S6 extends G<Class<ConcreteClass>>, // Ok
S7 extends G<Object>, // Error
- S8 extends G<int> // Error
+ S8 extends G<int>, // Error
+ U1 extends (F, int), // Error
+ U2 extends (F<dynamic>, int), // Ok
+ U3 extends (F<Class>, int), // Ok
+ U4 extends (F<Class<dynamic>>, int), // Ok
+ U5 extends (F<ConcreteClass>, int), // Ok
+ U6 extends (F<Class<ConcreteClass>>, int), // Ok
+ U7 extends (F<Object>, int), // Error
+ U8 extends (F<int>, int), // Error
+ V1 extends ({G a, int b}), // Error
+ V2 extends ({G<dynamic> a, int b}), // Ok
+ V3 extends ({G<Class> a, int b}), // Ok
+ V4 extends ({G<Class<dynamic>> a, int b}), // Ok
+ V5 extends ({G<ConcreteClass> a, int b}), // Ok
+ V6 extends ({G<Class<ConcreteClass>> a, int b}), // Ok
+ V7 extends ({G<Object> a, int b}), // Error
+ V8 extends ({G<int> a, int b}), // Error
+ W1 extends H, // Error
+ W2 extends H<dynamic>, // Ok
+ W3 extends H<(Class, int)>, // Ok
+ W4 extends H<(Class<dynamic>, int)>, // Ok
+ W5 extends H<(ConcreteClass, int)>, // Ok
+ W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+ W7 extends H<(Object, int)>, // Error
+ W8 extends H<(int, int)> // Error
> {}
class Class2<
@@ -103,7 +201,31 @@
S5 extends G<ConcreteClass>, // Ok
S6 extends G<Class<ConcreteClass>>, // Ok
S7 extends G<Object>, // Error
- S8 extends G<int> // Error
+ S8 extends G<int>, // Error
+ U1 extends (F, int), // Error
+ U2 extends (F<dynamic>, int), // Ok
+ U3 extends (F<Class>, int), // Ok
+ U4 extends (F<Class<dynamic>>, int), // Ok
+ U5 extends (F<ConcreteClass>, int), // Ok
+ U6 extends (F<Class<ConcreteClass>>, int), // Ok
+ U7 extends (F<Object>, int), // Error
+ U8 extends (F<int>, int), // Error
+ V1 extends ({G a, int b}), // Error
+ V2 extends ({G<dynamic> a, int b}), // Ok
+ V3 extends ({G<Class> a, int b}), // Ok
+ V4 extends ({G<Class<dynamic>> a, int b}), // Ok
+ V5 extends ({G<ConcreteClass> a, int b}), // Ok
+ V6 extends ({G<Class<ConcreteClass>> a, int b}), // Ok
+ V7 extends ({G<Object> a, int b}), // Error
+ V8 extends ({G<int> a, int b}), // Error
+ W1 extends H, // Error
+ W2 extends H<dynamic>, // Ok
+ W3 extends H<(Class, int)>, // Ok
+ W4 extends H<(Class<dynamic>, int)>, // Ok
+ W5 extends H<(ConcreteClass, int)>, // Ok
+ W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+ W7 extends H<(Object, int)>, // Error
+ W8 extends H<(int, int)> // Error
> = Object with Class;
mixin Mixin1<
@@ -122,7 +244,31 @@
S5 extends G<ConcreteClass>, // Ok
S6 extends G<Class<ConcreteClass>>, // Ok
S7 extends G<Object>, // Error
- S8 extends G<int> // Error
+ S8 extends G<int>, // Error
+ U1 extends (F, int), // Error
+ U2 extends (F<dynamic>, int), // Ok
+ U3 extends (F<Class>, int), // Ok
+ U4 extends (F<Class<dynamic>>, int), // Ok
+ U5 extends (F<ConcreteClass>, int), // Ok
+ U6 extends (F<Class<ConcreteClass>>, int), // Ok
+ U7 extends (F<Object>, int), // Error
+ U8 extends (F<int>, int), // Error
+ V1 extends ({G a, int b}), // Error
+ V2 extends ({G<dynamic> a, int b}), // Ok
+ V3 extends ({G<Class> a, int b}), // Ok
+ V4 extends ({G<Class<dynamic>> a, int b}), // Ok
+ V5 extends ({G<ConcreteClass> a, int b}), // Ok
+ V6 extends ({G<Class<ConcreteClass>> a, int b}), // Ok
+ V7 extends ({G<Object> a, int b}), // Error
+ V8 extends ({G<int> a, int b}), // Error
+ W1 extends H, // Error
+ W2 extends H<dynamic>, // Ok
+ W3 extends H<(Class, int)>, // Ok
+ W4 extends H<(Class<dynamic>, int)>, // Ok
+ W5 extends H<(ConcreteClass, int)>, // Ok
+ W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+ W7 extends H<(Object, int)>, // Error
+ W8 extends H<(int, int)> // Error
> {}
// TODO(johnniwinther): Check/create this type as regular bounded i2b.
@@ -142,7 +288,31 @@
S5 extends G<ConcreteClass>, // Ok
S6 extends G<Class<ConcreteClass>>, // Ok
S7 extends G<Object>, // Error
- S8 extends G<int> // Error
+ S8 extends G<int>, // Error
+ U1 extends (F, int), // Error
+ U2 extends (F<dynamic>, int), // Ok
+ U3 extends (F<Class>, int), // Ok
+ U4 extends (F<Class<dynamic>>, int), // Ok
+ U5 extends (F<ConcreteClass>, int), // Ok
+ U6 extends (F<Class<ConcreteClass>>, int), // Ok
+ U7 extends (F<Object>, int), // Error
+ U8 extends (F<int>, int), // Error
+ V1 extends ({G a, int b}), // Error
+ V2 extends ({G<dynamic> a, int b}), // Ok
+ V3 extends ({G<Class> a, int b}), // Ok
+ V4 extends ({G<Class<dynamic>> a, int b}), // Ok
+ V5 extends ({G<ConcreteClass> a, int b}), // Ok
+ V6 extends ({G<Class<ConcreteClass>> a, int b}), // Ok
+ V7 extends ({G<Object> a, int b}), // Error
+ V8 extends ({G<int> a, int b}), // Error
+ W1 extends H, // Error
+ W2 extends H<dynamic>, // Ok
+ W3 extends H<(Class, int)>, // Ok
+ W4 extends H<(Class<dynamic>, int)>, // Ok
+ W5 extends H<(ConcreteClass, int)>, // Ok
+ W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+ W7 extends H<(Object, int)>, // Error
+ W8 extends H<(int, int)> // Error
> {
a<
ConcreteClass,
@@ -160,7 +330,31 @@
G<ConcreteClass>,
G<ConcreteClass>,
G<ConcreteClass>,
- G<ConcreteClass>>()
+ G<ConcreteClass>,
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int)>()
}
extension Extension<
@@ -179,7 +373,31 @@
S5 extends G<ConcreteClass>, // Ok
S6 extends G<Class<ConcreteClass>>, // Ok
S7 extends G<Object>, // Error
- S8 extends G<int> // Error
+ S8 extends G<int>, // Error
+ U1 extends (F, int), // Error
+ U2 extends (F<dynamic>, int), // Ok
+ U3 extends (F<Class>, int), // Ok
+ U4 extends (F<Class<dynamic>>, int), // Ok
+ U5 extends (F<ConcreteClass>, int), // Ok
+ U6 extends (F<Class<ConcreteClass>>, int), // Ok
+ U7 extends (F<Object>, int), // Error
+ U8 extends (F<int>, int), // Error
+ V1 extends ({G a, int b}), // Error
+ V2 extends ({G<dynamic> a, int b}), // Ok
+ V3 extends ({G<Class> a, int b}), // Ok
+ V4 extends ({G<Class<dynamic>> a, int b}), // Ok
+ V5 extends ({G<ConcreteClass> a, int b}), // Ok
+ V6 extends ({G<Class<ConcreteClass>> a, int b}), // Ok
+ V7 extends ({G<Object> a, int b}), // Error
+ V8 extends ({G<int> a, int b}), // Error
+ W1 extends H, // Error
+ W2 extends H<dynamic>, // Ok
+ W3 extends H<(Class, int)>, // Ok
+ W4 extends H<(Class<dynamic>, int)>, // Ok
+ W5 extends H<(ConcreteClass, int)>, // Ok
+ W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+ W7 extends H<(Object, int)>, // Error
+ W8 extends H<(int, int)> // Error
> on Class {}
void method1<
@@ -198,7 +416,31 @@
S5 extends G<ConcreteClass>, // Ok
S6 extends G<Class<ConcreteClass>>, // Ok
S7 extends G<Object>, // Error
- S8 extends G<int> // Error
+ S8 extends G<int>, // Error
+ U1 extends (F, int), // Error
+ U2 extends (F<dynamic>, int), // Ok
+ U3 extends (F<Class>, int), // Ok
+ U4 extends (F<Class<dynamic>>, int), // Ok
+ U5 extends (F<ConcreteClass>, int), // Ok
+ U6 extends (F<Class<ConcreteClass>>, int), // Ok
+ U7 extends (F<Object>, int), // Error
+ U8 extends (F<int>, int), // Error
+ V1 extends ({G a, int b}), // Error
+ V2 extends ({G<dynamic> a, int b}), // Ok
+ V3 extends ({G<Class> a, int b}), // Ok
+ V4 extends ({G<Class<dynamic>> a, int b}), // Ok
+ V5 extends ({G<ConcreteClass> a, int b}), // Ok
+ V6 extends ({G<Class<ConcreteClass>> a, int b}), // Ok
+ V7 extends ({G<Object> a, int b}), // Error
+ V8 extends ({G<int> a, int b}), // Error
+ W1 extends H, // Error
+ W2 extends H<dynamic>, // Ok
+ W3 extends H<(Class, int)>, // Ok
+ W4 extends H<(Class<dynamic>, int)>, // Ok
+ W5 extends H<(ConcreteClass, int)>, // Ok
+ W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+ W7 extends H<(Object, int)>, // Error
+ W8 extends H<(int, int)> // Error
>() {}
test() {
@@ -218,7 +460,31 @@
S5 extends G<ConcreteClass>, // Ok
S6 extends G<Class<ConcreteClass>>, // Ok
S7 extends G<Object>, // Error
- S8 extends G<int> // Error
+ S8 extends G<int>, // Error
+ U1 extends (F, int), // Error
+ U2 extends (F<dynamic>, int), // Ok
+ U3 extends (F<Class>, int), // Ok
+ U4 extends (F<Class<dynamic>>, int), // Ok
+ U5 extends (F<ConcreteClass>, int), // Ok
+ U6 extends (F<Class<ConcreteClass>>, int), // Ok
+ U7 extends (F<Object>, int), // Error
+ U8 extends (F<int>, int), // Error
+ V1 extends ({G a, int b}), // Error
+ V2 extends ({G<dynamic> a, int b}), // Ok
+ V3 extends ({G<Class> a, int b}), // Ok
+ V4 extends ({G<Class<dynamic>> a, int b}), // Ok
+ V5 extends ({G<ConcreteClass> a, int b}), // Ok
+ V6 extends ({G<Class<ConcreteClass>> a, int b}), // Ok
+ V7 extends ({G<Object> a, int b}), // Error
+ V8 extends ({G<int> a, int b}), // Error
+ W1 extends H, // Error
+ W2 extends H<dynamic>, // Ok
+ W3 extends H<(Class, int)>, // Ok
+ W4 extends H<(Class<dynamic>, int)>, // Ok
+ W5 extends H<(ConcreteClass, int)>, // Ok
+ W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+ W7 extends H<(Object, int)>, // Error
+ W8 extends H<(int, int)> // Error
>() {}
void Function<
T1 extends F, // Ok
@@ -236,7 +502,31 @@
S5 extends G<ConcreteClass>, // Ok
S6 extends G<Class<ConcreteClass>>, // Ok
S7 extends G<Object>, // Error
- S8 extends G<int> // Error
+ S8 extends G<int>, // Error
+ U1 extends (F, int), // Error
+ U2 extends (F<dynamic>, int), // Ok
+ U3 extends (F<Class>, int), // Ok
+ U4 extends (F<Class<dynamic>>, int), // Ok
+ U5 extends (F<ConcreteClass>, int), // Ok
+ U6 extends (F<Class<ConcreteClass>>, int), // Ok
+ U7 extends (F<Object>, int), // Error
+ U8 extends (F<int>, int), // Error
+ V1 extends ({G a, int b}), // Error
+ V2 extends ({G<dynamic> a, int b}), // Ok
+ V3 extends ({G<Class> a, int b}), // Ok
+ V4 extends ({G<Class<dynamic>> a, int b}), // Ok
+ V5 extends ({G<ConcreteClass> a, int b}), // Ok
+ V6 extends ({G<Class<ConcreteClass>> a, int b}), // Ok
+ V7 extends ({G<Object> a, int b}), // Error
+ V8 extends ({G<int> a, int b}), // Error
+ W1 extends H, // Error
+ W2 extends H<dynamic>, // Ok
+ W3 extends H<(Class, int)>, // Ok
+ W4 extends H<(Class<dynamic>, int)>, // Ok
+ W5 extends H<(ConcreteClass, int)>, // Ok
+ W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+ W7 extends H<(Object, int)>, // Error
+ W8 extends H<(int, int)> // Error
>() local;
}
diff --git a/pkg/front_end/testcases/general/bounds_type_parameters.dart.strong.expect b/pkg/front_end/testcases/general/bounds_type_parameters.dart.strong.expect
index 9ebd198..058d079 100644
--- a/pkg/front_end/testcases/general/bounds_type_parameters.dart.strong.expect
+++ b/pkg/front_end/testcases/general/bounds_type_parameters.dart.strong.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:14:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:16:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -10,7 +10,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:22:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:24:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -18,7 +18,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:34:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:32:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:40:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:48:9: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:60:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -26,7 +50,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:42:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:68:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -34,7 +58,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:53:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:76:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:84:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:92:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:103:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -42,7 +90,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:61:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:111:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -50,7 +98,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:72:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:119:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:127:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:135:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:146:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -58,7 +130,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:80:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:154:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -66,7 +138,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:91:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:162:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:170:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:178:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:189:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -74,7 +170,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:99:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:197:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -82,7 +178,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:110:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:205:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:213:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:221:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:232:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -90,7 +210,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:118:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:240:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -98,7 +218,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:130:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:248:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:256:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:264:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:276:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -106,7 +250,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:138:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:284:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -114,7 +258,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:167:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:292:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:300:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:308:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:361:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -122,7 +290,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:175:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:369:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -130,7 +298,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:186:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:377:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:385:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:393:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:404:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -138,7 +330,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:194:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:412:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -146,7 +338,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:20:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:420:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:428:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:436:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:22:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -156,7 +372,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:21:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:23:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -165,7 +381,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:28:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:30:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -175,16 +391,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:29:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:31:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:40:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:38:21: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:39:21: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:46:22: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:47:22: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:52:20: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:53:20: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:54:20: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:55:20: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:66:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -194,7 +487,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:41:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:67:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -203,7 +496,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:48:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:74:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -213,16 +506,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:49:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:75:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:59:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:82:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:83:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:90:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:91:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:96:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:97:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:98:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:99:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:109:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -232,7 +602,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:60:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:110:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -241,7 +611,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:67:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:117:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -251,16 +621,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:68:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:118:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:78:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:125:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:126:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:133:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:134:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:139:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:140:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:141:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:142:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:152:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -270,7 +717,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:79:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:153:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -279,7 +726,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:86:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:160:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -289,16 +736,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:87:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:161:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:97:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:168:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:169:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:176:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:177:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:182:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:183:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:184:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:185:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:195:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -308,7 +832,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:98:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:196:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -317,7 +841,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:105:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:203:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -327,16 +851,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:106:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:204:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:116:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:211:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:212:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:219:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:220:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:225:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:226:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:227:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:228:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:238:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -346,7 +947,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:117:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:239:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -355,7 +956,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:124:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:246:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -365,16 +966,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:125:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:247:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:136:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:254:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:255:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:262:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:263:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:268:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:269:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:270:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:271:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:282:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -384,7 +1062,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:137:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:283:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -393,7 +1071,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:144:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:290:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -403,16 +1081,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:145:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:291:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:173:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:298:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:299:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:306:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:307:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:312:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:313:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:314:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:315:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:367:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -422,7 +1177,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:174:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:368:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -431,7 +1186,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:181:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:375:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -441,16 +1196,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:182:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:376:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:192:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:383:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:384:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:391:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:392:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:397:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:398:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:399:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:400:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:410:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -460,7 +1292,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:193:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:411:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -469,7 +1301,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:200:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:418:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -479,35 +1311,291 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:201:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:419:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:147:3: Error: Type argument 'ConcreteClass' doesn't conform to the bound 'int' of the type variable 'T8' on 'Enum1'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:426:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:427:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:434:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:435:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:440:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:441:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:442:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:443:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument 'ConcreteClass' doesn't conform to the bound 'int' of the type variable 'T8' on 'Enum1'.
// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// a<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:137:5: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:283:5: Context: This is the type variable whose bound isn't conformed to.
// T8 extends F<int>, // Error
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:147:3: Error: Type argument 'G<ConcreteClass>' doesn't conform to the bound 'G<int>' of the type variable 'S8' on 'Enum1'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument 'G<ConcreteClass>' doesn't conform to the bound 'G<int>' of the type variable 'S8' on 'Enum1'.
// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// a<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:145:5: Context: This is the type variable whose bound isn't conformed to.
-// S8 extends G<int> // Error
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:291:5: Context: This is the type variable whose bound isn't conformed to.
+// S8 extends G<int>, // Error
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:212:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(int, int)' of the type variable 'U8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:299:5: Context: This is the type variable whose bound isn't conformed to.
+// U8 extends (F<int>, int), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V1' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:300:5: Context: This is the type variable whose bound isn't conformed to.
+// V1 extends ({G a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<dynamic> a, int b})' of the type variable 'V2' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:301:5: Context: This is the type variable whose bound isn't conformed to.
+// V2 extends ({G<dynamic> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V3' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:302:5: Context: This is the type variable whose bound isn't conformed to.
+// V3 extends ({G<Class> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V4' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:303:5: Context: This is the type variable whose bound isn't conformed to.
+// V4 extends ({G<Class<dynamic>> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<ConcreteClass> a, int b})' of the type variable 'V5' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:304:5: Context: This is the type variable whose bound isn't conformed to.
+// V5 extends ({G<ConcreteClass> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<ConcreteClass>> a, int b})' of the type variable 'V6' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:305:5: Context: This is the type variable whose bound isn't conformed to.
+// V6 extends ({G<Class<ConcreteClass>> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Object> a, int b})' of the type variable 'V7' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:306:5: Context: This is the type variable whose bound isn't conformed to.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<int> a, int b})' of the type variable 'V8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:307:5: Context: This is the type variable whose bound isn't conformed to.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W1' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:308:5: Context: This is the type variable whose bound isn't conformed to.
+// W1 extends H, // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<dynamic>' of the type variable 'W2' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:309:5: Context: This is the type variable whose bound isn't conformed to.
+// W2 extends H<dynamic>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W3' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:310:5: Context: This is the type variable whose bound isn't conformed to.
+// W3 extends H<(Class, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W4' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:311:5: Context: This is the type variable whose bound isn't conformed to.
+// W4 extends H<(Class<dynamic>, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(ConcreteClass, int)>' of the type variable 'W5' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:312:5: Context: This is the type variable whose bound isn't conformed to.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<ConcreteClass>, int)>' of the type variable 'W6' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:313:5: Context: This is the type variable whose bound isn't conformed to.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Object, int)>' of the type variable 'W7' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:314:5: Context: This is the type variable whose bound isn't conformed to.
+// W7 extends H<(Object, int)>, // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(int, int)>' of the type variable 'W8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:315:5: Context: This is the type variable whose bound isn't conformed to.
+// W8 extends H<(int, int)> // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:454:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -517,7 +1605,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:213:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:455:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -526,7 +1614,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:220:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:462:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -536,16 +1624,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:221:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:463:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:230:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:470:19: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:471:19: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:478:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:479:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:484:18: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:485:18: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:486:18: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:487:18: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:496:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -555,7 +1720,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:231:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:497:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -564,7 +1729,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:238:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:504:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -574,27 +1739,105 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:239:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:505:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:129:6: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:512:19: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:513:19: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:520:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:521:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:526:18: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:527:18: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:528:18: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:529:18: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:275:6: Error: Constant evaluation error:
// enum Enum1<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:129:6: Context: Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>>'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:275:6: Context: Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>, (Class<dynamic>, int), (dynamic, int), (Class<dynamic>, int), (Class<dynamic>, int), (ConcreteClass, int), (Class<ConcreteClass>, int), (Object, int), (int, int), ({G<Class<dynamic>> a, int b}), ({G<dynamic> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<ConcreteClass> a, int b}), ({G<Class<ConcreteClass>> a, int b}), ({G<Object> a, int b}), ({G<int> a, int b}), H<(Class<dynamic>, int)>, H<dynamic>, H<(Class<dynamic>, int)>, H<(Class<dynamic>, int)>, H<(ConcreteClass, int)>, H<(Class<ConcreteClass>, int)>, H<(Object, int)>, H<(int, int)>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)>'.
// - 'Enum1' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'Object' is from 'dart:core'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// enum Enum1<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:129:6: Context: While analyzing:
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:275:6: Context: While analyzing:
// enum Enum1<
// ^
//
@@ -602,9 +1845,9 @@
import "dart:core" as core;
typedef F<X extends self::Class<X> = self::Class<dynamic>> = X;
-typedef Typedef1<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
-typedef Typedef2 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void;
-typedef Typedef3<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
+typedef Typedef1<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic, unrelated U1 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U2 extends (dynamic, core::int) = dynamic, unrelated U3 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U4 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U5 extends (self::ConcreteClass, core::int) = dynamic, unrelated U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, unrelated U7 extends (core::Object, core::int) = dynamic, unrelated U8 extends (core::int, core::int) = dynamic, unrelated V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, unrelated V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, unrelated V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, unrelated V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, unrelated V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, unrelated W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W2 extends self::H<dynamic> = dynamic, unrelated W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, unrelated W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, unrelated W7 extends self::H<(core::Object, core::int)> = dynamic, unrelated W8 extends self::H<(core::int, core::int)> = dynamic> = () → void;
+typedef Typedef2 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic>() → void;
+typedef Typedef3<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic, unrelated U1 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U2 extends (dynamic, core::int) = dynamic, unrelated U3 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U4 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U5 extends (self::ConcreteClass, core::int) = dynamic, unrelated U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, unrelated U7 extends (core::Object, core::int) = dynamic, unrelated U8 extends (core::int, core::int) = dynamic, unrelated V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, unrelated V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, unrelated V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, unrelated V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, unrelated V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, unrelated W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W2 extends self::H<dynamic> = dynamic, unrelated W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, unrelated W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, unrelated W7 extends self::H<(core::Object, core::int)> = dynamic, unrelated W8 extends self::H<(core::int, core::int)> = dynamic> = () → void;
abstract class Class<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
}
class ConcreteClass extends core::Object implements self::Class<self::ConcreteClass> {
@@ -617,50 +1860,56 @@
: super core::Object::•()
;
}
-class Class1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object {
- synthetic constructor •() → self::Class1<self::Class1::T1, self::Class1::T2%, self::Class1::T3, self::Class1::T4, self::Class1::T5, self::Class1::T6, self::Class1::T7, self::Class1::T8, self::Class1::S1, self::Class1::S2, self::Class1::S3, self::Class1::S4, self::Class1::S5, self::Class1::S6, self::Class1::S7, self::Class1::S8>
+class H<X extends (self::Class<self::H::X>, core::int) = (self::Class<dynamic>, core::int)> extends core::Object {
+ synthetic constructor •() → self::H<self::H::X>
: super core::Object::•()
;
}
-class Class2<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> = core::Object with self::Class<dynamic> /*hasConstConstructor*/ {
- const synthetic constructor •() → self::Class2<self::Class2::T1, self::Class2::T2%, self::Class2::T3, self::Class2::T4, self::Class2::T5, self::Class2::T6, self::Class2::T7, self::Class2::T8, self::Class2::S1, self::Class2::S2, self::Class2::S3, self::Class2::S4, self::Class2::S5, self::Class2::S6, self::Class2::S7, self::Class2::S8>
+class Class1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class1<self::Class1::T1, self::Class1::T2%, self::Class1::T3, self::Class1::T4, self::Class1::T5, self::Class1::T6, self::Class1::T7, self::Class1::T8, self::Class1::S1, self::Class1::S2, self::Class1::S3, self::Class1::S4, self::Class1::S5, self::Class1::S6, self::Class1::S7, self::Class1::S8, self::Class1::U1, self::Class1::U2, self::Class1::U3, self::Class1::U4, self::Class1::U5, self::Class1::U6, self::Class1::U7, self::Class1::U8, self::Class1::V1, self::Class1::V2, self::Class1::V3, self::Class1::V4, self::Class1::V5, self::Class1::V6, self::Class1::V7, self::Class1::V8, self::Class1::W1, self::Class1::W2, self::Class1::W3, self::Class1::W4, self::Class1::W5, self::Class1::W6, self::Class1::W7, self::Class1::W8>
: super core::Object::•()
;
}
-abstract class Mixin1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object /*isMixinDeclaration*/ {
+class Class2<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> = core::Object with self::Class<dynamic> /*hasConstConstructor*/ {
+ const synthetic constructor •() → self::Class2<self::Class2::T1, self::Class2::T2%, self::Class2::T3, self::Class2::T4, self::Class2::T5, self::Class2::T6, self::Class2::T7, self::Class2::T8, self::Class2::S1, self::Class2::S2, self::Class2::S3, self::Class2::S4, self::Class2::S5, self::Class2::S6, self::Class2::S7, self::Class2::S8, self::Class2::U1, self::Class2::U2, self::Class2::U3, self::Class2::U4, self::Class2::U5, self::Class2::U6, self::Class2::U7, self::Class2::U8, self::Class2::V1, self::Class2::V2, self::Class2::V3, self::Class2::V4, self::Class2::V5, self::Class2::V6, self::Class2::V7, self::Class2::V8, self::Class2::W1, self::Class2::W2, self::Class2::W3, self::Class2::W4, self::Class2::W5, self::Class2::W6, self::Class2::W7, self::Class2::W8>
+ : super core::Object::•()
+ ;
}
-class Enum1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::_Enum /*isEnum*/ {
- static const field core::List<self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>> values = invalid-expression "Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>>'.
+abstract class Mixin1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::Object /*isMixinDeclaration*/ {
+}
+class Enum1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>> values = invalid-expression "Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>, (Class<dynamic>, int), (dynamic, int), (Class<dynamic>, int), (Class<dynamic>, int), (ConcreteClass, int), (Class<ConcreteClass>, int), (Object, int), (int, int), ({G<Class<dynamic>> a, int b}), ({G<dynamic> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<ConcreteClass> a, int b}), ({G<Class<ConcreteClass>> a, int b}), ({G<Object> a, int b}), ({G<int> a, int b}), H<(Class<dynamic>, int)>, H<dynamic>, H<(Class<dynamic>, int)>, H<(Class<dynamic>, int)>, H<(ConcreteClass, int)>, H<(Class<ConcreteClass>, int)>, H<(Object, int)>, H<(int, int)>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)>'.
- 'Enum1' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- - 'Object' is from 'dart:core'.";
- enum-element static const field self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>> a = #C3;
- const constructor •(core::int #index, core::String #name) → self::Enum1<self::Enum1::T1, self::Enum1::T2%, self::Enum1::T3, self::Enum1::T4, self::Enum1::T5, self::Enum1::T6, self::Enum1::T7, self::Enum1::T8, self::Enum1::S1, self::Enum1::S2, self::Enum1::S3, self::Enum1::S4, self::Enum1::S5, self::Enum1::S6, self::Enum1::S7, self::Enum1::S8>
+ - 'Object' is from 'dart:core'.
+ - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.";
+ enum-element static const field self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int)> a = #C3;
+ const constructor •(core::int #index, core::String #name) → self::Enum1<self::Enum1::T1, self::Enum1::T2%, self::Enum1::T3, self::Enum1::T4, self::Enum1::T5, self::Enum1::T6, self::Enum1::T7, self::Enum1::T8, self::Enum1::S1, self::Enum1::S2, self::Enum1::S3, self::Enum1::S4, self::Enum1::S5, self::Enum1::S6, self::Enum1::S7, self::Enum1::S8, self::Enum1::U1, self::Enum1::U2, self::Enum1::U3, self::Enum1::U4, self::Enum1::U5, self::Enum1::U6, self::Enum1::U7, self::Enum1::U8, self::Enum1::V1, self::Enum1::V2, self::Enum1::V3, self::Enum1::V4, self::Enum1::V5, self::Enum1::V6, self::Enum1::V7, self::Enum1::V8, self::Enum1::W1, self::Enum1::W2, self::Enum1::W3, self::Enum1::W4, self::Enum1::W5, self::Enum1::W6, self::Enum1::W7, self::Enum1::W8>
: super core::_Enum::•(#index, #name)
;
method _enumToString() → core::String
return "Enum1.${this.{core::_Enum::_name}{core::String}}";
}
-extension Extension<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> on self::Class<dynamic> {
+extension Extension<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> on self::Class<dynamic> {
}
-static method method1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void {}
+static method method1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic>() → void {}
static method test() → dynamic {
- function local1<T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>>() → void {}
- <T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>>() → void local;
+ function local1<T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>, U1 extends (self::Class<dynamic>, core::int), U2 extends (dynamic, core::int), U3 extends (self::Class<dynamic>, core::int), U4 extends (self::Class<dynamic>, core::int), U5 extends (self::ConcreteClass, core::int), U6 extends (self::Class<self::ConcreteClass>, core::int), U7 extends (core::Object, core::int), U8 extends (core::int, core::int), V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V2 extends ({required a: self::G<dynamic>, required b: core::int}), V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}), V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}), V7 extends ({required a: self::G<core::Object>, required b: core::int}), V8 extends ({required a: self::G<core::int>, required b: core::int}), W1 extends self::H<(self::Class<dynamic>, core::int)>, W2 extends self::H<dynamic>, W3 extends self::H<(self::Class<dynamic>, core::int)>, W4 extends self::H<(self::Class<dynamic>, core::int)>, W5 extends self::H<(self::ConcreteClass, core::int)>, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)>, W7 extends self::H<(core::Object, core::int)>, W8 extends self::H<(core::int, core::int)>>() → void {}
+ <T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>, U1 extends (self::Class<dynamic>, core::int), U2 extends (dynamic, core::int), U3 extends (self::Class<dynamic>, core::int), U4 extends (self::Class<dynamic>, core::int), U5 extends (self::ConcreteClass, core::int), U6 extends (self::Class<self::ConcreteClass>, core::int), U7 extends (core::Object, core::int), U8 extends (core::int, core::int), V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V2 extends ({required a: self::G<dynamic>, required b: core::int}), V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}), V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}), V7 extends ({required a: self::G<core::Object>, required b: core::int}), V8 extends ({required a: self::G<core::int>, required b: core::int}), W1 extends self::H<(self::Class<dynamic>, core::int)>, W2 extends self::H<dynamic>, W3 extends self::H<(self::Class<dynamic>, core::int)>, W4 extends self::H<(self::Class<dynamic>, core::int)>, W5 extends self::H<(self::ConcreteClass, core::int)>, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)>, W7 extends self::H<(core::Object, core::int)>, W8 extends self::H<(core::int, core::int)>>() → void local;
}
static method main() → dynamic {}
constants {
#C1 = 0
#C2 = "a"
- #C3 = self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>> {index:#C1, _name:#C2}
+ #C3 = self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int)> {index:#C1, _name:#C2}
}
Constructor coverage from constants:
org-dartlang-testcase:///bounds_type_parameters.dart:
-- Enum1. (from org-dartlang-testcase:///bounds_type_parameters.dart:129:6)
+- Enum1. (from org-dartlang-testcase:///bounds_type_parameters.dart:275:6)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/general/bounds_type_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/general/bounds_type_parameters.dart.strong.transformed.expect
index 95bcb2b..c8d14c6 100644
--- a/pkg/front_end/testcases/general/bounds_type_parameters.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/bounds_type_parameters.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:14:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:16:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -10,7 +10,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:22:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:24:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -18,7 +18,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:34:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:32:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:40:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:48:9: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:60:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -26,7 +50,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:42:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:68:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -34,7 +58,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:53:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:76:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:84:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:92:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:103:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -42,7 +90,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:61:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:111:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -50,7 +98,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:72:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:119:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:127:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:135:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:146:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -58,7 +130,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:80:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:154:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -66,7 +138,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:91:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:162:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:170:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:178:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:189:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -74,7 +170,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:99:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:197:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -82,7 +178,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:110:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:205:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:213:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:221:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:232:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -90,7 +210,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:118:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:240:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -98,7 +218,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:130:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:248:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:256:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:264:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:276:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -106,7 +250,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:138:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:284:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -114,7 +258,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:167:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:292:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:300:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:308:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:361:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -122,7 +290,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:175:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:369:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -130,7 +298,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:186:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:377:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:385:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:393:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:404:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -138,7 +330,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:194:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:412:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -146,7 +338,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:20:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:420:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:428:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:436:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:22:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -156,7 +372,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:21:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:23:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -165,7 +381,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:28:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:30:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -175,16 +391,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:29:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:31:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:40:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:38:21: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:39:21: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:46:22: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:47:22: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:52:20: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:53:20: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:54:20: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:55:20: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:66:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -194,7 +487,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:41:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:67:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -203,7 +496,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:48:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:74:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -213,16 +506,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:49:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:75:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:59:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:82:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:83:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:90:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:91:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:96:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:97:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:98:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:99:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:109:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -232,7 +602,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:60:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:110:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -241,7 +611,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:67:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:117:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -251,16 +621,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:68:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:118:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:78:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:125:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:126:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:133:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:134:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:139:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:140:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:141:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:142:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:152:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -270,7 +717,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:79:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:153:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -279,7 +726,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:86:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:160:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -289,16 +736,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:87:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:161:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:97:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:168:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:169:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:176:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:177:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:182:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:183:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:184:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:185:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:195:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -308,7 +832,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:98:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:196:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -317,7 +841,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:105:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:203:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -327,16 +851,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:106:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:204:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:116:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:211:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:212:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:219:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:220:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:225:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:226:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:227:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:228:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:238:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -346,7 +947,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:117:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:239:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -355,7 +956,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:124:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:246:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -365,16 +966,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:125:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:247:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:136:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:254:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:255:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:262:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:263:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:268:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:269:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:270:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:271:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:282:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -384,7 +1062,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:137:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:283:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -393,7 +1071,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:144:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:290:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -403,16 +1081,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:145:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:291:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:173:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:298:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:299:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:306:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:307:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:312:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:313:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:314:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:315:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:367:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -422,7 +1177,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:174:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:368:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -431,7 +1186,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:181:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:375:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -441,16 +1196,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:182:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:376:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:192:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:383:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:384:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:391:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:392:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:397:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:398:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:399:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:400:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:410:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -460,7 +1292,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:193:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:411:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -469,7 +1301,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:200:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:418:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -479,35 +1311,291 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:201:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:419:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:147:3: Error: Type argument 'ConcreteClass' doesn't conform to the bound 'int' of the type variable 'T8' on 'Enum1'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:426:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:427:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:434:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:435:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:440:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:441:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:442:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:443:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument 'ConcreteClass' doesn't conform to the bound 'int' of the type variable 'T8' on 'Enum1'.
// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// a<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:137:5: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:283:5: Context: This is the type variable whose bound isn't conformed to.
// T8 extends F<int>, // Error
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:147:3: Error: Type argument 'G<ConcreteClass>' doesn't conform to the bound 'G<int>' of the type variable 'S8' on 'Enum1'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument 'G<ConcreteClass>' doesn't conform to the bound 'G<int>' of the type variable 'S8' on 'Enum1'.
// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// a<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:145:5: Context: This is the type variable whose bound isn't conformed to.
-// S8 extends G<int> // Error
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:291:5: Context: This is the type variable whose bound isn't conformed to.
+// S8 extends G<int>, // Error
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:212:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(int, int)' of the type variable 'U8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:299:5: Context: This is the type variable whose bound isn't conformed to.
+// U8 extends (F<int>, int), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V1' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:300:5: Context: This is the type variable whose bound isn't conformed to.
+// V1 extends ({G a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<dynamic> a, int b})' of the type variable 'V2' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:301:5: Context: This is the type variable whose bound isn't conformed to.
+// V2 extends ({G<dynamic> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V3' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:302:5: Context: This is the type variable whose bound isn't conformed to.
+// V3 extends ({G<Class> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V4' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:303:5: Context: This is the type variable whose bound isn't conformed to.
+// V4 extends ({G<Class<dynamic>> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<ConcreteClass> a, int b})' of the type variable 'V5' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:304:5: Context: This is the type variable whose bound isn't conformed to.
+// V5 extends ({G<ConcreteClass> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<ConcreteClass>> a, int b})' of the type variable 'V6' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:305:5: Context: This is the type variable whose bound isn't conformed to.
+// V6 extends ({G<Class<ConcreteClass>> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Object> a, int b})' of the type variable 'V7' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:306:5: Context: This is the type variable whose bound isn't conformed to.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<int> a, int b})' of the type variable 'V8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:307:5: Context: This is the type variable whose bound isn't conformed to.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W1' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:308:5: Context: This is the type variable whose bound isn't conformed to.
+// W1 extends H, // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<dynamic>' of the type variable 'W2' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:309:5: Context: This is the type variable whose bound isn't conformed to.
+// W2 extends H<dynamic>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W3' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:310:5: Context: This is the type variable whose bound isn't conformed to.
+// W3 extends H<(Class, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W4' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:311:5: Context: This is the type variable whose bound isn't conformed to.
+// W4 extends H<(Class<dynamic>, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(ConcreteClass, int)>' of the type variable 'W5' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:312:5: Context: This is the type variable whose bound isn't conformed to.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<ConcreteClass>, int)>' of the type variable 'W6' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:313:5: Context: This is the type variable whose bound isn't conformed to.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Object, int)>' of the type variable 'W7' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:314:5: Context: This is the type variable whose bound isn't conformed to.
+// W7 extends H<(Object, int)>, // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(int, int)>' of the type variable 'W8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:315:5: Context: This is the type variable whose bound isn't conformed to.
+// W8 extends H<(int, int)> // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:454:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -517,7 +1605,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:213:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:455:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -526,7 +1614,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:220:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:462:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -536,16 +1624,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:221:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:463:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:230:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:470:19: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:471:19: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:478:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:479:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:484:18: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:485:18: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:486:18: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:487:18: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:496:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -555,7 +1720,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:231:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:497:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -564,7 +1729,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:238:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:504:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -574,27 +1739,105 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:239:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:505:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:129:6: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:512:19: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:513:19: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:520:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:521:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:526:18: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:527:18: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:528:18: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:529:18: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:275:6: Error: Constant evaluation error:
// enum Enum1<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:129:6: Context: Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>>'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:275:6: Context: Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>, (Class<dynamic>, int), (dynamic, int), (Class<dynamic>, int), (Class<dynamic>, int), (ConcreteClass, int), (Class<ConcreteClass>, int), (Object, int), (int, int), ({G<Class<dynamic>> a, int b}), ({G<dynamic> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<ConcreteClass> a, int b}), ({G<Class<ConcreteClass>> a, int b}), ({G<Object> a, int b}), ({G<int> a, int b}), H<(Class<dynamic>, int)>, H<dynamic>, H<(Class<dynamic>, int)>, H<(Class<dynamic>, int)>, H<(ConcreteClass, int)>, H<(Class<ConcreteClass>, int)>, H<(Object, int)>, H<(int, int)>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)>'.
// - 'Enum1' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'Object' is from 'dart:core'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// enum Enum1<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:129:6: Context: While analyzing:
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:275:6: Context: While analyzing:
// enum Enum1<
// ^
//
@@ -602,9 +1845,9 @@
import "dart:core" as core;
typedef F<X extends self::Class<X> = self::Class<dynamic>> = X;
-typedef Typedef1<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
-typedef Typedef2 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void;
-typedef Typedef3<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
+typedef Typedef1<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic, unrelated U1 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U2 extends (dynamic, core::int) = dynamic, unrelated U3 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U4 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U5 extends (self::ConcreteClass, core::int) = dynamic, unrelated U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, unrelated U7 extends (core::Object, core::int) = dynamic, unrelated U8 extends (core::int, core::int) = dynamic, unrelated V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, unrelated V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, unrelated V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, unrelated V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, unrelated V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, unrelated W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W2 extends self::H<dynamic> = dynamic, unrelated W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, unrelated W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, unrelated W7 extends self::H<(core::Object, core::int)> = dynamic, unrelated W8 extends self::H<(core::int, core::int)> = dynamic> = () → void;
+typedef Typedef2 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic>() → void;
+typedef Typedef3<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic, unrelated U1 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U2 extends (dynamic, core::int) = dynamic, unrelated U3 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U4 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U5 extends (self::ConcreteClass, core::int) = dynamic, unrelated U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, unrelated U7 extends (core::Object, core::int) = dynamic, unrelated U8 extends (core::int, core::int) = dynamic, unrelated V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, unrelated V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, unrelated V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, unrelated V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, unrelated V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, unrelated W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W2 extends self::H<dynamic> = dynamic, unrelated W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, unrelated W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, unrelated W7 extends self::H<(core::Object, core::int)> = dynamic, unrelated W8 extends self::H<(core::int, core::int)> = dynamic> = () → void;
abstract class Class<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
}
class ConcreteClass extends core::Object implements self::Class<self::ConcreteClass> {
@@ -617,50 +1860,56 @@
: super core::Object::•()
;
}
-class Class1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object {
- synthetic constructor •() → self::Class1<self::Class1::T1, self::Class1::T2%, self::Class1::T3, self::Class1::T4, self::Class1::T5, self::Class1::T6, self::Class1::T7, self::Class1::T8, self::Class1::S1, self::Class1::S2, self::Class1::S3, self::Class1::S4, self::Class1::S5, self::Class1::S6, self::Class1::S7, self::Class1::S8>
+class H<X extends (self::Class<self::H::X>, core::int) = (self::Class<dynamic>, core::int)> extends core::Object {
+ synthetic constructor •() → self::H<self::H::X>
: super core::Object::•()
;
}
-class Class2<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object implements self::Class<dynamic> /*isEliminatedMixin,hasConstConstructor*/ {
- const synthetic constructor •() → self::Class2<self::Class2::T1, self::Class2::T2%, self::Class2::T3, self::Class2::T4, self::Class2::T5, self::Class2::T6, self::Class2::T7, self::Class2::T8, self::Class2::S1, self::Class2::S2, self::Class2::S3, self::Class2::S4, self::Class2::S5, self::Class2::S6, self::Class2::S7, self::Class2::S8>
+class Class1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class1<self::Class1::T1, self::Class1::T2%, self::Class1::T3, self::Class1::T4, self::Class1::T5, self::Class1::T6, self::Class1::T7, self::Class1::T8, self::Class1::S1, self::Class1::S2, self::Class1::S3, self::Class1::S4, self::Class1::S5, self::Class1::S6, self::Class1::S7, self::Class1::S8, self::Class1::U1, self::Class1::U2, self::Class1::U3, self::Class1::U4, self::Class1::U5, self::Class1::U6, self::Class1::U7, self::Class1::U8, self::Class1::V1, self::Class1::V2, self::Class1::V3, self::Class1::V4, self::Class1::V5, self::Class1::V6, self::Class1::V7, self::Class1::V8, self::Class1::W1, self::Class1::W2, self::Class1::W3, self::Class1::W4, self::Class1::W5, self::Class1::W6, self::Class1::W7, self::Class1::W8>
: super core::Object::•()
;
}
-abstract class Mixin1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object /*isMixinDeclaration*/ {
+class Class2<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::Object implements self::Class<dynamic> /*isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::Class2<self::Class2::T1, self::Class2::T2%, self::Class2::T3, self::Class2::T4, self::Class2::T5, self::Class2::T6, self::Class2::T7, self::Class2::T8, self::Class2::S1, self::Class2::S2, self::Class2::S3, self::Class2::S4, self::Class2::S5, self::Class2::S6, self::Class2::S7, self::Class2::S8, self::Class2::U1, self::Class2::U2, self::Class2::U3, self::Class2::U4, self::Class2::U5, self::Class2::U6, self::Class2::U7, self::Class2::U8, self::Class2::V1, self::Class2::V2, self::Class2::V3, self::Class2::V4, self::Class2::V5, self::Class2::V6, self::Class2::V7, self::Class2::V8, self::Class2::W1, self::Class2::W2, self::Class2::W3, self::Class2::W4, self::Class2::W5, self::Class2::W6, self::Class2::W7, self::Class2::W8>
+ : super core::Object::•()
+ ;
}
-class Enum1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::_Enum /*isEnum*/ {
- static const field core::List<self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>> values = invalid-expression "Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>>'.
+abstract class Mixin1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::Object /*isMixinDeclaration*/ {
+}
+class Enum1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>> values = invalid-expression "Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>, (Class<dynamic>, int), (dynamic, int), (Class<dynamic>, int), (Class<dynamic>, int), (ConcreteClass, int), (Class<ConcreteClass>, int), (Object, int), (int, int), ({G<Class<dynamic>> a, int b}), ({G<dynamic> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<ConcreteClass> a, int b}), ({G<Class<ConcreteClass>> a, int b}), ({G<Object> a, int b}), ({G<int> a, int b}), H<(Class<dynamic>, int)>, H<dynamic>, H<(Class<dynamic>, int)>, H<(Class<dynamic>, int)>, H<(ConcreteClass, int)>, H<(Class<ConcreteClass>, int)>, H<(Object, int)>, H<(int, int)>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)>'.
- 'Enum1' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- - 'Object' is from 'dart:core'.";
- enum-element static const field self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>> a = #C3;
- const constructor •(core::int #index, core::String #name) → self::Enum1<self::Enum1::T1, self::Enum1::T2%, self::Enum1::T3, self::Enum1::T4, self::Enum1::T5, self::Enum1::T6, self::Enum1::T7, self::Enum1::T8, self::Enum1::S1, self::Enum1::S2, self::Enum1::S3, self::Enum1::S4, self::Enum1::S5, self::Enum1::S6, self::Enum1::S7, self::Enum1::S8>
+ - 'Object' is from 'dart:core'.
+ - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.";
+ enum-element static const field self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int)> a = #C3;
+ const constructor •(core::int #index, core::String #name) → self::Enum1<self::Enum1::T1, self::Enum1::T2%, self::Enum1::T3, self::Enum1::T4, self::Enum1::T5, self::Enum1::T6, self::Enum1::T7, self::Enum1::T8, self::Enum1::S1, self::Enum1::S2, self::Enum1::S3, self::Enum1::S4, self::Enum1::S5, self::Enum1::S6, self::Enum1::S7, self::Enum1::S8, self::Enum1::U1, self::Enum1::U2, self::Enum1::U3, self::Enum1::U4, self::Enum1::U5, self::Enum1::U6, self::Enum1::U7, self::Enum1::U8, self::Enum1::V1, self::Enum1::V2, self::Enum1::V3, self::Enum1::V4, self::Enum1::V5, self::Enum1::V6, self::Enum1::V7, self::Enum1::V8, self::Enum1::W1, self::Enum1::W2, self::Enum1::W3, self::Enum1::W4, self::Enum1::W5, self::Enum1::W6, self::Enum1::W7, self::Enum1::W8>
: super core::_Enum::•(#index, #name)
;
method _enumToString() → core::String
return "Enum1.${this.{core::_Enum::_name}{core::String}}";
}
-extension Extension<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> on self::Class<dynamic> {
+extension Extension<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> on self::Class<dynamic> {
}
-static method method1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void {}
+static method method1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic>() → void {}
static method test() → dynamic {
- function local1<T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>>() → void {}
- <T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>>() → void local;
+ function local1<T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>, U1 extends (self::Class<dynamic>, core::int), U2 extends (dynamic, core::int), U3 extends (self::Class<dynamic>, core::int), U4 extends (self::Class<dynamic>, core::int), U5 extends (self::ConcreteClass, core::int), U6 extends (self::Class<self::ConcreteClass>, core::int), U7 extends (core::Object, core::int), U8 extends (core::int, core::int), V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V2 extends ({required a: self::G<dynamic>, required b: core::int}), V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}), V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}), V7 extends ({required a: self::G<core::Object>, required b: core::int}), V8 extends ({required a: self::G<core::int>, required b: core::int}), W1 extends self::H<(self::Class<dynamic>, core::int)>, W2 extends self::H<dynamic>, W3 extends self::H<(self::Class<dynamic>, core::int)>, W4 extends self::H<(self::Class<dynamic>, core::int)>, W5 extends self::H<(self::ConcreteClass, core::int)>, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)>, W7 extends self::H<(core::Object, core::int)>, W8 extends self::H<(core::int, core::int)>>() → void {}
+ <T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>, U1 extends (self::Class<dynamic>, core::int), U2 extends (dynamic, core::int), U3 extends (self::Class<dynamic>, core::int), U4 extends (self::Class<dynamic>, core::int), U5 extends (self::ConcreteClass, core::int), U6 extends (self::Class<self::ConcreteClass>, core::int), U7 extends (core::Object, core::int), U8 extends (core::int, core::int), V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V2 extends ({required a: self::G<dynamic>, required b: core::int}), V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}), V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}), V7 extends ({required a: self::G<core::Object>, required b: core::int}), V8 extends ({required a: self::G<core::int>, required b: core::int}), W1 extends self::H<(self::Class<dynamic>, core::int)>, W2 extends self::H<dynamic>, W3 extends self::H<(self::Class<dynamic>, core::int)>, W4 extends self::H<(self::Class<dynamic>, core::int)>, W5 extends self::H<(self::ConcreteClass, core::int)>, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)>, W7 extends self::H<(core::Object, core::int)>, W8 extends self::H<(core::int, core::int)>>() → void local;
}
static method main() → dynamic {}
constants {
#C1 = 0
#C2 = "a"
- #C3 = self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>> {index:#C1, _name:#C2}
+ #C3 = self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int)> {index:#C1, _name:#C2}
}
Constructor coverage from constants:
org-dartlang-testcase:///bounds_type_parameters.dart:
-- Enum1. (from org-dartlang-testcase:///bounds_type_parameters.dart:129:6)
+- Enum1. (from org-dartlang-testcase:///bounds_type_parameters.dart:275:6)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/general/bounds_type_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/general/bounds_type_parameters.dart.textual_outline.expect
index 174bcbf..ad28b8a 100644
--- a/pkg/front_end/testcases/general/bounds_type_parameters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bounds_type_parameters.dart.textual_outline.expect
@@ -6,6 +6,8 @@
class G<X extends Class<X>> {}
+class H<X extends (Class<X>, int)> {}
+
typedef Typedef1<
T1 extends F,
T2 extends F<dynamic>,
@@ -22,7 +24,31 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>>
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>>
= void Function();
typedef Typedef2 = void Function<
T1 extends F,
@@ -40,7 +66,31 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>>();
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>>();
typedef void Typedef3<
T1 extends F,
T2 extends F<dynamic>,
@@ -57,7 +107,31 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>>();
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>>();
class Class1<
T1 extends F,
@@ -75,7 +149,31 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>> {}
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>> {}
class Class2<
T1 extends F,
@@ -93,7 +191,31 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>> = Object with Class;
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>> = Object with Class;
mixin Mixin1<
T1 extends F,
T2 extends F<dynamic>,
@@ -110,7 +232,31 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>> {}
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>> {}
enum Enum1<
T1 extends F,
@@ -128,7 +274,31 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>> {
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>> {
a<
ConcreteClass,
ConcreteClass,
@@ -145,7 +315,31 @@
G<ConcreteClass>,
G<ConcreteClass>,
G<ConcreteClass>,
- G<ConcreteClass>>()
+ G<ConcreteClass>,
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int)>()
}
extension Extension<
@@ -164,7 +358,31 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>> on Class {}
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>> on Class {}
void method1<
T1 extends F,
@@ -182,6 +400,30 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>>() {}
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>>() {}
test() {}
main() {}
diff --git a/pkg/front_end/testcases/general/bounds_type_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bounds_type_parameters.dart.textual_outline_modelled.expect
index a925888..510c5c4 100644
--- a/pkg/front_end/testcases/general/bounds_type_parameters.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/bounds_type_parameters.dart.textual_outline_modelled.expect
@@ -14,7 +14,31 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>> {}
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>> {}
class Class2<
T1 extends F,
@@ -32,12 +56,38 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>> = Object with Class;
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>> = Object with Class;
class ConcreteClass implements Class<ConcreteClass> {}
class G<X extends Class<X>> {}
+class H<X extends (Class<X>, int)> {}
+
enum Enum1<
T1 extends F,
T2 extends F<dynamic>,
@@ -54,7 +104,31 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>> {
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>> {
a<
ConcreteClass,
ConcreteClass,
@@ -71,7 +145,31 @@
G<ConcreteClass>,
G<ConcreteClass>,
G<ConcreteClass>,
- G<ConcreteClass>>()
+ G<ConcreteClass>,
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ ({ConcreteClass a, int b}),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int),
+ (ConcreteClass, int)>()
}
extension Extension<
@@ -90,7 +188,31 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>> on Class {}
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>> on Class {}
main() {}
mixin Class<T> {}
@@ -110,7 +232,31 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>> {}
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>> {}
test() {}
typedef F<X extends Class<X>> = X;
typedef Typedef1<
@@ -129,7 +275,31 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>>
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>>
= void Function();
typedef Typedef2 = void Function<
T1 extends F,
@@ -147,7 +317,31 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>>();
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>>();
typedef void Typedef3<
T1 extends F,
T2 extends F<dynamic>,
@@ -164,7 +358,31 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>>();
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>>();
void method1<
T1 extends F,
T2 extends F<dynamic>,
@@ -181,4 +399,28 @@
S5 extends G<ConcreteClass>,
S6 extends G<Class<ConcreteClass>>,
S7 extends G<Object>,
- S8 extends G<int>>() {}
+ S8 extends G<int>,
+ U1 extends (F, int),
+ U2 extends (F<dynamic>, int),
+ U3 extends (F<Class>, int),
+ U4 extends (F<Class<dynamic>>, int),
+ U5 extends (F<ConcreteClass>, int),
+ U6 extends (F<Class<ConcreteClass>>, int),
+ U7 extends (F<Object>, int),
+ U8 extends (F<int>, int),
+ V1 extends ({G a, int b}),
+ V2 extends ({G<dynamic> a, int b}),
+ V3 extends ({G<Class> a, int b}),
+ V4 extends ({G<Class<dynamic>> a, int b}),
+ V5 extends ({G<ConcreteClass> a, int b}),
+ V6 extends ({G<Class<ConcreteClass>> a, int b}),
+ V7 extends ({G<Object> a, int b}),
+ V8 extends ({G<int> a, int b}),
+ W1 extends H,
+ W2 extends H<dynamic>,
+ W3 extends H<(Class, int)>,
+ W4 extends H<(Class<dynamic>, int)>,
+ W5 extends H<(ConcreteClass, int)>,
+ W6 extends H<(Class<ConcreteClass>, int)>,
+ W7 extends H<(Object, int)>,
+ W8 extends H<(int, int)>>() {}
diff --git a/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.expect b/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.expect
index dcc025f..fbe9d60 100644
--- a/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:14:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:16:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -10,7 +10,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:22:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:24:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -18,7 +18,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:34:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:32:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:40:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:48:9: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:60:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -26,7 +50,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:42:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:68:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -34,7 +58,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:53:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:76:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:84:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:92:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:103:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -42,7 +90,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:61:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:111:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -50,7 +98,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:72:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:119:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:127:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:135:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:146:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -58,7 +130,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:80:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:154:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -66,7 +138,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:91:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:162:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:170:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:178:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:189:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -74,7 +170,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:99:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:197:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -82,7 +178,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:110:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:205:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:213:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:221:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:232:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -90,7 +210,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:118:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:240:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -98,7 +218,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:130:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:248:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:256:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:264:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:276:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -106,7 +250,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:138:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:284:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -114,7 +258,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:167:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:292:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:300:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:308:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:361:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -122,7 +290,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:175:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:369:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -130,7 +298,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:186:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:377:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:385:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:393:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:404:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -138,7 +330,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:194:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:412:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -146,7 +338,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:20:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:420:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:428:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:436:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:22:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -156,7 +372,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:21:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:23:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -165,7 +381,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:28:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:30:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -175,16 +391,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:29:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:31:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:40:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:38:21: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:39:21: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:46:22: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:47:22: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:52:20: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:53:20: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:54:20: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:55:20: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:66:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -194,7 +487,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:41:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:67:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -203,7 +496,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:48:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:74:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -213,16 +506,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:49:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:75:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:59:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:82:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:83:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:90:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:91:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:96:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:97:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:98:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:99:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:109:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -232,7 +602,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:60:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:110:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -241,7 +611,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:67:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:117:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -251,16 +621,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:68:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:118:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:78:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:125:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:126:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:133:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:134:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:139:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:140:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:141:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:142:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:152:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -270,7 +717,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:79:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:153:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -279,7 +726,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:86:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:160:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -289,16 +736,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:87:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:161:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:97:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:168:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:169:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:176:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:177:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:182:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:183:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:184:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:185:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:195:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -308,7 +832,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:98:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:196:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -317,7 +841,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:105:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:203:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -327,16 +851,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:106:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:204:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:116:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:211:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:212:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:219:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:220:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:225:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:226:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:227:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:228:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:238:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -346,7 +947,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:117:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:239:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -355,7 +956,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:124:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:246:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -365,16 +966,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:125:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:247:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:136:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:254:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:255:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:262:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:263:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:268:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:269:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:270:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:271:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:282:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -384,7 +1062,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:137:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:283:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -393,7 +1071,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:144:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:290:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -403,16 +1081,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:145:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:291:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:173:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:298:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:299:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:306:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:307:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:312:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:313:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:314:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:315:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:367:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -422,7 +1177,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:174:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:368:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -431,7 +1186,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:181:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:375:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -441,16 +1196,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:182:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:376:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:192:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:383:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:384:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:391:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:392:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:397:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:398:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:399:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:400:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:410:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -460,7 +1292,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:193:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:411:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -469,7 +1301,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:200:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:418:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -479,35 +1311,291 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:201:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:419:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:147:3: Error: Type argument 'ConcreteClass' doesn't conform to the bound 'int' of the type variable 'T8' on 'Enum1'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:426:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:427:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:434:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:435:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:440:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:441:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:442:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:443:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument 'ConcreteClass' doesn't conform to the bound 'int' of the type variable 'T8' on 'Enum1'.
// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// a<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:137:5: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:283:5: Context: This is the type variable whose bound isn't conformed to.
// T8 extends F<int>, // Error
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:147:3: Error: Type argument 'G<ConcreteClass>' doesn't conform to the bound 'G<int>' of the type variable 'S8' on 'Enum1'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument 'G<ConcreteClass>' doesn't conform to the bound 'G<int>' of the type variable 'S8' on 'Enum1'.
// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// a<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:145:5: Context: This is the type variable whose bound isn't conformed to.
-// S8 extends G<int> // Error
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:291:5: Context: This is the type variable whose bound isn't conformed to.
+// S8 extends G<int>, // Error
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:212:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(int, int)' of the type variable 'U8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:299:5: Context: This is the type variable whose bound isn't conformed to.
+// U8 extends (F<int>, int), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V1' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:300:5: Context: This is the type variable whose bound isn't conformed to.
+// V1 extends ({G a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<dynamic> a, int b})' of the type variable 'V2' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:301:5: Context: This is the type variable whose bound isn't conformed to.
+// V2 extends ({G<dynamic> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V3' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:302:5: Context: This is the type variable whose bound isn't conformed to.
+// V3 extends ({G<Class> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V4' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:303:5: Context: This is the type variable whose bound isn't conformed to.
+// V4 extends ({G<Class<dynamic>> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<ConcreteClass> a, int b})' of the type variable 'V5' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:304:5: Context: This is the type variable whose bound isn't conformed to.
+// V5 extends ({G<ConcreteClass> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<ConcreteClass>> a, int b})' of the type variable 'V6' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:305:5: Context: This is the type variable whose bound isn't conformed to.
+// V6 extends ({G<Class<ConcreteClass>> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Object> a, int b})' of the type variable 'V7' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:306:5: Context: This is the type variable whose bound isn't conformed to.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<int> a, int b})' of the type variable 'V8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:307:5: Context: This is the type variable whose bound isn't conformed to.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W1' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:308:5: Context: This is the type variable whose bound isn't conformed to.
+// W1 extends H, // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<dynamic>' of the type variable 'W2' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:309:5: Context: This is the type variable whose bound isn't conformed to.
+// W2 extends H<dynamic>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W3' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:310:5: Context: This is the type variable whose bound isn't conformed to.
+// W3 extends H<(Class, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W4' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:311:5: Context: This is the type variable whose bound isn't conformed to.
+// W4 extends H<(Class<dynamic>, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(ConcreteClass, int)>' of the type variable 'W5' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:312:5: Context: This is the type variable whose bound isn't conformed to.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<ConcreteClass>, int)>' of the type variable 'W6' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:313:5: Context: This is the type variable whose bound isn't conformed to.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Object, int)>' of the type variable 'W7' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:314:5: Context: This is the type variable whose bound isn't conformed to.
+// W7 extends H<(Object, int)>, // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(int, int)>' of the type variable 'W8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:315:5: Context: This is the type variable whose bound isn't conformed to.
+// W8 extends H<(int, int)> // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:454:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -517,7 +1605,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:213:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:455:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -526,7 +1614,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:220:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:462:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -536,16 +1624,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:221:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:463:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:230:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:470:19: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:471:19: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:478:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:479:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:484:18: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:485:18: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:486:18: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:487:18: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:496:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -555,7 +1720,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:231:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:497:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -564,7 +1729,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:238:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:504:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -574,27 +1739,105 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:239:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:505:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:129:6: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:512:19: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:513:19: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:520:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:521:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:526:18: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:527:18: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:528:18: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:529:18: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:275:6: Error: Constant evaluation error:
// enum Enum1<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:129:6: Context: Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>>'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:275:6: Context: Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>, (Class<dynamic>, int), (dynamic, int), (Class<dynamic>, int), (Class<dynamic>, int), (ConcreteClass, int), (Class<ConcreteClass>, int), (Object, int), (int, int), ({G<Class<dynamic>> a, int b}), ({G<dynamic> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<ConcreteClass> a, int b}), ({G<Class<ConcreteClass>> a, int b}), ({G<Object> a, int b}), ({G<int> a, int b}), H<(Class<dynamic>, int)>, H<dynamic>, H<(Class<dynamic>, int)>, H<(Class<dynamic>, int)>, H<(ConcreteClass, int)>, H<(Class<ConcreteClass>, int)>, H<(Object, int)>, H<(int, int)>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)>'.
// - 'Enum1' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'Object' is from 'dart:core'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// enum Enum1<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:129:6: Context: While analyzing:
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:275:6: Context: While analyzing:
// enum Enum1<
// ^
//
@@ -602,9 +1845,9 @@
import "dart:core" as core;
typedef F<X extends self::Class<X> = self::Class<dynamic>> = X;
-typedef Typedef1<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
-typedef Typedef2 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void;
-typedef Typedef3<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
+typedef Typedef1<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic, unrelated U1 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U2 extends (dynamic, core::int) = dynamic, unrelated U3 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U4 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U5 extends (self::ConcreteClass, core::int) = dynamic, unrelated U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, unrelated U7 extends (core::Object, core::int) = dynamic, unrelated U8 extends (core::int, core::int) = dynamic, unrelated V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, unrelated V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, unrelated V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, unrelated V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, unrelated V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, unrelated W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W2 extends self::H<dynamic> = dynamic, unrelated W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, unrelated W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, unrelated W7 extends self::H<(core::Object, core::int)> = dynamic, unrelated W8 extends self::H<(core::int, core::int)> = dynamic> = () → void;
+typedef Typedef2 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic>() → void;
+typedef Typedef3<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic, unrelated U1 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U2 extends (dynamic, core::int) = dynamic, unrelated U3 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U4 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U5 extends (self::ConcreteClass, core::int) = dynamic, unrelated U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, unrelated U7 extends (core::Object, core::int) = dynamic, unrelated U8 extends (core::int, core::int) = dynamic, unrelated V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, unrelated V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, unrelated V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, unrelated V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, unrelated V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, unrelated W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W2 extends self::H<dynamic> = dynamic, unrelated W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, unrelated W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, unrelated W7 extends self::H<(core::Object, core::int)> = dynamic, unrelated W8 extends self::H<(core::int, core::int)> = dynamic> = () → void;
abstract class Class<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
}
class ConcreteClass extends core::Object implements self::Class<self::ConcreteClass> {
@@ -617,50 +1860,56 @@
: super core::Object::•()
;
}
-class Class1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object {
- synthetic constructor •() → self::Class1<self::Class1::T1, self::Class1::T2%, self::Class1::T3, self::Class1::T4, self::Class1::T5, self::Class1::T6, self::Class1::T7, self::Class1::T8, self::Class1::S1, self::Class1::S2, self::Class1::S3, self::Class1::S4, self::Class1::S5, self::Class1::S6, self::Class1::S7, self::Class1::S8>
+class H<X extends (self::Class<self::H::X>, core::int) = (self::Class<dynamic>, core::int)> extends core::Object {
+ synthetic constructor •() → self::H<self::H::X>
: super core::Object::•()
;
}
-class Class2<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> = core::Object with self::Class<dynamic> /*hasConstConstructor*/ {
- const synthetic constructor •() → self::Class2<self::Class2::T1, self::Class2::T2%, self::Class2::T3, self::Class2::T4, self::Class2::T5, self::Class2::T6, self::Class2::T7, self::Class2::T8, self::Class2::S1, self::Class2::S2, self::Class2::S3, self::Class2::S4, self::Class2::S5, self::Class2::S6, self::Class2::S7, self::Class2::S8>
+class Class1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class1<self::Class1::T1, self::Class1::T2%, self::Class1::T3, self::Class1::T4, self::Class1::T5, self::Class1::T6, self::Class1::T7, self::Class1::T8, self::Class1::S1, self::Class1::S2, self::Class1::S3, self::Class1::S4, self::Class1::S5, self::Class1::S6, self::Class1::S7, self::Class1::S8, self::Class1::U1, self::Class1::U2, self::Class1::U3, self::Class1::U4, self::Class1::U5, self::Class1::U6, self::Class1::U7, self::Class1::U8, self::Class1::V1, self::Class1::V2, self::Class1::V3, self::Class1::V4, self::Class1::V5, self::Class1::V6, self::Class1::V7, self::Class1::V8, self::Class1::W1, self::Class1::W2, self::Class1::W3, self::Class1::W4, self::Class1::W5, self::Class1::W6, self::Class1::W7, self::Class1::W8>
: super core::Object::•()
;
}
-abstract class Mixin1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object /*isMixinDeclaration*/ {
+class Class2<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> = core::Object with self::Class<dynamic> /*hasConstConstructor*/ {
+ const synthetic constructor •() → self::Class2<self::Class2::T1, self::Class2::T2%, self::Class2::T3, self::Class2::T4, self::Class2::T5, self::Class2::T6, self::Class2::T7, self::Class2::T8, self::Class2::S1, self::Class2::S2, self::Class2::S3, self::Class2::S4, self::Class2::S5, self::Class2::S6, self::Class2::S7, self::Class2::S8, self::Class2::U1, self::Class2::U2, self::Class2::U3, self::Class2::U4, self::Class2::U5, self::Class2::U6, self::Class2::U7, self::Class2::U8, self::Class2::V1, self::Class2::V2, self::Class2::V3, self::Class2::V4, self::Class2::V5, self::Class2::V6, self::Class2::V7, self::Class2::V8, self::Class2::W1, self::Class2::W2, self::Class2::W3, self::Class2::W4, self::Class2::W5, self::Class2::W6, self::Class2::W7, self::Class2::W8>
+ : super core::Object::•()
+ ;
}
-class Enum1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::_Enum /*isEnum*/ {
- static const field core::List<self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>> values = invalid-expression "Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>>'.
+abstract class Mixin1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::Object /*isMixinDeclaration*/ {
+}
+class Enum1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>> values = invalid-expression "Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>, (Class<dynamic>, int), (dynamic, int), (Class<dynamic>, int), (Class<dynamic>, int), (ConcreteClass, int), (Class<ConcreteClass>, int), (Object, int), (int, int), ({G<Class<dynamic>> a, int b}), ({G<dynamic> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<ConcreteClass> a, int b}), ({G<Class<ConcreteClass>> a, int b}), ({G<Object> a, int b}), ({G<int> a, int b}), H<(Class<dynamic>, int)>, H<dynamic>, H<(Class<dynamic>, int)>, H<(Class<dynamic>, int)>, H<(ConcreteClass, int)>, H<(Class<ConcreteClass>, int)>, H<(Object, int)>, H<(int, int)>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)>'.
- 'Enum1' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- - 'Object' is from 'dart:core'.";
- enum-element static const field self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>> a = #C3;
- const constructor •(core::int #index, core::String #name) → self::Enum1<self::Enum1::T1, self::Enum1::T2%, self::Enum1::T3, self::Enum1::T4, self::Enum1::T5, self::Enum1::T6, self::Enum1::T7, self::Enum1::T8, self::Enum1::S1, self::Enum1::S2, self::Enum1::S3, self::Enum1::S4, self::Enum1::S5, self::Enum1::S6, self::Enum1::S7, self::Enum1::S8>
+ - 'Object' is from 'dart:core'.
+ - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.";
+ enum-element static const field self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int)> a = #C3;
+ const constructor •(core::int #index, core::String #name) → self::Enum1<self::Enum1::T1, self::Enum1::T2%, self::Enum1::T3, self::Enum1::T4, self::Enum1::T5, self::Enum1::T6, self::Enum1::T7, self::Enum1::T8, self::Enum1::S1, self::Enum1::S2, self::Enum1::S3, self::Enum1::S4, self::Enum1::S5, self::Enum1::S6, self::Enum1::S7, self::Enum1::S8, self::Enum1::U1, self::Enum1::U2, self::Enum1::U3, self::Enum1::U4, self::Enum1::U5, self::Enum1::U6, self::Enum1::U7, self::Enum1::U8, self::Enum1::V1, self::Enum1::V2, self::Enum1::V3, self::Enum1::V4, self::Enum1::V5, self::Enum1::V6, self::Enum1::V7, self::Enum1::V8, self::Enum1::W1, self::Enum1::W2, self::Enum1::W3, self::Enum1::W4, self::Enum1::W5, self::Enum1::W6, self::Enum1::W7, self::Enum1::W8>
: super core::_Enum::•(#index, #name)
;
method _enumToString() → core::String
return "Enum1.${this.{core::_Enum::_name}{core::String}}";
}
-extension Extension<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> on self::Class<dynamic> {
+extension Extension<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> on self::Class<dynamic> {
}
-static method method1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void {}
+static method method1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic>() → void {}
static method test() → dynamic {
- function local1<T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>>() → void {}
- <T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>>() → void local;
+ function local1<T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>, U1 extends (self::Class<dynamic>, core::int), U2 extends (dynamic, core::int), U3 extends (self::Class<dynamic>, core::int), U4 extends (self::Class<dynamic>, core::int), U5 extends (self::ConcreteClass, core::int), U6 extends (self::Class<self::ConcreteClass>, core::int), U7 extends (core::Object, core::int), U8 extends (core::int, core::int), V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V2 extends ({required a: self::G<dynamic>, required b: core::int}), V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}), V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}), V7 extends ({required a: self::G<core::Object>, required b: core::int}), V8 extends ({required a: self::G<core::int>, required b: core::int}), W1 extends self::H<(self::Class<dynamic>, core::int)>, W2 extends self::H<dynamic>, W3 extends self::H<(self::Class<dynamic>, core::int)>, W4 extends self::H<(self::Class<dynamic>, core::int)>, W5 extends self::H<(self::ConcreteClass, core::int)>, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)>, W7 extends self::H<(core::Object, core::int)>, W8 extends self::H<(core::int, core::int)>>() → void {}
+ <T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>, U1 extends (self::Class<dynamic>, core::int), U2 extends (dynamic, core::int), U3 extends (self::Class<dynamic>, core::int), U4 extends (self::Class<dynamic>, core::int), U5 extends (self::ConcreteClass, core::int), U6 extends (self::Class<self::ConcreteClass>, core::int), U7 extends (core::Object, core::int), U8 extends (core::int, core::int), V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V2 extends ({required a: self::G<dynamic>, required b: core::int}), V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}), V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}), V7 extends ({required a: self::G<core::Object>, required b: core::int}), V8 extends ({required a: self::G<core::int>, required b: core::int}), W1 extends self::H<(self::Class<dynamic>, core::int)>, W2 extends self::H<dynamic>, W3 extends self::H<(self::Class<dynamic>, core::int)>, W4 extends self::H<(self::Class<dynamic>, core::int)>, W5 extends self::H<(self::ConcreteClass, core::int)>, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)>, W7 extends self::H<(core::Object, core::int)>, W8 extends self::H<(core::int, core::int)>>() → void local;
}
static method main() → dynamic {}
constants {
#C1 = 0
#C2 = "a"
- #C3 = self::Enum1<self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*> {index:#C1, _name:#C2}
+ #C3 = self::Enum1<self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*> {index:#C1, _name:#C2}
}
Constructor coverage from constants:
org-dartlang-testcase:///bounds_type_parameters.dart:
-- Enum1. (from org-dartlang-testcase:///bounds_type_parameters.dart:129:6)
+- Enum1. (from org-dartlang-testcase:///bounds_type_parameters.dart:275:6)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.modular.expect
index dcc025f..fbe9d60 100644
--- a/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.modular.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:14:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:16:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -10,7 +10,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:22:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:24:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -18,7 +18,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:34:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:32:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:40:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:48:9: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:60:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -26,7 +50,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:42:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:68:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -34,7 +58,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:53:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:76:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:84:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:92:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:103:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -42,7 +90,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:61:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:111:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -50,7 +98,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:72:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:119:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:127:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:135:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:146:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -58,7 +130,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:80:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:154:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -66,7 +138,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:91:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:162:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:170:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:178:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:189:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -74,7 +170,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:99:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:197:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -82,7 +178,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:110:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:205:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:213:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:221:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:232:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -90,7 +210,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:118:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:240:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -98,7 +218,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:130:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:248:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:256:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:264:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:276:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -106,7 +250,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:138:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:284:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -114,7 +258,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:167:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:292:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:300:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:308:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:361:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -122,7 +290,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:175:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:369:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -130,7 +298,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:186:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:377:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:385:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:393:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:404:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -138,7 +330,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:194:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:412:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -146,7 +338,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:20:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:420:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:428:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:436:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:22:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -156,7 +372,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:21:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:23:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -165,7 +381,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:28:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:30:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -175,16 +391,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:29:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:31:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:40:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:38:21: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:39:21: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:46:22: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:47:22: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:52:20: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:53:20: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:54:20: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:55:20: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:66:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -194,7 +487,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:41:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:67:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -203,7 +496,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:48:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:74:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -213,16 +506,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:49:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:75:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:59:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:82:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:83:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:90:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:91:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:96:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:97:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:98:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:99:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:109:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -232,7 +602,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:60:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:110:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -241,7 +611,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:67:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:117:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -251,16 +621,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:68:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:118:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:78:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:125:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:126:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:133:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:134:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:139:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:140:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:141:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:142:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:152:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -270,7 +717,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:79:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:153:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -279,7 +726,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:86:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:160:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -289,16 +736,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:87:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:161:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:97:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:168:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:169:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:176:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:177:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:182:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:183:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:184:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:185:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:195:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -308,7 +832,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:98:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:196:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -317,7 +841,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:105:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:203:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -327,16 +851,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:106:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:204:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:116:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:211:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:212:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:219:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:220:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:225:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:226:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:227:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:228:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:238:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -346,7 +947,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:117:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:239:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -355,7 +956,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:124:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:246:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -365,16 +966,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:125:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:247:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:136:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:254:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:255:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:262:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:263:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:268:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:269:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:270:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:271:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:282:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -384,7 +1062,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:137:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:283:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -393,7 +1071,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:144:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:290:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -403,16 +1081,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:145:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:291:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:173:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:298:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:299:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:306:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:307:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:312:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:313:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:314:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:315:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:367:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -422,7 +1177,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:174:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:368:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -431,7 +1186,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:181:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:375:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -441,16 +1196,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:182:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:376:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:192:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:383:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:384:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:391:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:392:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:397:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:398:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:399:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:400:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:410:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -460,7 +1292,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:193:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:411:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -469,7 +1301,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:200:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:418:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -479,35 +1311,291 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:201:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:419:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:147:3: Error: Type argument 'ConcreteClass' doesn't conform to the bound 'int' of the type variable 'T8' on 'Enum1'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:426:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:427:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:434:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:435:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:440:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:441:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:442:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:443:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument 'ConcreteClass' doesn't conform to the bound 'int' of the type variable 'T8' on 'Enum1'.
// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// a<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:137:5: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:283:5: Context: This is the type variable whose bound isn't conformed to.
// T8 extends F<int>, // Error
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:147:3: Error: Type argument 'G<ConcreteClass>' doesn't conform to the bound 'G<int>' of the type variable 'S8' on 'Enum1'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument 'G<ConcreteClass>' doesn't conform to the bound 'G<int>' of the type variable 'S8' on 'Enum1'.
// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// a<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:145:5: Context: This is the type variable whose bound isn't conformed to.
-// S8 extends G<int> // Error
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:291:5: Context: This is the type variable whose bound isn't conformed to.
+// S8 extends G<int>, // Error
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:212:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(int, int)' of the type variable 'U8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:299:5: Context: This is the type variable whose bound isn't conformed to.
+// U8 extends (F<int>, int), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V1' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:300:5: Context: This is the type variable whose bound isn't conformed to.
+// V1 extends ({G a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<dynamic> a, int b})' of the type variable 'V2' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:301:5: Context: This is the type variable whose bound isn't conformed to.
+// V2 extends ({G<dynamic> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V3' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:302:5: Context: This is the type variable whose bound isn't conformed to.
+// V3 extends ({G<Class> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V4' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:303:5: Context: This is the type variable whose bound isn't conformed to.
+// V4 extends ({G<Class<dynamic>> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<ConcreteClass> a, int b})' of the type variable 'V5' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:304:5: Context: This is the type variable whose bound isn't conformed to.
+// V5 extends ({G<ConcreteClass> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<ConcreteClass>> a, int b})' of the type variable 'V6' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:305:5: Context: This is the type variable whose bound isn't conformed to.
+// V6 extends ({G<Class<ConcreteClass>> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Object> a, int b})' of the type variable 'V7' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:306:5: Context: This is the type variable whose bound isn't conformed to.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<int> a, int b})' of the type variable 'V8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:307:5: Context: This is the type variable whose bound isn't conformed to.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W1' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:308:5: Context: This is the type variable whose bound isn't conformed to.
+// W1 extends H, // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<dynamic>' of the type variable 'W2' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:309:5: Context: This is the type variable whose bound isn't conformed to.
+// W2 extends H<dynamic>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W3' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:310:5: Context: This is the type variable whose bound isn't conformed to.
+// W3 extends H<(Class, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W4' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:311:5: Context: This is the type variable whose bound isn't conformed to.
+// W4 extends H<(Class<dynamic>, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(ConcreteClass, int)>' of the type variable 'W5' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:312:5: Context: This is the type variable whose bound isn't conformed to.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<ConcreteClass>, int)>' of the type variable 'W6' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:313:5: Context: This is the type variable whose bound isn't conformed to.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Object, int)>' of the type variable 'W7' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:314:5: Context: This is the type variable whose bound isn't conformed to.
+// W7 extends H<(Object, int)>, // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(int, int)>' of the type variable 'W8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:315:5: Context: This is the type variable whose bound isn't conformed to.
+// W8 extends H<(int, int)> // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:454:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -517,7 +1605,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:213:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:455:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -526,7 +1614,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:220:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:462:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -536,16 +1624,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:221:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:463:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:230:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:470:19: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:471:19: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:478:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:479:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:484:18: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:485:18: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:486:18: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:487:18: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:496:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -555,7 +1720,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:231:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:497:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -564,7 +1729,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:238:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:504:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -574,27 +1739,105 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:239:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:505:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:129:6: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:512:19: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:513:19: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:520:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:521:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:526:18: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:527:18: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:528:18: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:529:18: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:275:6: Error: Constant evaluation error:
// enum Enum1<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:129:6: Context: Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>>'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:275:6: Context: Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>, (Class<dynamic>, int), (dynamic, int), (Class<dynamic>, int), (Class<dynamic>, int), (ConcreteClass, int), (Class<ConcreteClass>, int), (Object, int), (int, int), ({G<Class<dynamic>> a, int b}), ({G<dynamic> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<ConcreteClass> a, int b}), ({G<Class<ConcreteClass>> a, int b}), ({G<Object> a, int b}), ({G<int> a, int b}), H<(Class<dynamic>, int)>, H<dynamic>, H<(Class<dynamic>, int)>, H<(Class<dynamic>, int)>, H<(ConcreteClass, int)>, H<(Class<ConcreteClass>, int)>, H<(Object, int)>, H<(int, int)>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)>'.
// - 'Enum1' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'Object' is from 'dart:core'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// enum Enum1<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:129:6: Context: While analyzing:
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:275:6: Context: While analyzing:
// enum Enum1<
// ^
//
@@ -602,9 +1845,9 @@
import "dart:core" as core;
typedef F<X extends self::Class<X> = self::Class<dynamic>> = X;
-typedef Typedef1<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
-typedef Typedef2 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void;
-typedef Typedef3<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
+typedef Typedef1<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic, unrelated U1 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U2 extends (dynamic, core::int) = dynamic, unrelated U3 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U4 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U5 extends (self::ConcreteClass, core::int) = dynamic, unrelated U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, unrelated U7 extends (core::Object, core::int) = dynamic, unrelated U8 extends (core::int, core::int) = dynamic, unrelated V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, unrelated V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, unrelated V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, unrelated V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, unrelated V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, unrelated W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W2 extends self::H<dynamic> = dynamic, unrelated W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, unrelated W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, unrelated W7 extends self::H<(core::Object, core::int)> = dynamic, unrelated W8 extends self::H<(core::int, core::int)> = dynamic> = () → void;
+typedef Typedef2 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic>() → void;
+typedef Typedef3<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic, unrelated U1 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U2 extends (dynamic, core::int) = dynamic, unrelated U3 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U4 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U5 extends (self::ConcreteClass, core::int) = dynamic, unrelated U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, unrelated U7 extends (core::Object, core::int) = dynamic, unrelated U8 extends (core::int, core::int) = dynamic, unrelated V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, unrelated V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, unrelated V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, unrelated V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, unrelated V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, unrelated W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W2 extends self::H<dynamic> = dynamic, unrelated W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, unrelated W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, unrelated W7 extends self::H<(core::Object, core::int)> = dynamic, unrelated W8 extends self::H<(core::int, core::int)> = dynamic> = () → void;
abstract class Class<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
}
class ConcreteClass extends core::Object implements self::Class<self::ConcreteClass> {
@@ -617,50 +1860,56 @@
: super core::Object::•()
;
}
-class Class1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object {
- synthetic constructor •() → self::Class1<self::Class1::T1, self::Class1::T2%, self::Class1::T3, self::Class1::T4, self::Class1::T5, self::Class1::T6, self::Class1::T7, self::Class1::T8, self::Class1::S1, self::Class1::S2, self::Class1::S3, self::Class1::S4, self::Class1::S5, self::Class1::S6, self::Class1::S7, self::Class1::S8>
+class H<X extends (self::Class<self::H::X>, core::int) = (self::Class<dynamic>, core::int)> extends core::Object {
+ synthetic constructor •() → self::H<self::H::X>
: super core::Object::•()
;
}
-class Class2<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> = core::Object with self::Class<dynamic> /*hasConstConstructor*/ {
- const synthetic constructor •() → self::Class2<self::Class2::T1, self::Class2::T2%, self::Class2::T3, self::Class2::T4, self::Class2::T5, self::Class2::T6, self::Class2::T7, self::Class2::T8, self::Class2::S1, self::Class2::S2, self::Class2::S3, self::Class2::S4, self::Class2::S5, self::Class2::S6, self::Class2::S7, self::Class2::S8>
+class Class1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class1<self::Class1::T1, self::Class1::T2%, self::Class1::T3, self::Class1::T4, self::Class1::T5, self::Class1::T6, self::Class1::T7, self::Class1::T8, self::Class1::S1, self::Class1::S2, self::Class1::S3, self::Class1::S4, self::Class1::S5, self::Class1::S6, self::Class1::S7, self::Class1::S8, self::Class1::U1, self::Class1::U2, self::Class1::U3, self::Class1::U4, self::Class1::U5, self::Class1::U6, self::Class1::U7, self::Class1::U8, self::Class1::V1, self::Class1::V2, self::Class1::V3, self::Class1::V4, self::Class1::V5, self::Class1::V6, self::Class1::V7, self::Class1::V8, self::Class1::W1, self::Class1::W2, self::Class1::W3, self::Class1::W4, self::Class1::W5, self::Class1::W6, self::Class1::W7, self::Class1::W8>
: super core::Object::•()
;
}
-abstract class Mixin1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object /*isMixinDeclaration*/ {
+class Class2<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> = core::Object with self::Class<dynamic> /*hasConstConstructor*/ {
+ const synthetic constructor •() → self::Class2<self::Class2::T1, self::Class2::T2%, self::Class2::T3, self::Class2::T4, self::Class2::T5, self::Class2::T6, self::Class2::T7, self::Class2::T8, self::Class2::S1, self::Class2::S2, self::Class2::S3, self::Class2::S4, self::Class2::S5, self::Class2::S6, self::Class2::S7, self::Class2::S8, self::Class2::U1, self::Class2::U2, self::Class2::U3, self::Class2::U4, self::Class2::U5, self::Class2::U6, self::Class2::U7, self::Class2::U8, self::Class2::V1, self::Class2::V2, self::Class2::V3, self::Class2::V4, self::Class2::V5, self::Class2::V6, self::Class2::V7, self::Class2::V8, self::Class2::W1, self::Class2::W2, self::Class2::W3, self::Class2::W4, self::Class2::W5, self::Class2::W6, self::Class2::W7, self::Class2::W8>
+ : super core::Object::•()
+ ;
}
-class Enum1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::_Enum /*isEnum*/ {
- static const field core::List<self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>> values = invalid-expression "Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>>'.
+abstract class Mixin1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::Object /*isMixinDeclaration*/ {
+}
+class Enum1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>> values = invalid-expression "Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>, (Class<dynamic>, int), (dynamic, int), (Class<dynamic>, int), (Class<dynamic>, int), (ConcreteClass, int), (Class<ConcreteClass>, int), (Object, int), (int, int), ({G<Class<dynamic>> a, int b}), ({G<dynamic> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<ConcreteClass> a, int b}), ({G<Class<ConcreteClass>> a, int b}), ({G<Object> a, int b}), ({G<int> a, int b}), H<(Class<dynamic>, int)>, H<dynamic>, H<(Class<dynamic>, int)>, H<(Class<dynamic>, int)>, H<(ConcreteClass, int)>, H<(Class<ConcreteClass>, int)>, H<(Object, int)>, H<(int, int)>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)>'.
- 'Enum1' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- - 'Object' is from 'dart:core'.";
- enum-element static const field self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>> a = #C3;
- const constructor •(core::int #index, core::String #name) → self::Enum1<self::Enum1::T1, self::Enum1::T2%, self::Enum1::T3, self::Enum1::T4, self::Enum1::T5, self::Enum1::T6, self::Enum1::T7, self::Enum1::T8, self::Enum1::S1, self::Enum1::S2, self::Enum1::S3, self::Enum1::S4, self::Enum1::S5, self::Enum1::S6, self::Enum1::S7, self::Enum1::S8>
+ - 'Object' is from 'dart:core'.
+ - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.";
+ enum-element static const field self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int)> a = #C3;
+ const constructor •(core::int #index, core::String #name) → self::Enum1<self::Enum1::T1, self::Enum1::T2%, self::Enum1::T3, self::Enum1::T4, self::Enum1::T5, self::Enum1::T6, self::Enum1::T7, self::Enum1::T8, self::Enum1::S1, self::Enum1::S2, self::Enum1::S3, self::Enum1::S4, self::Enum1::S5, self::Enum1::S6, self::Enum1::S7, self::Enum1::S8, self::Enum1::U1, self::Enum1::U2, self::Enum1::U3, self::Enum1::U4, self::Enum1::U5, self::Enum1::U6, self::Enum1::U7, self::Enum1::U8, self::Enum1::V1, self::Enum1::V2, self::Enum1::V3, self::Enum1::V4, self::Enum1::V5, self::Enum1::V6, self::Enum1::V7, self::Enum1::V8, self::Enum1::W1, self::Enum1::W2, self::Enum1::W3, self::Enum1::W4, self::Enum1::W5, self::Enum1::W6, self::Enum1::W7, self::Enum1::W8>
: super core::_Enum::•(#index, #name)
;
method _enumToString() → core::String
return "Enum1.${this.{core::_Enum::_name}{core::String}}";
}
-extension Extension<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> on self::Class<dynamic> {
+extension Extension<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> on self::Class<dynamic> {
}
-static method method1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void {}
+static method method1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic>() → void {}
static method test() → dynamic {
- function local1<T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>>() → void {}
- <T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>>() → void local;
+ function local1<T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>, U1 extends (self::Class<dynamic>, core::int), U2 extends (dynamic, core::int), U3 extends (self::Class<dynamic>, core::int), U4 extends (self::Class<dynamic>, core::int), U5 extends (self::ConcreteClass, core::int), U6 extends (self::Class<self::ConcreteClass>, core::int), U7 extends (core::Object, core::int), U8 extends (core::int, core::int), V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V2 extends ({required a: self::G<dynamic>, required b: core::int}), V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}), V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}), V7 extends ({required a: self::G<core::Object>, required b: core::int}), V8 extends ({required a: self::G<core::int>, required b: core::int}), W1 extends self::H<(self::Class<dynamic>, core::int)>, W2 extends self::H<dynamic>, W3 extends self::H<(self::Class<dynamic>, core::int)>, W4 extends self::H<(self::Class<dynamic>, core::int)>, W5 extends self::H<(self::ConcreteClass, core::int)>, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)>, W7 extends self::H<(core::Object, core::int)>, W8 extends self::H<(core::int, core::int)>>() → void {}
+ <T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>, U1 extends (self::Class<dynamic>, core::int), U2 extends (dynamic, core::int), U3 extends (self::Class<dynamic>, core::int), U4 extends (self::Class<dynamic>, core::int), U5 extends (self::ConcreteClass, core::int), U6 extends (self::Class<self::ConcreteClass>, core::int), U7 extends (core::Object, core::int), U8 extends (core::int, core::int), V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V2 extends ({required a: self::G<dynamic>, required b: core::int}), V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}), V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}), V7 extends ({required a: self::G<core::Object>, required b: core::int}), V8 extends ({required a: self::G<core::int>, required b: core::int}), W1 extends self::H<(self::Class<dynamic>, core::int)>, W2 extends self::H<dynamic>, W3 extends self::H<(self::Class<dynamic>, core::int)>, W4 extends self::H<(self::Class<dynamic>, core::int)>, W5 extends self::H<(self::ConcreteClass, core::int)>, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)>, W7 extends self::H<(core::Object, core::int)>, W8 extends self::H<(core::int, core::int)>>() → void local;
}
static method main() → dynamic {}
constants {
#C1 = 0
#C2 = "a"
- #C3 = self::Enum1<self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*> {index:#C1, _name:#C2}
+ #C3 = self::Enum1<self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*> {index:#C1, _name:#C2}
}
Constructor coverage from constants:
org-dartlang-testcase:///bounds_type_parameters.dart:
-- Enum1. (from org-dartlang-testcase:///bounds_type_parameters.dart:129:6)
+- Enum1. (from org-dartlang-testcase:///bounds_type_parameters.dart:275:6)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.outline.expect
index 5ce339c..5390c98 100644
--- a/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.outline.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:14:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:16:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -10,7 +10,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:22:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:24:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -18,7 +18,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:34:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:32:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:40:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:48:9: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:60:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -26,7 +50,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:42:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:68:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -34,7 +58,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:53:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:76:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:84:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:92:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:103:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -42,7 +90,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:61:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:111:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -50,7 +98,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:72:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:119:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:127:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:135:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:146:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -58,7 +130,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:80:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:154:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -66,7 +138,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:91:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:162:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:170:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:178:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:189:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -74,7 +170,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:99:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:197:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -82,7 +178,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:110:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:205:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:213:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:221:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:232:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -90,7 +210,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:118:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:240:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -98,7 +218,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:130:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:248:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:256:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:264:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:276:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -106,7 +250,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:138:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:284:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -114,7 +258,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:167:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:292:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:300:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:308:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:361:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -122,7 +290,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:175:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:369:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -130,7 +298,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:186:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:377:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:385:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:393:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:404:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -138,7 +330,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:194:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:412:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -146,7 +338,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:20:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:420:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:428:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:436:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:22:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -156,7 +372,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:21:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:23:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -165,7 +381,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:28:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:30:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -175,16 +391,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:29:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:31:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:40:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:38:21: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:39:21: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:46:22: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:47:22: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:52:20: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:53:20: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:54:20: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:55:20: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:66:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -194,7 +487,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:41:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:67:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -203,7 +496,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:48:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:74:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -213,16 +506,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:49:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:75:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:59:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:82:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:83:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:90:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:91:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:96:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:97:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:98:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:99:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:109:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -232,7 +602,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:60:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:110:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -241,7 +611,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:67:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:117:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -251,16 +621,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:68:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:118:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:78:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:125:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:126:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:133:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:134:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:139:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:140:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:141:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:142:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:152:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -270,7 +717,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:79:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:153:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -279,7 +726,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:86:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:160:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -289,16 +736,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:87:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:161:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:97:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:168:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:169:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:176:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:177:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:182:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:183:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:184:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:185:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:195:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -308,7 +832,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:98:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:196:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -317,7 +841,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:105:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:203:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -327,16 +851,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:106:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:204:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:116:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:211:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:212:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:219:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:220:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:225:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:226:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:227:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:228:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:238:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -346,7 +947,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:117:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:239:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -355,7 +956,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:124:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:246:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -365,16 +966,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:125:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:247:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:136:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:254:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:255:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:262:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:263:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:268:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:269:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:270:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:271:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:282:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -384,7 +1062,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:137:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:283:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -393,7 +1071,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:144:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:290:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -403,16 +1081,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:145:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:291:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:173:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:298:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:299:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:306:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:307:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:312:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:313:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:314:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:315:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:367:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -422,7 +1177,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:174:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:368:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -431,7 +1186,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:181:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:375:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -441,16 +1196,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:182:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:376:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:192:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:383:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:384:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:391:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:392:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:397:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:398:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:399:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:400:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:410:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -460,7 +1292,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:193:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:411:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -469,7 +1301,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:200:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:418:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -479,41 +1311,297 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:201:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:419:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:147:3: Error: Type argument 'ConcreteClass' doesn't conform to the bound 'int' of the type variable 'T8' on 'Enum1'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:426:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:427:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:434:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:435:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:440:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:441:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:442:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:443:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument 'ConcreteClass' doesn't conform to the bound 'int' of the type variable 'T8' on 'Enum1'.
// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// a<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:137:5: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:283:5: Context: This is the type variable whose bound isn't conformed to.
// T8 extends F<int>, // Error
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:147:3: Error: Type argument 'G<ConcreteClass>' doesn't conform to the bound 'G<int>' of the type variable 'S8' on 'Enum1'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument 'G<ConcreteClass>' doesn't conform to the bound 'G<int>' of the type variable 'S8' on 'Enum1'.
// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// a<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:145:5: Context: This is the type variable whose bound isn't conformed to.
-// S8 extends G<int> // Error
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:291:5: Context: This is the type variable whose bound isn't conformed to.
+// S8 extends G<int>, // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(int, int)' of the type variable 'U8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:299:5: Context: This is the type variable whose bound isn't conformed to.
+// U8 extends (F<int>, int), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V1' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:300:5: Context: This is the type variable whose bound isn't conformed to.
+// V1 extends ({G a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<dynamic> a, int b})' of the type variable 'V2' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:301:5: Context: This is the type variable whose bound isn't conformed to.
+// V2 extends ({G<dynamic> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V3' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:302:5: Context: This is the type variable whose bound isn't conformed to.
+// V3 extends ({G<Class> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V4' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:303:5: Context: This is the type variable whose bound isn't conformed to.
+// V4 extends ({G<Class<dynamic>> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<ConcreteClass> a, int b})' of the type variable 'V5' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:304:5: Context: This is the type variable whose bound isn't conformed to.
+// V5 extends ({G<ConcreteClass> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<ConcreteClass>> a, int b})' of the type variable 'V6' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:305:5: Context: This is the type variable whose bound isn't conformed to.
+// V6 extends ({G<Class<ConcreteClass>> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Object> a, int b})' of the type variable 'V7' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:306:5: Context: This is the type variable whose bound isn't conformed to.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<int> a, int b})' of the type variable 'V8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:307:5: Context: This is the type variable whose bound isn't conformed to.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W1' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:308:5: Context: This is the type variable whose bound isn't conformed to.
+// W1 extends H, // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<dynamic>' of the type variable 'W2' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:309:5: Context: This is the type variable whose bound isn't conformed to.
+// W2 extends H<dynamic>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W3' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:310:5: Context: This is the type variable whose bound isn't conformed to.
+// W3 extends H<(Class, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W4' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:311:5: Context: This is the type variable whose bound isn't conformed to.
+// W4 extends H<(Class<dynamic>, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(ConcreteClass, int)>' of the type variable 'W5' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:312:5: Context: This is the type variable whose bound isn't conformed to.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<ConcreteClass>, int)>' of the type variable 'W6' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:313:5: Context: This is the type variable whose bound isn't conformed to.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Object, int)>' of the type variable 'W7' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:314:5: Context: This is the type variable whose bound isn't conformed to.
+// W7 extends H<(Object, int)>, // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(int, int)>' of the type variable 'W8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:315:5: Context: This is the type variable whose bound isn't conformed to.
+// W8 extends H<(int, int)> // Error
// ^
//
import self as self;
import "dart:core" as core;
typedef F<X extends self::Class<X> = self::Class<dynamic>> = X;
-typedef Typedef1<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
-typedef Typedef2 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void;
-typedef Typedef3<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
+typedef Typedef1<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic, unrelated U1 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U2 extends (dynamic, core::int) = dynamic, unrelated U3 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U4 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U5 extends (self::ConcreteClass, core::int) = dynamic, unrelated U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, unrelated U7 extends (core::Object, core::int) = dynamic, unrelated U8 extends (core::int, core::int) = dynamic, unrelated V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, unrelated V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, unrelated V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, unrelated V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, unrelated V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, unrelated W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W2 extends self::H<dynamic> = dynamic, unrelated W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, unrelated W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, unrelated W7 extends self::H<(core::Object, core::int)> = dynamic, unrelated W8 extends self::H<(core::int, core::int)> = dynamic> = () → void;
+typedef Typedef2 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic>() → void;
+typedef Typedef3<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic, unrelated U1 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U2 extends (dynamic, core::int) = dynamic, unrelated U3 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U4 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U5 extends (self::ConcreteClass, core::int) = dynamic, unrelated U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, unrelated U7 extends (core::Object, core::int) = dynamic, unrelated U8 extends (core::int, core::int) = dynamic, unrelated V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, unrelated V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, unrelated V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, unrelated V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, unrelated V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, unrelated W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W2 extends self::H<dynamic> = dynamic, unrelated W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, unrelated W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, unrelated W7 extends self::H<(core::Object, core::int)> = dynamic, unrelated W8 extends self::H<(core::int, core::int)> = dynamic> = () → void;
abstract class Class<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
}
class ConcreteClass extends core::Object implements self::Class<self::ConcreteClass> {
@@ -524,29 +1612,33 @@
synthetic constructor •() → self::G<self::G::X>
;
}
-class Class1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object {
- synthetic constructor •() → self::Class1<self::Class1::T1, self::Class1::T2%, self::Class1::T3, self::Class1::T4, self::Class1::T5, self::Class1::T6, self::Class1::T7, self::Class1::T8, self::Class1::S1, self::Class1::S2, self::Class1::S3, self::Class1::S4, self::Class1::S5, self::Class1::S6, self::Class1::S7, self::Class1::S8>
+class H<X extends (self::Class<self::H::X>, core::int) = (self::Class<dynamic>, core::int)> extends core::Object {
+ synthetic constructor •() → self::H<self::H::X>
;
}
-class Class2<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> = core::Object with self::Class<dynamic> /*hasConstConstructor*/ {
- const synthetic constructor •() → self::Class2<self::Class2::T1, self::Class2::T2%, self::Class2::T3, self::Class2::T4, self::Class2::T5, self::Class2::T6, self::Class2::T7, self::Class2::T8, self::Class2::S1, self::Class2::S2, self::Class2::S3, self::Class2::S4, self::Class2::S5, self::Class2::S6, self::Class2::S7, self::Class2::S8>
+class Class1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class1<self::Class1::T1, self::Class1::T2%, self::Class1::T3, self::Class1::T4, self::Class1::T5, self::Class1::T6, self::Class1::T7, self::Class1::T8, self::Class1::S1, self::Class1::S2, self::Class1::S3, self::Class1::S4, self::Class1::S5, self::Class1::S6, self::Class1::S7, self::Class1::S8, self::Class1::U1, self::Class1::U2, self::Class1::U3, self::Class1::U4, self::Class1::U5, self::Class1::U6, self::Class1::U7, self::Class1::U8, self::Class1::V1, self::Class1::V2, self::Class1::V3, self::Class1::V4, self::Class1::V5, self::Class1::V6, self::Class1::V7, self::Class1::V8, self::Class1::W1, self::Class1::W2, self::Class1::W3, self::Class1::W4, self::Class1::W5, self::Class1::W6, self::Class1::W7, self::Class1::W8>
+ ;
+}
+class Class2<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> = core::Object with self::Class<dynamic> /*hasConstConstructor*/ {
+ const synthetic constructor •() → self::Class2<self::Class2::T1, self::Class2::T2%, self::Class2::T3, self::Class2::T4, self::Class2::T5, self::Class2::T6, self::Class2::T7, self::Class2::T8, self::Class2::S1, self::Class2::S2, self::Class2::S3, self::Class2::S4, self::Class2::S5, self::Class2::S6, self::Class2::S7, self::Class2::S8, self::Class2::U1, self::Class2::U2, self::Class2::U3, self::Class2::U4, self::Class2::U5, self::Class2::U6, self::Class2::U7, self::Class2::U8, self::Class2::V1, self::Class2::V2, self::Class2::V3, self::Class2::V4, self::Class2::V5, self::Class2::V6, self::Class2::V7, self::Class2::V8, self::Class2::W1, self::Class2::W2, self::Class2::W3, self::Class2::W4, self::Class2::W5, self::Class2::W6, self::Class2::W7, self::Class2::W8>
: super core::Object::•()
;
}
-abstract class Mixin1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object /*isMixinDeclaration*/ {
+abstract class Mixin1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::Object /*isMixinDeclaration*/ {
}
-class Enum1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::_Enum /*isEnum*/ {
- static const field core::List<self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>> values = const <self::Enum1<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, dynamic, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>>>[self::Enum1::a];
- enum-element static const field self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>> a = const self::Enum1::•<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>>(0, "a");
- const constructor •(core::int #index, core::String #name) → self::Enum1<self::Enum1::T1, self::Enum1::T2%, self::Enum1::T3, self::Enum1::T4, self::Enum1::T5, self::Enum1::T6, self::Enum1::T7, self::Enum1::T8, self::Enum1::S1, self::Enum1::S2, self::Enum1::S3, self::Enum1::S4, self::Enum1::S5, self::Enum1::S6, self::Enum1::S7, self::Enum1::S8>
+class Enum1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>> values = const <self::Enum1<self::Class<dynamic>, dynamic, self::Class<dynamic>, self::Class<dynamic>, self::ConcreteClass, self::Class<self::ConcreteClass>, dynamic, core::int, self::G<self::Class<dynamic>>, self::G<dynamic>, self::G<self::Class<dynamic>>, self::G<self::Class<dynamic>>, self::G<self::ConcreteClass>, self::G<self::Class<self::ConcreteClass>>, self::G<core::Object>, self::G<core::int>, (self::Class<dynamic>, core::int), (dynamic, core::int), (self::Class<dynamic>, core::int), (self::Class<dynamic>, core::int), (self::ConcreteClass, core::int), (self::Class<self::ConcreteClass>, core::int), (core::Object, core::int), (core::int, core::int), ({required a: self::G<self::Class<dynamic>>, required b: core::int}), ({required a: self::G<dynamic>, required b: core::int}), ({required a: self::G<self::Class<dynamic>>, required b: core::int}), ({required a: self::G<self::Class<dynamic>>, required b: core::int}), ({required a: self::G<self::ConcreteClass>, required b: core::int}), ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}), ({required a: self::G<core::Object>, required b: core::int}), ({required a: self::G<core::int>, required b: core::int}), self::H<(self::Class<dynamic>, core::int)>, self::H<dynamic>, self::H<(self::Class<dynamic>, core::int)>, self::H<(self::Class<dynamic>, core::int)>, self::H<(self::ConcreteClass, core::int)>, self::H<(self::Class<self::ConcreteClass>, core::int)>, self::H<(core::Object, core::int)>, self::H<(core::int, core::int)>>>[self::Enum1::a];
+ enum-element static const field self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int)> a = const self::Enum1::•<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int)>(0, "a");
+ const constructor •(core::int #index, core::String #name) → self::Enum1<self::Enum1::T1, self::Enum1::T2%, self::Enum1::T3, self::Enum1::T4, self::Enum1::T5, self::Enum1::T6, self::Enum1::T7, self::Enum1::T8, self::Enum1::S1, self::Enum1::S2, self::Enum1::S3, self::Enum1::S4, self::Enum1::S5, self::Enum1::S6, self::Enum1::S7, self::Enum1::S8, self::Enum1::U1, self::Enum1::U2, self::Enum1::U3, self::Enum1::U4, self::Enum1::U5, self::Enum1::U6, self::Enum1::U7, self::Enum1::U8, self::Enum1::V1, self::Enum1::V2, self::Enum1::V3, self::Enum1::V4, self::Enum1::V5, self::Enum1::V6, self::Enum1::V7, self::Enum1::V8, self::Enum1::W1, self::Enum1::W2, self::Enum1::W3, self::Enum1::W4, self::Enum1::W5, self::Enum1::W6, self::Enum1::W7, self::Enum1::W8>
: super core::_Enum::•(#index, #name)
;
method _enumToString() → core::String
return "Enum1.${this.{core::_Enum::_name}{core::String}}";
}
-extension Extension<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> on self::Class<dynamic> {
+extension Extension<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> on self::Class<dynamic> {
}
-static method method1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void
+static method method1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic>() → void
;
static method test() → dynamic
;
@@ -555,6 +1647,6 @@
Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///bounds_type_parameters.dart:129:6 -> InstanceConstant(const Enum1<ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*>{_Enum.index: 0, _Enum._name: "a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_type_parameters.dart:147:3 -> InstanceConstant(const Enum1<ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*>{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: StaticGet @ org-dartlang-testcase:///bounds_type_parameters.dart:275:6 -> InstanceConstant(const Enum1<ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), ({ConcreteClass* a, int* b}), ({ConcreteClass* a, int* b}), ({ConcreteClass* a, int* b}), ({ConcreteClass* a, int* b}), ({ConcreteClass* a, int* b}), ({ConcreteClass* a, int* b}), ({ConcreteClass* a, int* b}), ({ConcreteClass* a, int* b}), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*)>{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///bounds_type_parameters.dart:317:3 -> InstanceConstant(const Enum1<ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, ConcreteClass*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, G<ConcreteClass*>*, (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), ({ConcreteClass* a, int* b}), ({ConcreteClass* a, int* b}), ({ConcreteClass* a, int* b}), ({ConcreteClass* a, int* b}), ({ConcreteClass* a, int* b}), ({ConcreteClass* a, int* b}), ({ConcreteClass* a, int* b}), ({ConcreteClass* a, int* b}), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*), (ConcreteClass*, int*)>{_Enum.index: 0, _Enum._name: "a"})
Extra constant evaluation: evaluated: 8, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.transformed.expect
index 80b9cf4..29250ba 100644
--- a/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bounds_type_parameters.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:14:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:16:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -10,7 +10,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:22:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:24:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -18,7 +18,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:34:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:32:9: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:40:9: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:48:9: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:60:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -26,7 +50,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:42:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:68:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -34,7 +58,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:53:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:76:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:84:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:92:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:103:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -42,7 +90,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:61:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:111:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -50,7 +98,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:72:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:119:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:127:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:135:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:146:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -58,7 +130,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:80:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:154:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -66,7 +138,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:91:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:162:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:170:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:178:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:189:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -74,7 +170,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:99:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:197:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -82,7 +178,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:110:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:205:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:213:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:221:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:232:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -90,7 +210,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:118:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:240:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -98,7 +218,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:130:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:248:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:256:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:264:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:276:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -106,7 +250,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:138:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:284:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -114,7 +258,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:167:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:292:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:300:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:308:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:361:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -122,7 +290,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:175:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:369:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -130,7 +298,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:186:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:377:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:385:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:393:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:404:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'F' here.
// T1 extends F, // Error
// ^^
@@ -138,7 +330,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:194:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:412:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'G' here.
// S1 extends G, // Error
// ^^
@@ -146,7 +338,31 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:20:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:420:5: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// U1 extends (F, int), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:428:5: Error: Generic type 'G' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'G' here.
+// V1 extends ({G a, int b}), // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:436:5: Error: Generic type 'H' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'H' here.
+// W1 extends H, // Error
+// ^^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:22:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -156,7 +372,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:21:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:23:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -165,7 +381,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:28:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:30:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -175,16 +391,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:29:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:31:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:40:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:38:21: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:39:21: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:46:22: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:47:22: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:52:20: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:53:20: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:54:20: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:55:20: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:66:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -194,7 +487,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:41:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:67:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -203,7 +496,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:48:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:74:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -213,16 +506,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:49:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:75:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:59:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:82:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:83:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:90:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:91:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:96:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:97:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:98:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:99:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:109:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -232,7 +602,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:60:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:110:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -241,7 +611,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:67:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:117:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -251,16 +621,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:68:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:118:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:78:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:125:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:126:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:133:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:134:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:139:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:140:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:141:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:142:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:152:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -270,7 +717,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:79:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:153:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -279,7 +726,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:86:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:160:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -289,16 +736,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:87:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:161:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:97:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:168:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:169:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:176:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:177:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:182:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:183:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:184:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:185:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:195:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -308,7 +832,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:98:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:196:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -317,7 +841,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:105:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:203:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -327,16 +851,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:106:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:204:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:116:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:211:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:212:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:219:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:220:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:225:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:226:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:227:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:228:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:238:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -346,7 +947,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:117:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:239:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -355,7 +956,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:124:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:246:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -365,16 +966,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:125:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:247:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:136:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:254:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:255:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:262:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:263:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:268:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:269:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:270:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:271:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:282:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -384,7 +1062,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:137:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:283:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -393,7 +1071,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:144:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:290:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -403,16 +1081,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:145:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:291:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:173:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:298:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:299:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:306:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:307:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:312:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:313:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:314:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:315:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:367:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -422,7 +1177,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:174:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:368:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -431,7 +1186,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:181:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:375:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -441,16 +1196,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:182:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:376:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:192:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:383:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:384:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:391:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:392:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:397:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:398:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:399:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:400:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:410:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -460,7 +1292,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:193:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:411:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -469,7 +1301,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:200:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:418:16: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -479,35 +1311,291 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:201:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:419:16: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:147:3: Error: Type argument 'ConcreteClass' doesn't conform to the bound 'int' of the type variable 'T8' on 'Enum1'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:426:17: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:427:17: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:434:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:435:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:440:16: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:441:16: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:442:16: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:443:16: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument 'ConcreteClass' doesn't conform to the bound 'int' of the type variable 'T8' on 'Enum1'.
// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// a<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:137:5: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:283:5: Context: This is the type variable whose bound isn't conformed to.
// T8 extends F<int>, // Error
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:147:3: Error: Type argument 'G<ConcreteClass>' doesn't conform to the bound 'G<int>' of the type variable 'S8' on 'Enum1'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument 'G<ConcreteClass>' doesn't conform to the bound 'G<int>' of the type variable 'S8' on 'Enum1'.
// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// a<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:145:5: Context: This is the type variable whose bound isn't conformed to.
-// S8 extends G<int> // Error
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:291:5: Context: This is the type variable whose bound isn't conformed to.
+// S8 extends G<int>, // Error
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:212:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(int, int)' of the type variable 'U8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:299:5: Context: This is the type variable whose bound isn't conformed to.
+// U8 extends (F<int>, int), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V1' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:300:5: Context: This is the type variable whose bound isn't conformed to.
+// V1 extends ({G a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<dynamic> a, int b})' of the type variable 'V2' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:301:5: Context: This is the type variable whose bound isn't conformed to.
+// V2 extends ({G<dynamic> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V3' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:302:5: Context: This is the type variable whose bound isn't conformed to.
+// V3 extends ({G<Class> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<dynamic>> a, int b})' of the type variable 'V4' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:303:5: Context: This is the type variable whose bound isn't conformed to.
+// V4 extends ({G<Class<dynamic>> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<ConcreteClass> a, int b})' of the type variable 'V5' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:304:5: Context: This is the type variable whose bound isn't conformed to.
+// V5 extends ({G<ConcreteClass> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Class<ConcreteClass>> a, int b})' of the type variable 'V6' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:305:5: Context: This is the type variable whose bound isn't conformed to.
+// V6 extends ({G<Class<ConcreteClass>> a, int b}), // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<Object> a, int b})' of the type variable 'V7' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:306:5: Context: This is the type variable whose bound isn't conformed to.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '({ConcreteClass a, int b})' doesn't conform to the bound '({G<int> a, int b})' of the type variable 'V8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:307:5: Context: This is the type variable whose bound isn't conformed to.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W1' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:308:5: Context: This is the type variable whose bound isn't conformed to.
+// W1 extends H, // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<dynamic>' of the type variable 'W2' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:309:5: Context: This is the type variable whose bound isn't conformed to.
+// W2 extends H<dynamic>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W3' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:310:5: Context: This is the type variable whose bound isn't conformed to.
+// W3 extends H<(Class, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<dynamic>, int)>' of the type variable 'W4' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:311:5: Context: This is the type variable whose bound isn't conformed to.
+// W4 extends H<(Class<dynamic>, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(ConcreteClass, int)>' of the type variable 'W5' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:312:5: Context: This is the type variable whose bound isn't conformed to.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Class<ConcreteClass>, int)>' of the type variable 'W6' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:313:5: Context: This is the type variable whose bound isn't conformed to.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(Object, int)>' of the type variable 'W7' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:314:5: Context: This is the type variable whose bound isn't conformed to.
+// W7 extends H<(Object, int)>, // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:317:3: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound 'H<(int, int)>' of the type variable 'W8' on 'Enum1'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// a<
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:315:5: Context: This is the type variable whose bound isn't conformed to.
+// W8 extends H<(int, int)> // Error
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:454:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -517,7 +1605,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:213:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:455:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -526,7 +1614,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:220:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:462:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -536,16 +1624,93 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:221:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:463:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:230:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:470:19: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:471:19: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:478:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:479:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:484:18: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:485:18: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:486:18: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:487:18: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:496:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -555,7 +1720,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:231:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:497:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
// T8 extends F<int>, // Error
@@ -564,7 +1729,7 @@
// typedef F<X extends Class<X>> = X;
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:238:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:504:18: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Object' is from 'dart:core'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
@@ -574,27 +1739,105 @@
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:239:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:505:18: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// Try changing type arguments so that they conform to the bounds.
-// S8 extends G<int> // Error
+// S8 extends G<int>, // Error
// ^
// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
// ^
//
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:129:6: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:512:19: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U7 extends (F<Object>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:513:19: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// U8 extends (F<int>, int), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends Class<X>> = X;
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:520:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V7 extends ({G<Object> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:521:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// V8 extends ({G<int> a, int b}), // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
+// class G<X extends Class<X>> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:526:18: Error: Type argument '(ConcreteClass, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W5 extends H<(ConcreteClass, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:527:18: Error: Type argument '(Class<ConcreteClass>, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W6 extends H<(Class<ConcreteClass>, int)>, // Ok
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:528:18: Error: Type argument '(Object, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Object' is from 'dart:core'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W7 extends H<(Object, int)>, // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:529:18: Error: Type argument '(int, int)' doesn't conform to the bound '(Class<X>, int)' of the type variable 'X' on 'H'.
+// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// W8 extends H<(int, int)> // Error
+// ^
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class H<X extends (Class<X>, int)> {}
+// ^
+//
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:275:6: Error: Constant evaluation error:
// enum Enum1<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:129:6: Context: Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>>'.
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:275:6: Context: Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>, (Class<dynamic>, int), (dynamic, int), (Class<dynamic>, int), (Class<dynamic>, int), (ConcreteClass, int), (Class<ConcreteClass>, int), (Object, int), (int, int), ({G<Class<dynamic>> a, int b}), ({G<dynamic> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<ConcreteClass> a, int b}), ({G<Class<ConcreteClass>> a, int b}), ({G<Object> a, int b}), ({G<int> a, int b}), H<(Class<dynamic>, int)>, H<dynamic>, H<(Class<dynamic>, int)>, H<(Class<dynamic>, int)>, H<(ConcreteClass, int)>, H<(Class<ConcreteClass>, int)>, H<(Object, int)>, H<(int, int)>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)>'.
// - 'Enum1' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// - 'Object' is from 'dart:core'.
+// - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
// enum Enum1<
// ^
-// pkg/front_end/testcases/general/bounds_type_parameters.dart:129:6: Context: While analyzing:
+// pkg/front_end/testcases/general/bounds_type_parameters.dart:275:6: Context: While analyzing:
// enum Enum1<
// ^
//
@@ -602,9 +1845,9 @@
import "dart:core" as core;
typedef F<X extends self::Class<X> = self::Class<dynamic>> = X;
-typedef Typedef1<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
-typedef Typedef2 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void;
-typedef Typedef3<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic> = () → void;
+typedef Typedef1<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic, unrelated U1 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U2 extends (dynamic, core::int) = dynamic, unrelated U3 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U4 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U5 extends (self::ConcreteClass, core::int) = dynamic, unrelated U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, unrelated U7 extends (core::Object, core::int) = dynamic, unrelated U8 extends (core::int, core::int) = dynamic, unrelated V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, unrelated V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, unrelated V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, unrelated V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, unrelated V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, unrelated W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W2 extends self::H<dynamic> = dynamic, unrelated W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, unrelated W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, unrelated W7 extends self::H<(core::Object, core::int)> = dynamic, unrelated W8 extends self::H<(core::int, core::int)> = dynamic> = () → void;
+typedef Typedef2 = <T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic>() → void;
+typedef Typedef3<unrelated T1 extends self::Class<dynamic> = dynamic, unrelated T2 extends dynamic, unrelated T3 extends self::Class<dynamic> = dynamic, unrelated T4 extends self::Class<dynamic> = dynamic, unrelated T5 extends self::ConcreteClass = dynamic, unrelated T6 extends self::Class<self::ConcreteClass> = dynamic, unrelated T7 extends core::Object = dynamic, unrelated T8 extends core::int = dynamic, unrelated S1 extends self::G<self::Class<dynamic>> = dynamic, unrelated S2 extends self::G<dynamic> = dynamic, unrelated S3 extends self::G<self::Class<dynamic>> = dynamic, unrelated S4 extends self::G<self::Class<dynamic>> = dynamic, unrelated S5 extends self::G<self::ConcreteClass> = dynamic, unrelated S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, unrelated S7 extends self::G<core::Object> = dynamic, unrelated S8 extends self::G<core::int> = dynamic, unrelated U1 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U2 extends (dynamic, core::int) = dynamic, unrelated U3 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U4 extends (self::Class<dynamic>, core::int) = dynamic, unrelated U5 extends (self::ConcreteClass, core::int) = dynamic, unrelated U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, unrelated U7 extends (core::Object, core::int) = dynamic, unrelated U8 extends (core::int, core::int) = dynamic, unrelated V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, unrelated V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, unrelated V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, unrelated V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, unrelated V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, unrelated V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, unrelated W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W2 extends self::H<dynamic> = dynamic, unrelated W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, unrelated W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, unrelated W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, unrelated W7 extends self::H<(core::Object, core::int)> = dynamic, unrelated W8 extends self::H<(core::int, core::int)> = dynamic> = () → void;
abstract class Class<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
}
class ConcreteClass extends core::Object implements self::Class<self::ConcreteClass> {
@@ -617,50 +1860,56 @@
: super core::Object::•()
;
}
-class Class1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object {
- synthetic constructor •() → self::Class1<self::Class1::T1, self::Class1::T2%, self::Class1::T3, self::Class1::T4, self::Class1::T5, self::Class1::T6, self::Class1::T7, self::Class1::T8, self::Class1::S1, self::Class1::S2, self::Class1::S3, self::Class1::S4, self::Class1::S5, self::Class1::S6, self::Class1::S7, self::Class1::S8>
+class H<X extends (self::Class<self::H::X>, core::int) = (self::Class<dynamic>, core::int)> extends core::Object {
+ synthetic constructor •() → self::H<self::H::X>
: super core::Object::•()
;
}
-class Class2<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object implements self::Class<dynamic> /*isEliminatedMixin,hasConstConstructor*/ {
- const synthetic constructor •() → self::Class2<self::Class2::T1, self::Class2::T2%, self::Class2::T3, self::Class2::T4, self::Class2::T5, self::Class2::T6, self::Class2::T7, self::Class2::T8, self::Class2::S1, self::Class2::S2, self::Class2::S3, self::Class2::S4, self::Class2::S5, self::Class2::S6, self::Class2::S7, self::Class2::S8>
+class Class1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class1<self::Class1::T1, self::Class1::T2%, self::Class1::T3, self::Class1::T4, self::Class1::T5, self::Class1::T6, self::Class1::T7, self::Class1::T8, self::Class1::S1, self::Class1::S2, self::Class1::S3, self::Class1::S4, self::Class1::S5, self::Class1::S6, self::Class1::S7, self::Class1::S8, self::Class1::U1, self::Class1::U2, self::Class1::U3, self::Class1::U4, self::Class1::U5, self::Class1::U6, self::Class1::U7, self::Class1::U8, self::Class1::V1, self::Class1::V2, self::Class1::V3, self::Class1::V4, self::Class1::V5, self::Class1::V6, self::Class1::V7, self::Class1::V8, self::Class1::W1, self::Class1::W2, self::Class1::W3, self::Class1::W4, self::Class1::W5, self::Class1::W6, self::Class1::W7, self::Class1::W8>
: super core::Object::•()
;
}
-abstract class Mixin1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::Object /*isMixinDeclaration*/ {
+class Class2<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::Object implements self::Class<dynamic> /*isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::Class2<self::Class2::T1, self::Class2::T2%, self::Class2::T3, self::Class2::T4, self::Class2::T5, self::Class2::T6, self::Class2::T7, self::Class2::T8, self::Class2::S1, self::Class2::S2, self::Class2::S3, self::Class2::S4, self::Class2::S5, self::Class2::S6, self::Class2::S7, self::Class2::S8, self::Class2::U1, self::Class2::U2, self::Class2::U3, self::Class2::U4, self::Class2::U5, self::Class2::U6, self::Class2::U7, self::Class2::U8, self::Class2::V1, self::Class2::V2, self::Class2::V3, self::Class2::V4, self::Class2::V5, self::Class2::V6, self::Class2::V7, self::Class2::V8, self::Class2::W1, self::Class2::W2, self::Class2::W3, self::Class2::W4, self::Class2::W5, self::Class2::W6, self::Class2::W7, self::Class2::W8>
+ : super core::Object::•()
+ ;
}
-class Enum1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> extends core::_Enum /*isEnum*/ {
- static const field core::List<self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>> values = invalid-expression "Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>>'.
+abstract class Mixin1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::Object /*isMixinDeclaration*/ {
+}
+class Enum1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::Enum1<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>> values = invalid-expression "Expected constant 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)> {}' to be of type 'Enum1<Class<dynamic>, dynamic, Class<dynamic>, Class<dynamic>, ConcreteClass, Class<ConcreteClass>, dynamic, int, G<Class<dynamic>>, G<dynamic>, G<Class<dynamic>>, G<Class<dynamic>>, G<ConcreteClass>, G<Class<ConcreteClass>>, G<Object>, G<int>, (Class<dynamic>, int), (dynamic, int), (Class<dynamic>, int), (Class<dynamic>, int), (ConcreteClass, int), (Class<ConcreteClass>, int), (Object, int), (int, int), ({G<Class<dynamic>> a, int b}), ({G<dynamic> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<Class<dynamic>> a, int b}), ({G<ConcreteClass> a, int b}), ({G<Class<ConcreteClass>> a, int b}), ({G<Object> a, int b}), ({G<int> a, int b}), H<(Class<dynamic>, int)>, H<dynamic>, H<(Class<dynamic>, int)>, H<(Class<dynamic>, int)>, H<(ConcreteClass, int)>, H<(Class<ConcreteClass>, int)>, H<(Object, int)>, H<(int, int)>>', but was of type 'Enum1<ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, ConcreteClass, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, G<ConcreteClass>, (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), ({ConcreteClass a, int b}), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int), (ConcreteClass, int)>'.
- 'Enum1' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- 'ConcreteClass' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- 'G' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- 'Class' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.
- - 'Object' is from 'dart:core'.";
- enum-element static const field self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>> a = #C3;
- const constructor •(core::int #index, core::String #name) → self::Enum1<self::Enum1::T1, self::Enum1::T2%, self::Enum1::T3, self::Enum1::T4, self::Enum1::T5, self::Enum1::T6, self::Enum1::T7, self::Enum1::T8, self::Enum1::S1, self::Enum1::S2, self::Enum1::S3, self::Enum1::S4, self::Enum1::S5, self::Enum1::S6, self::Enum1::S7, self::Enum1::S8>
+ - 'Object' is from 'dart:core'.
+ - 'H' is from 'pkg/front_end/testcases/general/bounds_type_parameters.dart'.";
+ enum-element static const field self::Enum1<self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::ConcreteClass, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, self::G<self::ConcreteClass>, (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), ({required a: self::ConcreteClass, required b: core::int}), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int), (self::ConcreteClass, core::int)> a = #C3;
+ const constructor •(core::int #index, core::String #name) → self::Enum1<self::Enum1::T1, self::Enum1::T2%, self::Enum1::T3, self::Enum1::T4, self::Enum1::T5, self::Enum1::T6, self::Enum1::T7, self::Enum1::T8, self::Enum1::S1, self::Enum1::S2, self::Enum1::S3, self::Enum1::S4, self::Enum1::S5, self::Enum1::S6, self::Enum1::S7, self::Enum1::S8, self::Enum1::U1, self::Enum1::U2, self::Enum1::U3, self::Enum1::U4, self::Enum1::U5, self::Enum1::U6, self::Enum1::U7, self::Enum1::U8, self::Enum1::V1, self::Enum1::V2, self::Enum1::V3, self::Enum1::V4, self::Enum1::V5, self::Enum1::V6, self::Enum1::V7, self::Enum1::V8, self::Enum1::W1, self::Enum1::W2, self::Enum1::W3, self::Enum1::W4, self::Enum1::W5, self::Enum1::W6, self::Enum1::W7, self::Enum1::W8>
: super core::_Enum::•(#index, #name)
;
method _enumToString() → core::String
return "Enum1.${this.{core::_Enum::_name}{core::String}}";
}
-extension Extension<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic> on self::Class<dynamic> {
+extension Extension<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic> on self::Class<dynamic> {
}
-static method method1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic>() → void {}
+static method method1<T1 extends self::Class<dynamic> = dynamic, T2 extends dynamic, T3 extends self::Class<dynamic> = dynamic, T4 extends self::Class<dynamic> = dynamic, T5 extends self::ConcreteClass = dynamic, T6 extends self::Class<self::ConcreteClass> = dynamic, T7 extends core::Object = dynamic, T8 extends core::int = dynamic, S1 extends self::G<self::Class<dynamic>> = dynamic, S2 extends self::G<dynamic> = dynamic, S3 extends self::G<self::Class<dynamic>> = dynamic, S4 extends self::G<self::Class<dynamic>> = dynamic, S5 extends self::G<self::ConcreteClass> = dynamic, S6 extends self::G<self::Class<self::ConcreteClass>> = dynamic, S7 extends self::G<core::Object> = dynamic, S8 extends self::G<core::int> = dynamic, U1 extends (self::Class<dynamic>, core::int) = dynamic, U2 extends (dynamic, core::int) = dynamic, U3 extends (self::Class<dynamic>, core::int) = dynamic, U4 extends (self::Class<dynamic>, core::int) = dynamic, U5 extends (self::ConcreteClass, core::int) = dynamic, U6 extends (self::Class<self::ConcreteClass>, core::int) = dynamic, U7 extends (core::Object, core::int) = dynamic, U8 extends (core::int, core::int) = dynamic, V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V2 extends ({required a: self::G<dynamic>, required b: core::int}) = dynamic, V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}) = dynamic, V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}) = dynamic, V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}) = dynamic, V7 extends ({required a: self::G<core::Object>, required b: core::int}) = dynamic, V8 extends ({required a: self::G<core::int>, required b: core::int}) = dynamic, W1 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W2 extends self::H<dynamic> = dynamic, W3 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W4 extends self::H<(self::Class<dynamic>, core::int)> = dynamic, W5 extends self::H<(self::ConcreteClass, core::int)> = dynamic, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)> = dynamic, W7 extends self::H<(core::Object, core::int)> = dynamic, W8 extends self::H<(core::int, core::int)> = dynamic>() → void {}
static method test() → dynamic {
- function local1<T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>>() → void {}
- <T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>>() → void local;
+ function local1<T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>, U1 extends (self::Class<dynamic>, core::int), U2 extends (dynamic, core::int), U3 extends (self::Class<dynamic>, core::int), U4 extends (self::Class<dynamic>, core::int), U5 extends (self::ConcreteClass, core::int), U6 extends (self::Class<self::ConcreteClass>, core::int), U7 extends (core::Object, core::int), U8 extends (core::int, core::int), V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V2 extends ({required a: self::G<dynamic>, required b: core::int}), V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}), V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}), V7 extends ({required a: self::G<core::Object>, required b: core::int}), V8 extends ({required a: self::G<core::int>, required b: core::int}), W1 extends self::H<(self::Class<dynamic>, core::int)>, W2 extends self::H<dynamic>, W3 extends self::H<(self::Class<dynamic>, core::int)>, W4 extends self::H<(self::Class<dynamic>, core::int)>, W5 extends self::H<(self::ConcreteClass, core::int)>, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)>, W7 extends self::H<(core::Object, core::int)>, W8 extends self::H<(core::int, core::int)>>() → void {}
+ <T1 extends self::Class<dynamic>, T2 extends dynamic, T3 extends self::Class<dynamic>, T4 extends self::Class<dynamic>, T5 extends self::ConcreteClass, T6 extends self::Class<self::ConcreteClass>, T7 extends core::Object, T8 extends core::int, S1 extends self::G<self::Class<dynamic>>, S2 extends self::G<dynamic>, S3 extends self::G<self::Class<dynamic>>, S4 extends self::G<self::Class<dynamic>>, S5 extends self::G<self::ConcreteClass>, S6 extends self::G<self::Class<self::ConcreteClass>>, S7 extends self::G<core::Object>, S8 extends self::G<core::int>, U1 extends (self::Class<dynamic>, core::int), U2 extends (dynamic, core::int), U3 extends (self::Class<dynamic>, core::int), U4 extends (self::Class<dynamic>, core::int), U5 extends (self::ConcreteClass, core::int), U6 extends (self::Class<self::ConcreteClass>, core::int), U7 extends (core::Object, core::int), U8 extends (core::int, core::int), V1 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V2 extends ({required a: self::G<dynamic>, required b: core::int}), V3 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V4 extends ({required a: self::G<self::Class<dynamic>>, required b: core::int}), V5 extends ({required a: self::G<self::ConcreteClass>, required b: core::int}), V6 extends ({required a: self::G<self::Class<self::ConcreteClass>>, required b: core::int}), V7 extends ({required a: self::G<core::Object>, required b: core::int}), V8 extends ({required a: self::G<core::int>, required b: core::int}), W1 extends self::H<(self::Class<dynamic>, core::int)>, W2 extends self::H<dynamic>, W3 extends self::H<(self::Class<dynamic>, core::int)>, W4 extends self::H<(self::Class<dynamic>, core::int)>, W5 extends self::H<(self::ConcreteClass, core::int)>, W6 extends self::H<(self::Class<self::ConcreteClass>, core::int)>, W7 extends self::H<(core::Object, core::int)>, W8 extends self::H<(core::int, core::int)>>() → void local;
}
static method main() → dynamic {}
constants {
#C1 = 0
#C2 = "a"
- #C3 = self::Enum1<self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*> {index:#C1, _name:#C2}
+ #C3 = self::Enum1<self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::ConcreteClass*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, self::G<self::ConcreteClass*>*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, ({required a: self::ConcreteClass*, required b: core::int*})*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*, (self::ConcreteClass*, core::int*)*> {index:#C1, _name:#C2}
}
Constructor coverage from constants:
org-dartlang-testcase:///bounds_type_parameters.dart:
-- Enum1. (from org-dartlang-testcase:///bounds_type_parameters.dart:129:6)
+- Enum1. (from org-dartlang-testcase:///bounds_type_parameters.dart:275:6)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart b/pkg/front_end/testcases/general/type_variable_uses.dart
index 2bdaa6d..9c0759e 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart
@@ -5,28 +5,46 @@
class C<T> {
const C();
static C<T> staticMethod() {
- print(T);
- T t;
- C<T> l;
- C<C<T>> ll;
- const C<T>();
- const <T>[];
- const <C<T>>[];
- const <Object>[T];
- const <Object>[const C<T>()];
+ print(T); // Error
+ T t; // Error
+ C<T> l; // Error
+ C<C<T>> ll; // Error
+ <(T, int)>[]; // Error
+ <({T a, int b})>[]; // Error
+ <void Function<S extends T>()>[]; // Error
+ const C<T>(); // Error
+ const <T>[]; // Error
+ const <C<T>>[]; // Error
+ const <Object>[T]; // Error
+ const <Object>[const C<T>()]; // Error
+ const <(T, int)>[]; // Error
+ const <({T a, int b})>[]; // Error
+ const <void Function<S extends T>()>[]; // Error
+ const C<(T, int)>(); // Error
+ const C<({T a, int b})>(); // Error
+ const C<void Function<S extends T>()>(); // Error
throw '';
}
C<T> instanceMethod() {
- print(T);
- T t;
- C<T> l;
- C<C<T>> ll;
- const C<T>();
- const <T>[];
- const <C<T>>[];
- const <Object>[T];
- const <Object>[const C<T>()];
+ print(T); // Ok
+ T t; // Ok
+ C<T> l; // Ok
+ C<C<T>> ll; // Ok
+ <(T, int)>[]; // Error
+ <({T a, int b})>[]; // Error
+ <void Function<S extends T>()>[]; // Error
+ const C<T>(); // Error
+ const <T>[]; // Error
+ const <C<T>>[]; // Error
+ const <Object>[T]; // Error
+ const <Object>[const C<T>()]; // Error
+ const <(T, int)>[]; // Error
+ const <({T a, int b})>[]; // Error
+ const <void Function<S extends T>()>[]; // Error
+ const C<(T, int)>(); // Error
+ const C<({T a, int b})>(); // Error
+ const C<void Function<S extends T>()>(); // Error
throw '';
}
}
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart.strong.expect b/pkg/front_end/testcases/general/type_variable_uses.dart.strong.expect
index dd2a7d0..256b708 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart.strong.expect
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart.strong.expect
@@ -7,61 +7,129 @@
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:8:11: Error: Type variables can't be used in static members.
-// print(T);
+// print(T); // Error
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:9:5: Error: Type variables can't be used in static members.
-// T t;
+// T t; // Error
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:10:7: Error: Type variables can't be used in static members.
-// C<T> l;
+// C<T> l; // Error
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:11:9: Error: Type variables can't be used in static members.
-// C<C<T>> ll;
+// C<C<T>> ll; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:12:13: Error: Type variables can't be used in static members.
-// const C<T>();
+// pkg/front_end/testcases/general/type_variable_uses.dart:12:7: Error: Type variables can't be used in static members.
+// <(T, int)>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:13:8: Error: Type variables can't be used in static members.
+// <({T a, int b})>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:14:30: Error: Type variables can't be used in static members.
+// <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:15:13: Error: Type variables can't be used in static members.
+// const C<T>(); // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:13:12: Error: Type variables can't be used in static members.
-// const <T>[];
+// pkg/front_end/testcases/general/type_variable_uses.dart:16:12: Error: Type variables can't be used in static members.
+// const <T>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:14:14: Error: Type variables can't be used in static members.
-// const <C<T>>[];
+// pkg/front_end/testcases/general/type_variable_uses.dart:17:14: Error: Type variables can't be used in static members.
+// const <C<T>>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:15:20: Error: Type variables can't be used in static members.
-// const <Object>[T];
+// pkg/front_end/testcases/general/type_variable_uses.dart:18:20: Error: Type variables can't be used in static members.
+// const <Object>[T]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:16:28: Error: Type variables can't be used in static members.
-// const <Object>[const C<T>()];
+// pkg/front_end/testcases/general/type_variable_uses.dart:19:28: Error: Type variables can't be used in static members.
+// const <Object>[const C<T>()]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:25:13: Error: Type variables can't be used as constants.
-// const C<T>();
+// pkg/front_end/testcases/general/type_variable_uses.dart:20:13: Error: Type variables can't be used in static members.
+// const <(T, int)>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:26:12: Error: Type variables can't be used as constants.
-// const <T>[];
-// ^
-//
-// pkg/front_end/testcases/general/type_variable_uses.dart:27:14: Error: Type variables can't be used as constants.
-// const <C<T>>[];
+// pkg/front_end/testcases/general/type_variable_uses.dart:21:14: Error: Type variables can't be used in static members.
+// const <({T a, int b})>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:28:20: Error: Type variables can't be used as constants.
-// const <Object>[T];
+// pkg/front_end/testcases/general/type_variable_uses.dart:22:36: Error: Type variables can't be used in static members.
+// const <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:23:14: Error: Type variables can't be used in static members.
+// const C<(T, int)>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:24:15: Error: Type variables can't be used in static members.
+// const C<({T a, int b})>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:25:37: Error: Type variables can't be used in static members.
+// const C<void Function<S extends T>()>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:37:13: Error: Type variables can't be used as constants.
+// const C<T>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:38:12: Error: Type variables can't be used as constants.
+// const <T>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:39:14: Error: Type variables can't be used as constants.
+// const <C<T>>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:40:20: Error: Type variables can't be used as constants.
+// const <Object>[T]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:29:28: Error: Type variables can't be used as constants.
-// const <Object>[const C<T>()];
+// pkg/front_end/testcases/general/type_variable_uses.dart:41:28: Error: Type variables can't be used as constants.
+// const <Object>[const C<T>()]; // Error
// ^
//
+// pkg/front_end/testcases/general/type_variable_uses.dart:42:13: Error: Type variables can't be used as constants.
+// const <(T, int)>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:43:14: Error: Type variables can't be used as constants.
+// const <({T a, int b})>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:44:36: Error: Type variables can't be used as constants.
+// const <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:45:14: Error: Type variables can't be used as constants.
+// const C<(T, int)>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:46:15: Error: Type variables can't be used as constants.
+// const C<({T a, int b})>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:47:37: Error: Type variables can't be used as constants.
+// const C<void Function<S extends T>()>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:44:5: Error: Type variables can't be used as constants.
+// const <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:47:11: Error: Type variables can't be used as constants.
+// const C<void Function<S extends T>()>(); // Error
+// ^
+//
import self as self;
import "dart:core" as core;
@@ -74,11 +142,20 @@
invalid-type t;
self::C<invalid-type> l;
self::C<self::C<invalid-type>> ll;
+ <(invalid-type, core::int)>[];
+ <({required a: invalid-type, required b: core::int})>[];
+ <<S extends invalid-type>() → void>[];
#C2;
#C3;
#C4;
#C5;
#C6;
+ #C7;
+ #C8;
+ #C9;
+ #C10;
+ #C11;
+ #C12;
throw "";
}
method instanceMethod() → self::C<self::C::T%> {
@@ -86,11 +163,20 @@
self::C::T% t;
self::C<self::C::T%> l;
self::C<self::C<self::C::T%>> ll;
+ <(self::C::T%, core::int)>[];
+ <({required a: self::C::T%, required b: core::int})>[];
+ <<S extends self::C::T%>() → void>[];
#C2;
#C3;
#C4;
#C5;
#C6;
+ #C7;
+ #C8;
+ invalid-expression "Type variables can't be used as constants.";
+ #C10;
+ #C11;
+ invalid-expression "Type variables can't be used as constants.";
throw "";
}
}
@@ -103,6 +189,12 @@
#C4 = <self::C<invalid-type>>[]
#C5 = <core::Object>[#C1]
#C6 = <core::Object>[#C2]
+ #C7 = <(invalid-type, core::int)>[]
+ #C8 = <({required a: invalid-type, required b: core::int})>[]
+ #C9 = <<S extends invalid-type>() → void>[]
+ #C10 = self::C<(invalid-type, core::int)> {}
+ #C11 = self::C<({required a: invalid-type, required b: core::int})> {}
+ #C12 = self::C<<S extends invalid-type>() → void> {}
}
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart.strong.transformed.expect b/pkg/front_end/testcases/general/type_variable_uses.dart.strong.transformed.expect
index dd2a7d0..fda6dec 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart.strong.transformed.expect
@@ -7,61 +7,129 @@
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:8:11: Error: Type variables can't be used in static members.
-// print(T);
+// print(T); // Error
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:9:5: Error: Type variables can't be used in static members.
-// T t;
+// T t; // Error
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:10:7: Error: Type variables can't be used in static members.
-// C<T> l;
+// C<T> l; // Error
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:11:9: Error: Type variables can't be used in static members.
-// C<C<T>> ll;
+// C<C<T>> ll; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:12:13: Error: Type variables can't be used in static members.
-// const C<T>();
+// pkg/front_end/testcases/general/type_variable_uses.dart:12:7: Error: Type variables can't be used in static members.
+// <(T, int)>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:13:8: Error: Type variables can't be used in static members.
+// <({T a, int b})>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:14:30: Error: Type variables can't be used in static members.
+// <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:15:13: Error: Type variables can't be used in static members.
+// const C<T>(); // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:13:12: Error: Type variables can't be used in static members.
-// const <T>[];
+// pkg/front_end/testcases/general/type_variable_uses.dart:16:12: Error: Type variables can't be used in static members.
+// const <T>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:14:14: Error: Type variables can't be used in static members.
-// const <C<T>>[];
+// pkg/front_end/testcases/general/type_variable_uses.dart:17:14: Error: Type variables can't be used in static members.
+// const <C<T>>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:15:20: Error: Type variables can't be used in static members.
-// const <Object>[T];
+// pkg/front_end/testcases/general/type_variable_uses.dart:18:20: Error: Type variables can't be used in static members.
+// const <Object>[T]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:16:28: Error: Type variables can't be used in static members.
-// const <Object>[const C<T>()];
+// pkg/front_end/testcases/general/type_variable_uses.dart:19:28: Error: Type variables can't be used in static members.
+// const <Object>[const C<T>()]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:25:13: Error: Type variables can't be used as constants.
-// const C<T>();
+// pkg/front_end/testcases/general/type_variable_uses.dart:20:13: Error: Type variables can't be used in static members.
+// const <(T, int)>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:26:12: Error: Type variables can't be used as constants.
-// const <T>[];
-// ^
-//
-// pkg/front_end/testcases/general/type_variable_uses.dart:27:14: Error: Type variables can't be used as constants.
-// const <C<T>>[];
+// pkg/front_end/testcases/general/type_variable_uses.dart:21:14: Error: Type variables can't be used in static members.
+// const <({T a, int b})>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:28:20: Error: Type variables can't be used as constants.
-// const <Object>[T];
+// pkg/front_end/testcases/general/type_variable_uses.dart:22:36: Error: Type variables can't be used in static members.
+// const <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:23:14: Error: Type variables can't be used in static members.
+// const C<(T, int)>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:24:15: Error: Type variables can't be used in static members.
+// const C<({T a, int b})>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:25:37: Error: Type variables can't be used in static members.
+// const C<void Function<S extends T>()>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:37:13: Error: Type variables can't be used as constants.
+// const C<T>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:38:12: Error: Type variables can't be used as constants.
+// const <T>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:39:14: Error: Type variables can't be used as constants.
+// const <C<T>>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:40:20: Error: Type variables can't be used as constants.
+// const <Object>[T]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:29:28: Error: Type variables can't be used as constants.
-// const <Object>[const C<T>()];
+// pkg/front_end/testcases/general/type_variable_uses.dart:41:28: Error: Type variables can't be used as constants.
+// const <Object>[const C<T>()]; // Error
// ^
//
+// pkg/front_end/testcases/general/type_variable_uses.dart:42:13: Error: Type variables can't be used as constants.
+// const <(T, int)>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:43:14: Error: Type variables can't be used as constants.
+// const <({T a, int b})>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:44:36: Error: Type variables can't be used as constants.
+// const <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:45:14: Error: Type variables can't be used as constants.
+// const C<(T, int)>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:46:15: Error: Type variables can't be used as constants.
+// const C<({T a, int b})>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:47:37: Error: Type variables can't be used as constants.
+// const C<void Function<S extends T>()>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:44:5: Error: Type variables can't be used as constants.
+// const <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:47:11: Error: Type variables can't be used as constants.
+// const C<void Function<S extends T>()>(); // Error
+// ^
+//
import self as self;
import "dart:core" as core;
@@ -74,11 +142,20 @@
invalid-type t;
self::C<invalid-type> l;
self::C<self::C<invalid-type>> ll;
+ core::_GrowableList::•<(invalid-type, core::int)>(0);
+ core::_GrowableList::•<({required a: invalid-type, required b: core::int})>(0);
+ core::_GrowableList::•<<S extends invalid-type>() → void>(0);
#C2;
#C3;
#C4;
#C5;
#C6;
+ #C7;
+ #C8;
+ #C9;
+ #C10;
+ #C11;
+ #C12;
throw "";
}
method instanceMethod() → self::C<self::C::T%> {
@@ -86,11 +163,20 @@
self::C::T% t;
self::C<self::C::T%> l;
self::C<self::C<self::C::T%>> ll;
+ core::_GrowableList::•<(self::C::T%, core::int)>(0);
+ core::_GrowableList::•<({required a: self::C::T%, required b: core::int})>(0);
+ core::_GrowableList::•<<S extends self::C::T%>() → void>(0);
#C2;
#C3;
#C4;
#C5;
#C6;
+ #C7;
+ #C8;
+ invalid-expression "Type variables can't be used as constants.";
+ #C10;
+ #C11;
+ invalid-expression "Type variables can't be used as constants.";
throw "";
}
}
@@ -103,6 +189,12 @@
#C4 = <self::C<invalid-type>>[]
#C5 = <core::Object>[#C1]
#C6 = <core::Object>[#C2]
+ #C7 = <(invalid-type, core::int)>[]
+ #C8 = <({required a: invalid-type, required b: core::int})>[]
+ #C9 = <<S extends invalid-type>() → void>[]
+ #C10 = self::C<(invalid-type, core::int)> {}
+ #C11 = self::C<({required a: invalid-type, required b: core::int})> {}
+ #C12 = self::C<<S extends invalid-type>() → void> {}
}
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.expect b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.expect
index c7757f9..7b92c7b 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.expect
@@ -7,61 +7,129 @@
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:8:11: Error: Type variables can't be used in static members.
-// print(T);
+// print(T); // Error
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:9:5: Error: Type variables can't be used in static members.
-// T t;
+// T t; // Error
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:10:7: Error: Type variables can't be used in static members.
-// C<T> l;
+// C<T> l; // Error
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:11:9: Error: Type variables can't be used in static members.
-// C<C<T>> ll;
+// C<C<T>> ll; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:12:13: Error: Type variables can't be used in static members.
-// const C<T>();
+// pkg/front_end/testcases/general/type_variable_uses.dart:12:7: Error: Type variables can't be used in static members.
+// <(T, int)>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:13:8: Error: Type variables can't be used in static members.
+// <({T a, int b})>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:14:30: Error: Type variables can't be used in static members.
+// <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:15:13: Error: Type variables can't be used in static members.
+// const C<T>(); // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:13:12: Error: Type variables can't be used in static members.
-// const <T>[];
+// pkg/front_end/testcases/general/type_variable_uses.dart:16:12: Error: Type variables can't be used in static members.
+// const <T>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:14:14: Error: Type variables can't be used in static members.
-// const <C<T>>[];
+// pkg/front_end/testcases/general/type_variable_uses.dart:17:14: Error: Type variables can't be used in static members.
+// const <C<T>>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:15:20: Error: Type variables can't be used in static members.
-// const <Object>[T];
+// pkg/front_end/testcases/general/type_variable_uses.dart:18:20: Error: Type variables can't be used in static members.
+// const <Object>[T]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:16:28: Error: Type variables can't be used in static members.
-// const <Object>[const C<T>()];
+// pkg/front_end/testcases/general/type_variable_uses.dart:19:28: Error: Type variables can't be used in static members.
+// const <Object>[const C<T>()]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:25:13: Error: Type variables can't be used as constants.
-// const C<T>();
+// pkg/front_end/testcases/general/type_variable_uses.dart:20:13: Error: Type variables can't be used in static members.
+// const <(T, int)>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:26:12: Error: Type variables can't be used as constants.
-// const <T>[];
-// ^
-//
-// pkg/front_end/testcases/general/type_variable_uses.dart:27:14: Error: Type variables can't be used as constants.
-// const <C<T>>[];
+// pkg/front_end/testcases/general/type_variable_uses.dart:21:14: Error: Type variables can't be used in static members.
+// const <({T a, int b})>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:28:20: Error: Type variables can't be used as constants.
-// const <Object>[T];
+// pkg/front_end/testcases/general/type_variable_uses.dart:22:36: Error: Type variables can't be used in static members.
+// const <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:23:14: Error: Type variables can't be used in static members.
+// const C<(T, int)>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:24:15: Error: Type variables can't be used in static members.
+// const C<({T a, int b})>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:25:37: Error: Type variables can't be used in static members.
+// const C<void Function<S extends T>()>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:37:13: Error: Type variables can't be used as constants.
+// const C<T>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:38:12: Error: Type variables can't be used as constants.
+// const <T>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:39:14: Error: Type variables can't be used as constants.
+// const <C<T>>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:40:20: Error: Type variables can't be used as constants.
+// const <Object>[T]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:29:28: Error: Type variables can't be used as constants.
-// const <Object>[const C<T>()];
+// pkg/front_end/testcases/general/type_variable_uses.dart:41:28: Error: Type variables can't be used as constants.
+// const <Object>[const C<T>()]; // Error
// ^
//
+// pkg/front_end/testcases/general/type_variable_uses.dart:42:13: Error: Type variables can't be used as constants.
+// const <(T, int)>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:43:14: Error: Type variables can't be used as constants.
+// const <({T a, int b})>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:44:36: Error: Type variables can't be used as constants.
+// const <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:45:14: Error: Type variables can't be used as constants.
+// const C<(T, int)>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:46:15: Error: Type variables can't be used as constants.
+// const C<({T a, int b})>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:47:37: Error: Type variables can't be used as constants.
+// const C<void Function<S extends T>()>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:44:5: Error: Type variables can't be used as constants.
+// const <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:47:11: Error: Type variables can't be used as constants.
+// const C<void Function<S extends T>()>(); // Error
+// ^
+//
import self as self;
import "dart:core" as core;
@@ -74,11 +142,20 @@
invalid-type t;
self::C<invalid-type> l;
self::C<self::C<invalid-type>> ll;
+ <(invalid-type, core::int)>[];
+ <({required a: invalid-type, required b: core::int})>[];
+ <<S extends invalid-type>() → void>[];
#C2;
#C3;
#C4;
#C5;
#C6;
+ #C7;
+ #C8;
+ #C9;
+ #C10;
+ #C11;
+ #C12;
throw "";
}
method instanceMethod() → self::C<self::C::T%> {
@@ -86,11 +163,20 @@
self::C::T% t;
self::C<self::C::T%> l;
self::C<self::C<self::C::T%>> ll;
+ <(self::C::T%, core::int)>[];
+ <({required a: self::C::T%, required b: core::int})>[];
+ <<S extends self::C::T%>() → void>[];
#C2;
#C3;
#C4;
#C5;
#C6;
+ #C7;
+ #C8;
+ invalid-expression "Type variables can't be used as constants.";
+ #C10;
+ #C11;
+ invalid-expression "Type variables can't be used as constants.";
throw "";
}
}
@@ -103,6 +189,12 @@
#C4 = <self::C<invalid-type>*>[]
#C5 = <core::Object*>[#C1]
#C6 = <core::Object*>[#C2]
+ #C7 = <(invalid-type, core::int*)*>[]
+ #C8 = <({required a: invalid-type, required b: core::int*})*>[]
+ #C9 = <<S extends invalid-type>() →* void>[]
+ #C10 = self::C<(invalid-type, core::int*)*> {}
+ #C11 = self::C<({required a: invalid-type, required b: core::int*})*> {}
+ #C12 = self::C<<S extends invalid-type>() →* void> {}
}
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.modular.expect
index c7757f9..7b92c7b 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.modular.expect
@@ -7,61 +7,129 @@
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:8:11: Error: Type variables can't be used in static members.
-// print(T);
+// print(T); // Error
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:9:5: Error: Type variables can't be used in static members.
-// T t;
+// T t; // Error
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:10:7: Error: Type variables can't be used in static members.
-// C<T> l;
+// C<T> l; // Error
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:11:9: Error: Type variables can't be used in static members.
-// C<C<T>> ll;
+// C<C<T>> ll; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:12:13: Error: Type variables can't be used in static members.
-// const C<T>();
+// pkg/front_end/testcases/general/type_variable_uses.dart:12:7: Error: Type variables can't be used in static members.
+// <(T, int)>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:13:8: Error: Type variables can't be used in static members.
+// <({T a, int b})>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:14:30: Error: Type variables can't be used in static members.
+// <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:15:13: Error: Type variables can't be used in static members.
+// const C<T>(); // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:13:12: Error: Type variables can't be used in static members.
-// const <T>[];
+// pkg/front_end/testcases/general/type_variable_uses.dart:16:12: Error: Type variables can't be used in static members.
+// const <T>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:14:14: Error: Type variables can't be used in static members.
-// const <C<T>>[];
+// pkg/front_end/testcases/general/type_variable_uses.dart:17:14: Error: Type variables can't be used in static members.
+// const <C<T>>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:15:20: Error: Type variables can't be used in static members.
-// const <Object>[T];
+// pkg/front_end/testcases/general/type_variable_uses.dart:18:20: Error: Type variables can't be used in static members.
+// const <Object>[T]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:16:28: Error: Type variables can't be used in static members.
-// const <Object>[const C<T>()];
+// pkg/front_end/testcases/general/type_variable_uses.dart:19:28: Error: Type variables can't be used in static members.
+// const <Object>[const C<T>()]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:25:13: Error: Type variables can't be used as constants.
-// const C<T>();
+// pkg/front_end/testcases/general/type_variable_uses.dart:20:13: Error: Type variables can't be used in static members.
+// const <(T, int)>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:26:12: Error: Type variables can't be used as constants.
-// const <T>[];
-// ^
-//
-// pkg/front_end/testcases/general/type_variable_uses.dart:27:14: Error: Type variables can't be used as constants.
-// const <C<T>>[];
+// pkg/front_end/testcases/general/type_variable_uses.dart:21:14: Error: Type variables can't be used in static members.
+// const <({T a, int b})>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:28:20: Error: Type variables can't be used as constants.
-// const <Object>[T];
+// pkg/front_end/testcases/general/type_variable_uses.dart:22:36: Error: Type variables can't be used in static members.
+// const <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:23:14: Error: Type variables can't be used in static members.
+// const C<(T, int)>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:24:15: Error: Type variables can't be used in static members.
+// const C<({T a, int b})>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:25:37: Error: Type variables can't be used in static members.
+// const C<void Function<S extends T>()>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:37:13: Error: Type variables can't be used as constants.
+// const C<T>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:38:12: Error: Type variables can't be used as constants.
+// const <T>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:39:14: Error: Type variables can't be used as constants.
+// const <C<T>>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:40:20: Error: Type variables can't be used as constants.
+// const <Object>[T]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:29:28: Error: Type variables can't be used as constants.
-// const <Object>[const C<T>()];
+// pkg/front_end/testcases/general/type_variable_uses.dart:41:28: Error: Type variables can't be used as constants.
+// const <Object>[const C<T>()]; // Error
// ^
//
+// pkg/front_end/testcases/general/type_variable_uses.dart:42:13: Error: Type variables can't be used as constants.
+// const <(T, int)>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:43:14: Error: Type variables can't be used as constants.
+// const <({T a, int b})>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:44:36: Error: Type variables can't be used as constants.
+// const <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:45:14: Error: Type variables can't be used as constants.
+// const C<(T, int)>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:46:15: Error: Type variables can't be used as constants.
+// const C<({T a, int b})>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:47:37: Error: Type variables can't be used as constants.
+// const C<void Function<S extends T>()>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:44:5: Error: Type variables can't be used as constants.
+// const <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:47:11: Error: Type variables can't be used as constants.
+// const C<void Function<S extends T>()>(); // Error
+// ^
+//
import self as self;
import "dart:core" as core;
@@ -74,11 +142,20 @@
invalid-type t;
self::C<invalid-type> l;
self::C<self::C<invalid-type>> ll;
+ <(invalid-type, core::int)>[];
+ <({required a: invalid-type, required b: core::int})>[];
+ <<S extends invalid-type>() → void>[];
#C2;
#C3;
#C4;
#C5;
#C6;
+ #C7;
+ #C8;
+ #C9;
+ #C10;
+ #C11;
+ #C12;
throw "";
}
method instanceMethod() → self::C<self::C::T%> {
@@ -86,11 +163,20 @@
self::C::T% t;
self::C<self::C::T%> l;
self::C<self::C<self::C::T%>> ll;
+ <(self::C::T%, core::int)>[];
+ <({required a: self::C::T%, required b: core::int})>[];
+ <<S extends self::C::T%>() → void>[];
#C2;
#C3;
#C4;
#C5;
#C6;
+ #C7;
+ #C8;
+ invalid-expression "Type variables can't be used as constants.";
+ #C10;
+ #C11;
+ invalid-expression "Type variables can't be used as constants.";
throw "";
}
}
@@ -103,6 +189,12 @@
#C4 = <self::C<invalid-type>*>[]
#C5 = <core::Object*>[#C1]
#C6 = <core::Object*>[#C2]
+ #C7 = <(invalid-type, core::int*)*>[]
+ #C8 = <({required a: invalid-type, required b: core::int*})*>[]
+ #C9 = <<S extends invalid-type>() →* void>[]
+ #C10 = self::C<(invalid-type, core::int*)*> {}
+ #C11 = self::C<({required a: invalid-type, required b: core::int*})*> {}
+ #C12 = self::C<<S extends invalid-type>() →* void> {}
}
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.transformed.expect
index c7757f9..c3d8549 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.transformed.expect
@@ -7,61 +7,129 @@
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:8:11: Error: Type variables can't be used in static members.
-// print(T);
+// print(T); // Error
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:9:5: Error: Type variables can't be used in static members.
-// T t;
+// T t; // Error
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:10:7: Error: Type variables can't be used in static members.
-// C<T> l;
+// C<T> l; // Error
// ^
//
// pkg/front_end/testcases/general/type_variable_uses.dart:11:9: Error: Type variables can't be used in static members.
-// C<C<T>> ll;
+// C<C<T>> ll; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:12:13: Error: Type variables can't be used in static members.
-// const C<T>();
+// pkg/front_end/testcases/general/type_variable_uses.dart:12:7: Error: Type variables can't be used in static members.
+// <(T, int)>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:13:8: Error: Type variables can't be used in static members.
+// <({T a, int b})>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:14:30: Error: Type variables can't be used in static members.
+// <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:15:13: Error: Type variables can't be used in static members.
+// const C<T>(); // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:13:12: Error: Type variables can't be used in static members.
-// const <T>[];
+// pkg/front_end/testcases/general/type_variable_uses.dart:16:12: Error: Type variables can't be used in static members.
+// const <T>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:14:14: Error: Type variables can't be used in static members.
-// const <C<T>>[];
+// pkg/front_end/testcases/general/type_variable_uses.dart:17:14: Error: Type variables can't be used in static members.
+// const <C<T>>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:15:20: Error: Type variables can't be used in static members.
-// const <Object>[T];
+// pkg/front_end/testcases/general/type_variable_uses.dart:18:20: Error: Type variables can't be used in static members.
+// const <Object>[T]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:16:28: Error: Type variables can't be used in static members.
-// const <Object>[const C<T>()];
+// pkg/front_end/testcases/general/type_variable_uses.dart:19:28: Error: Type variables can't be used in static members.
+// const <Object>[const C<T>()]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:25:13: Error: Type variables can't be used as constants.
-// const C<T>();
+// pkg/front_end/testcases/general/type_variable_uses.dart:20:13: Error: Type variables can't be used in static members.
+// const <(T, int)>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:26:12: Error: Type variables can't be used as constants.
-// const <T>[];
-// ^
-//
-// pkg/front_end/testcases/general/type_variable_uses.dart:27:14: Error: Type variables can't be used as constants.
-// const <C<T>>[];
+// pkg/front_end/testcases/general/type_variable_uses.dart:21:14: Error: Type variables can't be used in static members.
+// const <({T a, int b})>[]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:28:20: Error: Type variables can't be used as constants.
-// const <Object>[T];
+// pkg/front_end/testcases/general/type_variable_uses.dart:22:36: Error: Type variables can't be used in static members.
+// const <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:23:14: Error: Type variables can't be used in static members.
+// const C<(T, int)>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:24:15: Error: Type variables can't be used in static members.
+// const C<({T a, int b})>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:25:37: Error: Type variables can't be used in static members.
+// const C<void Function<S extends T>()>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:37:13: Error: Type variables can't be used as constants.
+// const C<T>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:38:12: Error: Type variables can't be used as constants.
+// const <T>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:39:14: Error: Type variables can't be used as constants.
+// const <C<T>>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:40:20: Error: Type variables can't be used as constants.
+// const <Object>[T]; // Error
// ^
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:29:28: Error: Type variables can't be used as constants.
-// const <Object>[const C<T>()];
+// pkg/front_end/testcases/general/type_variable_uses.dart:41:28: Error: Type variables can't be used as constants.
+// const <Object>[const C<T>()]; // Error
// ^
//
+// pkg/front_end/testcases/general/type_variable_uses.dart:42:13: Error: Type variables can't be used as constants.
+// const <(T, int)>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:43:14: Error: Type variables can't be used as constants.
+// const <({T a, int b})>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:44:36: Error: Type variables can't be used as constants.
+// const <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:45:14: Error: Type variables can't be used as constants.
+// const C<(T, int)>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:46:15: Error: Type variables can't be used as constants.
+// const C<({T a, int b})>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:47:37: Error: Type variables can't be used as constants.
+// const C<void Function<S extends T>()>(); // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:44:5: Error: Type variables can't be used as constants.
+// const <void Function<S extends T>()>[]; // Error
+// ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:47:11: Error: Type variables can't be used as constants.
+// const C<void Function<S extends T>()>(); // Error
+// ^
+//
import self as self;
import "dart:core" as core;
@@ -74,11 +142,20 @@
invalid-type t;
self::C<invalid-type> l;
self::C<self::C<invalid-type>> ll;
+ core::_GrowableList::•<(invalid-type, core::int)>(0);
+ core::_GrowableList::•<({required a: invalid-type, required b: core::int})>(0);
+ core::_GrowableList::•<<S extends invalid-type>() → void>(0);
#C2;
#C3;
#C4;
#C5;
#C6;
+ #C7;
+ #C8;
+ #C9;
+ #C10;
+ #C11;
+ #C12;
throw "";
}
method instanceMethod() → self::C<self::C::T%> {
@@ -86,11 +163,20 @@
self::C::T% t;
self::C<self::C::T%> l;
self::C<self::C<self::C::T%>> ll;
+ core::_GrowableList::•<(self::C::T%, core::int)>(0);
+ core::_GrowableList::•<({required a: self::C::T%, required b: core::int})>(0);
+ core::_GrowableList::•<<S extends self::C::T%>() → void>(0);
#C2;
#C3;
#C4;
#C5;
#C6;
+ #C7;
+ #C8;
+ invalid-expression "Type variables can't be used as constants.";
+ #C10;
+ #C11;
+ invalid-expression "Type variables can't be used as constants.";
throw "";
}
}
@@ -103,6 +189,12 @@
#C4 = <self::C<invalid-type>*>[]
#C5 = <core::Object*>[#C1]
#C6 = <core::Object*>[#C2]
+ #C7 = <(invalid-type, core::int*)*>[]
+ #C8 = <({required a: invalid-type, required b: core::int*})*>[]
+ #C9 = <<S extends invalid-type>() →* void>[]
+ #C10 = self::C<(invalid-type, core::int*)*> {}
+ #C11 = self::C<({required a: invalid-type, required b: core::int*})*> {}
+ #C12 = self::C<<S extends invalid-type>() →* void> {}
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart
index 293a967..9bde3c0 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart
@@ -15,6 +15,10 @@
class D<X extends B<X, Y>, Y extends C<X, Y>, Z extends X Function(Y),
W extends num> {}
+class E<X extends (B<X, Y>, int), Y extends ({C<X, Y> c, int d}),
+ Z extends (int, X Function(Y)), W extends ({num a})> {}
+
main() {
D d;
+ E e;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.strong.expect
index 51df89ea..79c86f7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.strong.expect
@@ -17,6 +17,12 @@
: super core::Object::•()
;
}
+class E<X extends (self::B<self::E::X, self::E::Y>, core::int) = (self::B<dynamic, dynamic>, core::int), Y extends ({required c: self::C<self::E::X, self::E::Y>, required d: core::int}) = ({required c: self::C<dynamic, dynamic>, required d: core::int}), Z extends (core::int, (self::E::Y) → self::E::X) = (core::int, (Never) → (self::B<dynamic, dynamic>, core::int)), W extends ({required a: core::num})> extends core::Object {
+ synthetic constructor •() → self::E<self::E::X, self::E::Y, self::E::Z, self::E::W>
+ : super core::Object::•()
+ ;
+}
static method main() → dynamic {
self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, (Never) → self::B<dynamic, dynamic>, core::num> d;
+ self::E<(self::B<dynamic, dynamic>, core::int), ({required c: self::C<dynamic, dynamic>, required d: core::int}), (core::int, (Never) → (self::B<dynamic, dynamic>, core::int)), ({required a: core::num})> e;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.strong.transformed.expect
index 51df89ea..79c86f7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.strong.transformed.expect
@@ -17,6 +17,12 @@
: super core::Object::•()
;
}
+class E<X extends (self::B<self::E::X, self::E::Y>, core::int) = (self::B<dynamic, dynamic>, core::int), Y extends ({required c: self::C<self::E::X, self::E::Y>, required d: core::int}) = ({required c: self::C<dynamic, dynamic>, required d: core::int}), Z extends (core::int, (self::E::Y) → self::E::X) = (core::int, (Never) → (self::B<dynamic, dynamic>, core::int)), W extends ({required a: core::num})> extends core::Object {
+ synthetic constructor •() → self::E<self::E::X, self::E::Y, self::E::Z, self::E::W>
+ : super core::Object::•()
+ ;
+}
static method main() → dynamic {
self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, (Never) → self::B<dynamic, dynamic>, core::num> d;
+ self::E<(self::B<dynamic, dynamic>, core::int), ({required c: self::C<dynamic, dynamic>, required d: core::int}), (core::int, (Never) → (self::B<dynamic, dynamic>, core::int)), ({required a: core::num})> e;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.textual_outline.expect
index a476c9a..c794045 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.textual_outline.expect
@@ -5,4 +5,7 @@
class D<X extends B<X, Y>, Y extends C<X, Y>, Z extends X Function(Y),
W extends num> {}
+class E<X extends (B<X, Y>, int), Y extends ({C<X, Y> c, int d}),
+ Z extends (int, X Function(Y)), W extends ({num a})> {}
+
main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.textual_outline_modelled.expect
index a476c9a..c794045 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.textual_outline_modelled.expect
@@ -5,4 +5,7 @@
class D<X extends B<X, Y>, Y extends C<X, Y>, Z extends X Function(Y),
W extends num> {}
+class E<X extends (B<X, Y>, int), Y extends ({C<X, Y> c, int d}),
+ Z extends (int, X Function(Y)), W extends ({num a})> {}
+
main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.expect
index 51df89ea..79c86f7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.expect
@@ -17,6 +17,12 @@
: super core::Object::•()
;
}
+class E<X extends (self::B<self::E::X, self::E::Y>, core::int) = (self::B<dynamic, dynamic>, core::int), Y extends ({required c: self::C<self::E::X, self::E::Y>, required d: core::int}) = ({required c: self::C<dynamic, dynamic>, required d: core::int}), Z extends (core::int, (self::E::Y) → self::E::X) = (core::int, (Never) → (self::B<dynamic, dynamic>, core::int)), W extends ({required a: core::num})> extends core::Object {
+ synthetic constructor •() → self::E<self::E::X, self::E::Y, self::E::Z, self::E::W>
+ : super core::Object::•()
+ ;
+}
static method main() → dynamic {
self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, (Never) → self::B<dynamic, dynamic>, core::num> d;
+ self::E<(self::B<dynamic, dynamic>, core::int), ({required c: self::C<dynamic, dynamic>, required d: core::int}), (core::int, (Never) → (self::B<dynamic, dynamic>, core::int)), ({required a: core::num})> e;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.modular.expect
index 51df89ea..79c86f7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.modular.expect
@@ -17,6 +17,12 @@
: super core::Object::•()
;
}
+class E<X extends (self::B<self::E::X, self::E::Y>, core::int) = (self::B<dynamic, dynamic>, core::int), Y extends ({required c: self::C<self::E::X, self::E::Y>, required d: core::int}) = ({required c: self::C<dynamic, dynamic>, required d: core::int}), Z extends (core::int, (self::E::Y) → self::E::X) = (core::int, (Never) → (self::B<dynamic, dynamic>, core::int)), W extends ({required a: core::num})> extends core::Object {
+ synthetic constructor •() → self::E<self::E::X, self::E::Y, self::E::Z, self::E::W>
+ : super core::Object::•()
+ ;
+}
static method main() → dynamic {
self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, (Never) → self::B<dynamic, dynamic>, core::num> d;
+ self::E<(self::B<dynamic, dynamic>, core::int), ({required c: self::C<dynamic, dynamic>, required d: core::int}), (core::int, (Never) → (self::B<dynamic, dynamic>, core::int)), ({required a: core::num})> e;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.outline.expect
index 5dd3b71..cef94c6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.outline.expect
@@ -14,5 +14,9 @@
synthetic constructor •() → self::D<self::D::X, self::D::Y, self::D::Z, self::D::W>
;
}
+class E<X extends (self::B<self::E::X, self::E::Y>, core::int) = (self::B<dynamic, dynamic>, core::int), Y extends ({required c: self::C<self::E::X, self::E::Y>, required d: core::int}) = ({required c: self::C<dynamic, dynamic>, required d: core::int}), Z extends (core::int, (self::E::Y) → self::E::X) = (core::int, (Never) → (self::B<dynamic, dynamic>, core::int)), W extends ({required a: core::num})> extends core::Object {
+ synthetic constructor •() → self::E<self::E::X, self::E::Y, self::E::Z, self::E::W>
+ ;
+}
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.transformed.expect
index 51df89ea..79c86f7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.transformed.expect
@@ -17,6 +17,12 @@
: super core::Object::•()
;
}
+class E<X extends (self::B<self::E::X, self::E::Y>, core::int) = (self::B<dynamic, dynamic>, core::int), Y extends ({required c: self::C<self::E::X, self::E::Y>, required d: core::int}) = ({required c: self::C<dynamic, dynamic>, required d: core::int}), Z extends (core::int, (self::E::Y) → self::E::X) = (core::int, (Never) → (self::B<dynamic, dynamic>, core::int)), W extends ({required a: core::num})> extends core::Object {
+ synthetic constructor •() → self::E<self::E::X, self::E::Y, self::E::Z, self::E::W>
+ : super core::Object::•()
+ ;
+}
static method main() → dynamic {
self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, (Never) → self::B<dynamic, dynamic>, core::num> d;
+ self::E<(self::B<dynamic, dynamic>, core::int), ({required c: self::C<dynamic, dynamic>, required d: core::int}), (core::int, (Never) → (self::B<dynamic, dynamic>, core::int)), ({required a: core::num})> e;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart
index d3acace..518e3a3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart
@@ -6,8 +6,16 @@
// when both class declaration and a parametrized typedef participate in the
// cycle.
-class Hest<TypeX extends Fisk> {}
+class Class1<X1 extends Typedef1> {}
-typedef Fisk = void Function<TypeY extends Hest>();
+typedef Typedef1 = void Function<Y1 extends Class1>();
+
+class Class2<X2 extends Typedef2> {}
+
+typedef Typedef2 = void Function<Y2 extends (Class2, int)>();
+
+class Class3<X3 extends Typedef3> {}
+
+typedef Typedef3 = (void Function<Y3 extends Class3>(), int);
main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.strong.expect
index 5a5d321..5d2a111 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.strong.expect
@@ -2,23 +2,50 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
-// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
-// typedef Fisk = void Function<TypeY extends Hest>();
-// ^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:30: Context: Bound of this variable references raw type 'Hest'.
-// typedef Fisk = void Function<TypeY extends Hest>();
-// ^^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:12: Context: Bound of this variable references raw type 'Fisk'.
-// class Hest<TypeX extends Fisk> {}
-// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:7: Error: Generic type 'Class1' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Typedef1'.
+// Try providing type arguments to 'Typedef1' here or to some other raw types in the bounds along the reference chain.
+// class Class1<X1 extends Typedef1> {}
+// ^^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:14: Context: Bound of this variable references raw type 'Typedef1'.
+// class Class1<X1 extends Typedef1> {}
+// ^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:34: Context: Bound of this variable references raw type 'Class1'.
+// typedef Typedef1 = void Function<Y1 extends Class1>();
+// ^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:13:7: Error: Generic type 'Class2' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Typedef2'.
+// Try providing type arguments to 'Typedef2' here or to some other raw types in the bounds along the reference chain.
+// class Class2<X2 extends Typedef2> {}
+// ^^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:13:14: Context: Bound of this variable references raw type 'Typedef2'.
+// class Class2<X2 extends Typedef2> {}
+// ^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:15:34: Context: Bound of this variable references raw type 'Class2'.
+// typedef Typedef2 = void Function<Y2 extends (Class2, int)>();
+// ^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:19:9: Error: The typedef 'Typedef3' has a reference to itself.
+// typedef Typedef3 = (void Function<Y3 extends Class3>(), int);
+// ^
//
import self as self;
import "dart:core" as core;
-typedef Fisk = <TypeY extends core::Object? = dynamic>() → void;
-class Hest<TypeX extends <TypeY extends core::Object? = dynamic>() → void> extends core::Object {
- synthetic constructor •() → self::Hest<self::Hest::TypeX>
+typedef Typedef1 = <Y1 extends self::Class1<dynamic> = dynamic>() → void;
+typedef Typedef2 = <Y2 extends (self::Class2<dynamic>, core::int) = dynamic>() → void;
+typedef Typedef3 = invalid-type;
+class Class1<X1 extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class1<self::Class1::X1%>
+ : super core::Object::•()
+ ;
+}
+class Class2<X2 extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class2<self::Class2::X2%>
+ : super core::Object::•()
+ ;
+}
+class Class3<X3 extends invalid-type> extends core::Object {
+ synthetic constructor •() → self::Class3<self::Class3::X3%>
: super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.strong.transformed.expect
index 5a5d321..5d2a111 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.strong.transformed.expect
@@ -2,23 +2,50 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
-// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
-// typedef Fisk = void Function<TypeY extends Hest>();
-// ^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:30: Context: Bound of this variable references raw type 'Hest'.
-// typedef Fisk = void Function<TypeY extends Hest>();
-// ^^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:12: Context: Bound of this variable references raw type 'Fisk'.
-// class Hest<TypeX extends Fisk> {}
-// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:7: Error: Generic type 'Class1' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Typedef1'.
+// Try providing type arguments to 'Typedef1' here or to some other raw types in the bounds along the reference chain.
+// class Class1<X1 extends Typedef1> {}
+// ^^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:14: Context: Bound of this variable references raw type 'Typedef1'.
+// class Class1<X1 extends Typedef1> {}
+// ^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:34: Context: Bound of this variable references raw type 'Class1'.
+// typedef Typedef1 = void Function<Y1 extends Class1>();
+// ^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:13:7: Error: Generic type 'Class2' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Typedef2'.
+// Try providing type arguments to 'Typedef2' here or to some other raw types in the bounds along the reference chain.
+// class Class2<X2 extends Typedef2> {}
+// ^^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:13:14: Context: Bound of this variable references raw type 'Typedef2'.
+// class Class2<X2 extends Typedef2> {}
+// ^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:15:34: Context: Bound of this variable references raw type 'Class2'.
+// typedef Typedef2 = void Function<Y2 extends (Class2, int)>();
+// ^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:19:9: Error: The typedef 'Typedef3' has a reference to itself.
+// typedef Typedef3 = (void Function<Y3 extends Class3>(), int);
+// ^
//
import self as self;
import "dart:core" as core;
-typedef Fisk = <TypeY extends core::Object? = dynamic>() → void;
-class Hest<TypeX extends <TypeY extends core::Object? = dynamic>() → void> extends core::Object {
- synthetic constructor •() → self::Hest<self::Hest::TypeX>
+typedef Typedef1 = <Y1 extends self::Class1<dynamic> = dynamic>() → void;
+typedef Typedef2 = <Y2 extends (self::Class2<dynamic>, core::int) = dynamic>() → void;
+typedef Typedef3 = invalid-type;
+class Class1<X1 extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class1<self::Class1::X1%>
+ : super core::Object::•()
+ ;
+}
+class Class2<X2 extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class2<self::Class2::X2%>
+ : super core::Object::•()
+ ;
+}
+class Class3<X3 extends invalid-type> extends core::Object {
+ synthetic constructor •() → self::Class3<self::Class3::X3%>
: super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.textual_outline.expect
index e977e49..5545579 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.textual_outline.expect
@@ -1,4 +1,12 @@
-class Hest<TypeX extends Fisk> {}
+class Class1<X1 extends Typedef1> {}
-typedef Fisk = void Function<TypeY extends Hest>();
+typedef Typedef1 = void Function<Y1 extends Class1>();
+
+class Class2<X2 extends Typedef2> {}
+
+typedef Typedef2 = void Function<Y2 extends (Class2, int)>();
+
+class Class3<X3 extends Typedef3> {}
+
+typedef Typedef3 = (void Function<Y3 extends Class3>(), int);
main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.textual_outline_modelled.expect
index 7213ffd..19dd5e6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.textual_outline_modelled.expect
@@ -1,4 +1,10 @@
-class Hest<TypeX extends Fisk> {}
+class Class1<X1 extends Typedef1> {}
+
+class Class2<X2 extends Typedef2> {}
+
+class Class3<X3 extends Typedef3> {}
main() {}
-typedef Fisk = void Function<TypeY extends Hest>();
+typedef Typedef1 = void Function<Y1 extends Class1>();
+typedef Typedef2 = void Function<Y2 extends (Class2, int)>();
+typedef Typedef3 = (void Function<Y3 extends Class3>(), int);
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.expect
index 5a5d321..5d2a111 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.expect
@@ -2,23 +2,50 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
-// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
-// typedef Fisk = void Function<TypeY extends Hest>();
-// ^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:30: Context: Bound of this variable references raw type 'Hest'.
-// typedef Fisk = void Function<TypeY extends Hest>();
-// ^^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:12: Context: Bound of this variable references raw type 'Fisk'.
-// class Hest<TypeX extends Fisk> {}
-// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:7: Error: Generic type 'Class1' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Typedef1'.
+// Try providing type arguments to 'Typedef1' here or to some other raw types in the bounds along the reference chain.
+// class Class1<X1 extends Typedef1> {}
+// ^^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:14: Context: Bound of this variable references raw type 'Typedef1'.
+// class Class1<X1 extends Typedef1> {}
+// ^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:34: Context: Bound of this variable references raw type 'Class1'.
+// typedef Typedef1 = void Function<Y1 extends Class1>();
+// ^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:13:7: Error: Generic type 'Class2' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Typedef2'.
+// Try providing type arguments to 'Typedef2' here or to some other raw types in the bounds along the reference chain.
+// class Class2<X2 extends Typedef2> {}
+// ^^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:13:14: Context: Bound of this variable references raw type 'Typedef2'.
+// class Class2<X2 extends Typedef2> {}
+// ^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:15:34: Context: Bound of this variable references raw type 'Class2'.
+// typedef Typedef2 = void Function<Y2 extends (Class2, int)>();
+// ^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:19:9: Error: The typedef 'Typedef3' has a reference to itself.
+// typedef Typedef3 = (void Function<Y3 extends Class3>(), int);
+// ^
//
import self as self;
import "dart:core" as core;
-typedef Fisk = <TypeY extends core::Object? = dynamic>() → void;
-class Hest<TypeX extends <TypeY extends core::Object? = dynamic>() → void> extends core::Object {
- synthetic constructor •() → self::Hest<self::Hest::TypeX>
+typedef Typedef1 = <Y1 extends self::Class1<dynamic> = dynamic>() → void;
+typedef Typedef2 = <Y2 extends (self::Class2<dynamic>, core::int) = dynamic>() → void;
+typedef Typedef3 = invalid-type;
+class Class1<X1 extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class1<self::Class1::X1%>
+ : super core::Object::•()
+ ;
+}
+class Class2<X2 extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class2<self::Class2::X2%>
+ : super core::Object::•()
+ ;
+}
+class Class3<X3 extends invalid-type> extends core::Object {
+ synthetic constructor •() → self::Class3<self::Class3::X3%>
: super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.modular.expect
index 5a5d321..5d2a111 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.modular.expect
@@ -2,23 +2,50 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
-// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
-// typedef Fisk = void Function<TypeY extends Hest>();
-// ^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:30: Context: Bound of this variable references raw type 'Hest'.
-// typedef Fisk = void Function<TypeY extends Hest>();
-// ^^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:12: Context: Bound of this variable references raw type 'Fisk'.
-// class Hest<TypeX extends Fisk> {}
-// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:7: Error: Generic type 'Class1' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Typedef1'.
+// Try providing type arguments to 'Typedef1' here or to some other raw types in the bounds along the reference chain.
+// class Class1<X1 extends Typedef1> {}
+// ^^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:14: Context: Bound of this variable references raw type 'Typedef1'.
+// class Class1<X1 extends Typedef1> {}
+// ^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:34: Context: Bound of this variable references raw type 'Class1'.
+// typedef Typedef1 = void Function<Y1 extends Class1>();
+// ^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:13:7: Error: Generic type 'Class2' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Typedef2'.
+// Try providing type arguments to 'Typedef2' here or to some other raw types in the bounds along the reference chain.
+// class Class2<X2 extends Typedef2> {}
+// ^^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:13:14: Context: Bound of this variable references raw type 'Typedef2'.
+// class Class2<X2 extends Typedef2> {}
+// ^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:15:34: Context: Bound of this variable references raw type 'Class2'.
+// typedef Typedef2 = void Function<Y2 extends (Class2, int)>();
+// ^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:19:9: Error: The typedef 'Typedef3' has a reference to itself.
+// typedef Typedef3 = (void Function<Y3 extends Class3>(), int);
+// ^
//
import self as self;
import "dart:core" as core;
-typedef Fisk = <TypeY extends core::Object? = dynamic>() → void;
-class Hest<TypeX extends <TypeY extends core::Object? = dynamic>() → void> extends core::Object {
- synthetic constructor •() → self::Hest<self::Hest::TypeX>
+typedef Typedef1 = <Y1 extends self::Class1<dynamic> = dynamic>() → void;
+typedef Typedef2 = <Y2 extends (self::Class2<dynamic>, core::int) = dynamic>() → void;
+typedef Typedef3 = invalid-type;
+class Class1<X1 extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class1<self::Class1::X1%>
+ : super core::Object::•()
+ ;
+}
+class Class2<X2 extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class2<self::Class2::X2%>
+ : super core::Object::•()
+ ;
+}
+class Class3<X3 extends invalid-type> extends core::Object {
+ synthetic constructor •() → self::Class3<self::Class3::X3%>
: super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.outline.expect
index a4320b7..107e90d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.outline.expect
@@ -2,23 +2,48 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
-// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
-// typedef Fisk = void Function<TypeY extends Hest>();
-// ^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:30: Context: Bound of this variable references raw type 'Hest'.
-// typedef Fisk = void Function<TypeY extends Hest>();
-// ^^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:12: Context: Bound of this variable references raw type 'Fisk'.
-// class Hest<TypeX extends Fisk> {}
-// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:7: Error: Generic type 'Class1' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Typedef1'.
+// Try providing type arguments to 'Typedef1' here or to some other raw types in the bounds along the reference chain.
+// class Class1<X1 extends Typedef1> {}
+// ^^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:14: Context: Bound of this variable references raw type 'Typedef1'.
+// class Class1<X1 extends Typedef1> {}
+// ^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:34: Context: Bound of this variable references raw type 'Class1'.
+// typedef Typedef1 = void Function<Y1 extends Class1>();
+// ^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:13:7: Error: Generic type 'Class2' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Typedef2'.
+// Try providing type arguments to 'Typedef2' here or to some other raw types in the bounds along the reference chain.
+// class Class2<X2 extends Typedef2> {}
+// ^^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:13:14: Context: Bound of this variable references raw type 'Typedef2'.
+// class Class2<X2 extends Typedef2> {}
+// ^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:15:34: Context: Bound of this variable references raw type 'Class2'.
+// typedef Typedef2 = void Function<Y2 extends (Class2, int)>();
+// ^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:19:9: Error: The typedef 'Typedef3' has a reference to itself.
+// typedef Typedef3 = (void Function<Y3 extends Class3>(), int);
+// ^
//
import self as self;
import "dart:core" as core;
-typedef Fisk = <TypeY extends core::Object? = dynamic>() → void;
-class Hest<TypeX extends <TypeY extends core::Object? = dynamic>() → void> extends core::Object {
- synthetic constructor •() → self::Hest<self::Hest::TypeX>
+typedef Typedef1 = <Y1 extends self::Class1<dynamic> = dynamic>() → void;
+typedef Typedef2 = <Y2 extends (self::Class2<dynamic>, core::int) = dynamic>() → void;
+typedef Typedef3 = invalid-type;
+class Class1<X1 extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class1<self::Class1::X1%>
+ ;
+}
+class Class2<X2 extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class2<self::Class2::X2%>
+ ;
+}
+class Class3<X3 extends invalid-type> extends core::Object {
+ synthetic constructor •() → self::Class3<self::Class3::X3%>
;
}
static method main() → dynamic
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.transformed.expect
index 5a5d321..5d2a111 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.transformed.expect
@@ -2,23 +2,50 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
-// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
-// typedef Fisk = void Function<TypeY extends Hest>();
-// ^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:30: Context: Bound of this variable references raw type 'Hest'.
-// typedef Fisk = void Function<TypeY extends Hest>();
-// ^^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:12: Context: Bound of this variable references raw type 'Fisk'.
-// class Hest<TypeX extends Fisk> {}
-// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:7: Error: Generic type 'Class1' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Typedef1'.
+// Try providing type arguments to 'Typedef1' here or to some other raw types in the bounds along the reference chain.
+// class Class1<X1 extends Typedef1> {}
+// ^^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:14: Context: Bound of this variable references raw type 'Typedef1'.
+// class Class1<X1 extends Typedef1> {}
+// ^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:34: Context: Bound of this variable references raw type 'Class1'.
+// typedef Typedef1 = void Function<Y1 extends Class1>();
+// ^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:13:7: Error: Generic type 'Class2' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Typedef2'.
+// Try providing type arguments to 'Typedef2' here or to some other raw types in the bounds along the reference chain.
+// class Class2<X2 extends Typedef2> {}
+// ^^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:13:14: Context: Bound of this variable references raw type 'Typedef2'.
+// class Class2<X2 extends Typedef2> {}
+// ^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:15:34: Context: Bound of this variable references raw type 'Class2'.
+// typedef Typedef2 = void Function<Y2 extends (Class2, int)>();
+// ^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:19:9: Error: The typedef 'Typedef3' has a reference to itself.
+// typedef Typedef3 = (void Function<Y3 extends Class3>(), int);
+// ^
//
import self as self;
import "dart:core" as core;
-typedef Fisk = <TypeY extends core::Object? = dynamic>() → void;
-class Hest<TypeX extends <TypeY extends core::Object? = dynamic>() → void> extends core::Object {
- synthetic constructor •() → self::Hest<self::Hest::TypeX>
+typedef Typedef1 = <Y1 extends self::Class1<dynamic> = dynamic>() → void;
+typedef Typedef2 = <Y2 extends (self::Class2<dynamic>, core::int) = dynamic>() → void;
+typedef Typedef3 = invalid-type;
+class Class1<X1 extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class1<self::Class1::X1%>
+ : super core::Object::•()
+ ;
+}
+class Class2<X2 extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::Class2<self::Class2::X2%>
+ : super core::Object::•()
+ ;
+}
+class Class3<X3 extends invalid-type> extends core::Object {
+ synthetic constructor •() → self::Class3<self::Class3::X3%>
: super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.expect
index ffb5a18..4400d31 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.expect
@@ -13,41 +13,38 @@
// class A<TypeY extends lib.A> {}
// ^^^^^
//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:13:9: Error: The typedef 'C' has a reference to itself.
+// typedef C<TypeX extends lib.C> = int;
+// ^
+//
import self as self;
import "dart:core" as core;
import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle_lib.dart" as lib;
-typedef C<unrelated TypeX extends invalid-type> = core::int;
+typedef C<unrelated TypeX extends core::int> = invalid-type;
class A<TypeX extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() → self::A<self::A::TypeX%>
: super core::Object::•()
;
}
static method main() → dynamic {}
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#C#fromEnvironment#tearOff<unrelated TypeX extends invalid-type>(core::String name, {core::int defaultValue = #C1}) → core::int
- return core::int::fromEnvironment(name, defaultValue: defaultValue);
library non_simple_many_libs_same_name_cycle_lib;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle_lib.dart:18:9: Error: The typedef 'C' has a reference to itself.
-// typedef C<TypeY extends lib.C> = int;
-// ^
-//
import self as self2;
import "dart:core" as core;
import "non_simple_many_libs_same_name_cycle.dart" as self;
import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle.dart" as lib;
-typedef C<unrelated TypeY extends core::int> = invalid-type;
+typedef C<unrelated TypeY extends invalid-type> = core::int;
class A<TypeY extends self::A<dynamic>> extends core::Object {
synthetic constructor •() → self2::A<self2::A::TypeY>
: super core::Object::•()
;
}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#C#fromEnvironment#tearOff<unrelated TypeY extends invalid-type>(core::String name, {core::int defaultValue = #C1}) → core::int
+ return core::int::fromEnvironment(name, defaultValue: defaultValue);
constants {
#C1 = 0
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.transformed.expect
index ffb5a18..4400d31 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.strong.transformed.expect
@@ -13,41 +13,38 @@
// class A<TypeY extends lib.A> {}
// ^^^^^
//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:13:9: Error: The typedef 'C' has a reference to itself.
+// typedef C<TypeX extends lib.C> = int;
+// ^
+//
import self as self;
import "dart:core" as core;
import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle_lib.dart" as lib;
-typedef C<unrelated TypeX extends invalid-type> = core::int;
+typedef C<unrelated TypeX extends core::int> = invalid-type;
class A<TypeX extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() → self::A<self::A::TypeX%>
: super core::Object::•()
;
}
static method main() → dynamic {}
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#C#fromEnvironment#tearOff<unrelated TypeX extends invalid-type>(core::String name, {core::int defaultValue = #C1}) → core::int
- return core::int::fromEnvironment(name, defaultValue: defaultValue);
library non_simple_many_libs_same_name_cycle_lib;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle_lib.dart:18:9: Error: The typedef 'C' has a reference to itself.
-// typedef C<TypeY extends lib.C> = int;
-// ^
-//
import self as self2;
import "dart:core" as core;
import "non_simple_many_libs_same_name_cycle.dart" as self;
import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle.dart" as lib;
-typedef C<unrelated TypeY extends core::int> = invalid-type;
+typedef C<unrelated TypeY extends invalid-type> = core::int;
class A<TypeY extends self::A<dynamic>> extends core::Object {
synthetic constructor •() → self2::A<self2::A::TypeY>
: super core::Object::•()
;
}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#C#fromEnvironment#tearOff<unrelated TypeY extends invalid-type>(core::String name, {core::int defaultValue = #C1}) → core::int
+ return core::int::fromEnvironment(name, defaultValue: defaultValue);
constants {
#C1 = 0
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.expect
index ffb5a18..4400d31 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.expect
@@ -13,41 +13,38 @@
// class A<TypeY extends lib.A> {}
// ^^^^^
//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:13:9: Error: The typedef 'C' has a reference to itself.
+// typedef C<TypeX extends lib.C> = int;
+// ^
+//
import self as self;
import "dart:core" as core;
import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle_lib.dart" as lib;
-typedef C<unrelated TypeX extends invalid-type> = core::int;
+typedef C<unrelated TypeX extends core::int> = invalid-type;
class A<TypeX extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() → self::A<self::A::TypeX%>
: super core::Object::•()
;
}
static method main() → dynamic {}
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#C#fromEnvironment#tearOff<unrelated TypeX extends invalid-type>(core::String name, {core::int defaultValue = #C1}) → core::int
- return core::int::fromEnvironment(name, defaultValue: defaultValue);
library non_simple_many_libs_same_name_cycle_lib;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle_lib.dart:18:9: Error: The typedef 'C' has a reference to itself.
-// typedef C<TypeY extends lib.C> = int;
-// ^
-//
import self as self2;
import "dart:core" as core;
import "non_simple_many_libs_same_name_cycle.dart" as self;
import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle.dart" as lib;
-typedef C<unrelated TypeY extends core::int> = invalid-type;
+typedef C<unrelated TypeY extends invalid-type> = core::int;
class A<TypeY extends self::A<dynamic>> extends core::Object {
synthetic constructor •() → self2::A<self2::A::TypeY>
: super core::Object::•()
;
}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#C#fromEnvironment#tearOff<unrelated TypeY extends invalid-type>(core::String name, {core::int defaultValue = #C1}) → core::int
+ return core::int::fromEnvironment(name, defaultValue: defaultValue);
constants {
#C1 = 0
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.modular.expect
index ffb5a18..4400d31 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.modular.expect
@@ -13,41 +13,38 @@
// class A<TypeY extends lib.A> {}
// ^^^^^
//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:13:9: Error: The typedef 'C' has a reference to itself.
+// typedef C<TypeX extends lib.C> = int;
+// ^
+//
import self as self;
import "dart:core" as core;
import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle_lib.dart" as lib;
-typedef C<unrelated TypeX extends invalid-type> = core::int;
+typedef C<unrelated TypeX extends core::int> = invalid-type;
class A<TypeX extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() → self::A<self::A::TypeX%>
: super core::Object::•()
;
}
static method main() → dynamic {}
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#C#fromEnvironment#tearOff<unrelated TypeX extends invalid-type>(core::String name, {core::int defaultValue = #C1}) → core::int
- return core::int::fromEnvironment(name, defaultValue: defaultValue);
library non_simple_many_libs_same_name_cycle_lib;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle_lib.dart:18:9: Error: The typedef 'C' has a reference to itself.
-// typedef C<TypeY extends lib.C> = int;
-// ^
-//
import self as self2;
import "dart:core" as core;
import "non_simple_many_libs_same_name_cycle.dart" as self;
import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle.dart" as lib;
-typedef C<unrelated TypeY extends core::int> = invalid-type;
+typedef C<unrelated TypeY extends invalid-type> = core::int;
class A<TypeY extends self::A<dynamic>> extends core::Object {
synthetic constructor •() → self2::A<self2::A::TypeY>
: super core::Object::•()
;
}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#C#fromEnvironment#tearOff<unrelated TypeY extends invalid-type>(core::String name, {core::int defaultValue = #C1}) → core::int
+ return core::int::fromEnvironment(name, defaultValue: defaultValue);
constants {
#C1 = 0
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.outline.expect
index e87eae6..c0ec1f8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.outline.expect
@@ -13,37 +13,34 @@
// class A<TypeY extends lib.A> {}
// ^^^^^
//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:13:9: Error: The typedef 'C' has a reference to itself.
+// typedef C<TypeX extends lib.C> = int;
+// ^
+//
import self as self;
import "dart:core" as core;
import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle_lib.dart" as lib;
-typedef C<unrelated TypeX extends invalid-type> = core::int;
+typedef C<unrelated TypeX extends core::int> = invalid-type;
class A<TypeX extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() → self::A<self::A::TypeX%>
;
}
static method main() → dynamic
;
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#C#fromEnvironment#tearOff<unrelated TypeX extends invalid-type>(core::String name, {has-declared-initializer core::int defaultValue}) → core::int
- return core::int::fromEnvironment(name, defaultValue: defaultValue);
library non_simple_many_libs_same_name_cycle_lib;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle_lib.dart:18:9: Error: The typedef 'C' has a reference to itself.
-// typedef C<TypeY extends lib.C> = int;
-// ^
-//
import self as self2;
import "dart:core" as core;
import "non_simple_many_libs_same_name_cycle.dart" as self;
import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle.dart" as lib;
-typedef C<unrelated TypeY extends core::int> = invalid-type;
+typedef C<unrelated TypeY extends invalid-type> = core::int;
class A<TypeY extends self::A<dynamic>> extends core::Object {
synthetic constructor •() → self2::A<self2::A::TypeY>
;
}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#C#fromEnvironment#tearOff<unrelated TypeY extends invalid-type>(core::String name, {has-declared-initializer core::int defaultValue}) → core::int
+ return core::int::fromEnvironment(name, defaultValue: defaultValue);
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.transformed.expect
index ffb5a18..4400d31 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.transformed.expect
@@ -13,41 +13,38 @@
// class A<TypeY extends lib.A> {}
// ^^^^^
//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:13:9: Error: The typedef 'C' has a reference to itself.
+// typedef C<TypeX extends lib.C> = int;
+// ^
+//
import self as self;
import "dart:core" as core;
import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle_lib.dart" as lib;
-typedef C<unrelated TypeX extends invalid-type> = core::int;
+typedef C<unrelated TypeX extends core::int> = invalid-type;
class A<TypeX extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() → self::A<self::A::TypeX%>
: super core::Object::•()
;
}
static method main() → dynamic {}
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#C#fromEnvironment#tearOff<unrelated TypeX extends invalid-type>(core::String name, {core::int defaultValue = #C1}) → core::int
- return core::int::fromEnvironment(name, defaultValue: defaultValue);
library non_simple_many_libs_same_name_cycle_lib;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle_lib.dart:18:9: Error: The typedef 'C' has a reference to itself.
-// typedef C<TypeY extends lib.C> = int;
-// ^
-//
import self as self2;
import "dart:core" as core;
import "non_simple_many_libs_same_name_cycle.dart" as self;
import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle.dart" as lib;
-typedef C<unrelated TypeY extends core::int> = invalid-type;
+typedef C<unrelated TypeY extends invalid-type> = core::int;
class A<TypeY extends self::A<dynamic>> extends core::Object {
synthetic constructor •() → self2::A<self2::A::TypeY>
: super core::Object::•()
;
}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#C#fromEnvironment#tearOff<unrelated TypeY extends invalid-type>(core::String name, {core::int defaultValue = #C1}) → core::int
+ return core::int::fromEnvironment(name, defaultValue: defaultValue);
constants {
#C1 = 0
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart b/pkg/front_end/testcases/nnbd/issue34803.dart
index 0069fc6d..f20617d 100644
--- a/pkg/front_end/testcases/nnbd/issue34803.dart
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart
@@ -2,9 +2,13 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-// @dart=2.13
+class A<X1 extends G<num>> {}
+typedef G<X1> = void Function<Y1 extends X1>();
-class A<X extends G<num>> {}
-typedef G<X> = void Function<Y extends X>();
+class B<X2 extends H<num>> {}
+typedef H<X2> = (void Function<Y2 extends X2>(), int);
+
+class C<X3 extends I<num>> {}
+typedef I<X3> = ({void Function<Y3 extends X3>() a, int b});
main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue34803.dart.strong.expect
index 52c352c..3a552b4 100644
--- a/pkg/front_end/testcases/nnbd/issue34803.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart.strong.expect
@@ -1,17 +1,22 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/issue34803.dart:7:9: Error: Type variables can't have generic function types in their bounds.
-// class A<X extends G<num>> {}
-// ^
-//
import self as self;
import "dart:core" as core;
-typedef G<invariant X extends core::Object? = dynamic> = <Y extends X% = dynamic>() → void;
-class A<X extends <Y extends core::num = dynamic>() → void = dynamic> extends core::Object {
- synthetic constructor •() → self::A<self::A::X>
+typedef G<invariant X1 extends core::Object? = dynamic> = <Y1 extends X1% = dynamic>() → void;
+typedef H<invariant X2 extends core::Object? = dynamic> = (<Y2 extends X2% = dynamic>() → void, core::int);
+typedef I<invariant X3 extends core::Object? = dynamic> = ({required a: <Y3 extends X3% = dynamic>() → void, required b: core::int});
+class A<X1 extends <Y1 extends core::num = dynamic>() → void> extends core::Object {
+ synthetic constructor •() → self::A<self::A::X1>
+ : super core::Object::•()
+ ;
+}
+class B<X2 extends (<Y2 extends core::num = dynamic>() → void, core::int)> extends core::Object {
+ synthetic constructor •() → self::B<self::B::X2>
+ : super core::Object::•()
+ ;
+}
+class C<X3 extends ({required a: <Y3 extends core::num = dynamic>() → void, required b: core::int})> extends core::Object {
+ synthetic constructor •() → self::C<self::C::X3>
: super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue34803.dart.strong.transformed.expect
index 52c352c..3a552b4 100644
--- a/pkg/front_end/testcases/nnbd/issue34803.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart.strong.transformed.expect
@@ -1,17 +1,22 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/issue34803.dart:7:9: Error: Type variables can't have generic function types in their bounds.
-// class A<X extends G<num>> {}
-// ^
-//
import self as self;
import "dart:core" as core;
-typedef G<invariant X extends core::Object? = dynamic> = <Y extends X% = dynamic>() → void;
-class A<X extends <Y extends core::num = dynamic>() → void = dynamic> extends core::Object {
- synthetic constructor •() → self::A<self::A::X>
+typedef G<invariant X1 extends core::Object? = dynamic> = <Y1 extends X1% = dynamic>() → void;
+typedef H<invariant X2 extends core::Object? = dynamic> = (<Y2 extends X2% = dynamic>() → void, core::int);
+typedef I<invariant X3 extends core::Object? = dynamic> = ({required a: <Y3 extends X3% = dynamic>() → void, required b: core::int});
+class A<X1 extends <Y1 extends core::num = dynamic>() → void> extends core::Object {
+ synthetic constructor •() → self::A<self::A::X1>
+ : super core::Object::•()
+ ;
+}
+class B<X2 extends (<Y2 extends core::num = dynamic>() → void, core::int)> extends core::Object {
+ synthetic constructor •() → self::B<self::B::X2>
+ : super core::Object::•()
+ ;
+}
+class C<X3 extends ({required a: <Y3 extends core::num = dynamic>() → void, required b: core::int})> extends core::Object {
+ synthetic constructor •() → self::C<self::C::X3>
: super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/issue34803.dart.textual_outline.expect
index 987cefd..6b14eb1 100644
--- a/pkg/front_end/testcases/nnbd/issue34803.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart.textual_outline.expect
@@ -1,5 +1,12 @@
-// @dart = 2.13
-class A<X extends G<num>> {}
+class A<X1 extends G<num>> {}
-typedef G<X> = void Function<Y extends X>();
+typedef G<X1> = void Function<Y1 extends X1>();
+
+class B<X2 extends H<num>> {}
+
+typedef H<X2> = (void Function<Y2 extends X2>(), int);
+
+class C<X3 extends I<num>> {}
+
+typedef I<X3> = ({void Function<Y3 extends X3>() a, int b});
main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/issue34803.dart.textual_outline_modelled.expect
index ff10684..28edc37 100644
--- a/pkg/front_end/testcases/nnbd/issue34803.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart.textual_outline_modelled.expect
@@ -1,5 +1,10 @@
-// @dart = 2.13
-class A<X extends G<num>> {}
+class A<X1 extends G<num>> {}
+
+class B<X2 extends H<num>> {}
+
+class C<X3 extends I<num>> {}
main() {}
-typedef G<X> = void Function<Y extends X>();
+typedef G<X1> = void Function<Y1 extends X1>();
+typedef H<X2> = (void Function<Y2 extends X2>(), int);
+typedef I<X3> = ({void Function<Y3 extends X3>() a, int b});
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue34803.dart.weak.expect
index 52c352c..3a552b4 100644
--- a/pkg/front_end/testcases/nnbd/issue34803.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart.weak.expect
@@ -1,17 +1,22 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/issue34803.dart:7:9: Error: Type variables can't have generic function types in their bounds.
-// class A<X extends G<num>> {}
-// ^
-//
import self as self;
import "dart:core" as core;
-typedef G<invariant X extends core::Object? = dynamic> = <Y extends X% = dynamic>() → void;
-class A<X extends <Y extends core::num = dynamic>() → void = dynamic> extends core::Object {
- synthetic constructor •() → self::A<self::A::X>
+typedef G<invariant X1 extends core::Object? = dynamic> = <Y1 extends X1% = dynamic>() → void;
+typedef H<invariant X2 extends core::Object? = dynamic> = (<Y2 extends X2% = dynamic>() → void, core::int);
+typedef I<invariant X3 extends core::Object? = dynamic> = ({required a: <Y3 extends X3% = dynamic>() → void, required b: core::int});
+class A<X1 extends <Y1 extends core::num = dynamic>() → void> extends core::Object {
+ synthetic constructor •() → self::A<self::A::X1>
+ : super core::Object::•()
+ ;
+}
+class B<X2 extends (<Y2 extends core::num = dynamic>() → void, core::int)> extends core::Object {
+ synthetic constructor •() → self::B<self::B::X2>
+ : super core::Object::•()
+ ;
+}
+class C<X3 extends ({required a: <Y3 extends core::num = dynamic>() → void, required b: core::int})> extends core::Object {
+ synthetic constructor •() → self::C<self::C::X3>
: super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue34803.dart.weak.modular.expect
index 52c352c..3a552b4 100644
--- a/pkg/front_end/testcases/nnbd/issue34803.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart.weak.modular.expect
@@ -1,17 +1,22 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/issue34803.dart:7:9: Error: Type variables can't have generic function types in their bounds.
-// class A<X extends G<num>> {}
-// ^
-//
import self as self;
import "dart:core" as core;
-typedef G<invariant X extends core::Object? = dynamic> = <Y extends X% = dynamic>() → void;
-class A<X extends <Y extends core::num = dynamic>() → void = dynamic> extends core::Object {
- synthetic constructor •() → self::A<self::A::X>
+typedef G<invariant X1 extends core::Object? = dynamic> = <Y1 extends X1% = dynamic>() → void;
+typedef H<invariant X2 extends core::Object? = dynamic> = (<Y2 extends X2% = dynamic>() → void, core::int);
+typedef I<invariant X3 extends core::Object? = dynamic> = ({required a: <Y3 extends X3% = dynamic>() → void, required b: core::int});
+class A<X1 extends <Y1 extends core::num = dynamic>() → void> extends core::Object {
+ synthetic constructor •() → self::A<self::A::X1>
+ : super core::Object::•()
+ ;
+}
+class B<X2 extends (<Y2 extends core::num = dynamic>() → void, core::int)> extends core::Object {
+ synthetic constructor •() → self::B<self::B::X2>
+ : super core::Object::•()
+ ;
+}
+class C<X3 extends ({required a: <Y3 extends core::num = dynamic>() → void, required b: core::int})> extends core::Object {
+ synthetic constructor •() → self::C<self::C::X3>
: super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue34803.dart.weak.outline.expect
index 7ea1512..7c735eb 100644
--- a/pkg/front_end/testcases/nnbd/issue34803.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart.weak.outline.expect
@@ -1,17 +1,20 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/issue34803.dart:7:9: Error: Type variables can't have generic function types in their bounds.
-// class A<X extends G<num>> {}
-// ^
-//
import self as self;
import "dart:core" as core;
-typedef G<invariant X extends core::Object? = dynamic> = <Y extends X% = dynamic>() → void;
-class A<X extends <Y extends core::num = dynamic>() → void = dynamic> extends core::Object {
- synthetic constructor •() → self::A<self::A::X>
+typedef G<invariant X1 extends core::Object? = dynamic> = <Y1 extends X1% = dynamic>() → void;
+typedef H<invariant X2 extends core::Object? = dynamic> = (<Y2 extends X2% = dynamic>() → void, core::int);
+typedef I<invariant X3 extends core::Object? = dynamic> = ({required a: <Y3 extends X3% = dynamic>() → void, required b: core::int});
+class A<X1 extends <Y1 extends core::num = dynamic>() → void> extends core::Object {
+ synthetic constructor •() → self::A<self::A::X1>
+ ;
+}
+class B<X2 extends (<Y2 extends core::num = dynamic>() → void, core::int)> extends core::Object {
+ synthetic constructor •() → self::B<self::B::X2>
+ ;
+}
+class C<X3 extends ({required a: <Y3 extends core::num = dynamic>() → void, required b: core::int})> extends core::Object {
+ synthetic constructor •() → self::C<self::C::X3>
;
}
static method main() → dynamic
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue34803.dart.weak.transformed.expect
index 52c352c..3a552b4 100644
--- a/pkg/front_end/testcases/nnbd/issue34803.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart.weak.transformed.expect
@@ -1,17 +1,22 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/issue34803.dart:7:9: Error: Type variables can't have generic function types in their bounds.
-// class A<X extends G<num>> {}
-// ^
-//
import self as self;
import "dart:core" as core;
-typedef G<invariant X extends core::Object? = dynamic> = <Y extends X% = dynamic>() → void;
-class A<X extends <Y extends core::num = dynamic>() → void = dynamic> extends core::Object {
- synthetic constructor •() → self::A<self::A::X>
+typedef G<invariant X1 extends core::Object? = dynamic> = <Y1 extends X1% = dynamic>() → void;
+typedef H<invariant X2 extends core::Object? = dynamic> = (<Y2 extends X2% = dynamic>() → void, core::int);
+typedef I<invariant X3 extends core::Object? = dynamic> = ({required a: <Y3 extends X3% = dynamic>() → void, required b: core::int});
+class A<X1 extends <Y1 extends core::num = dynamic>() → void> extends core::Object {
+ synthetic constructor •() → self::A<self::A::X1>
+ : super core::Object::•()
+ ;
+}
+class B<X2 extends (<Y2 extends core::num = dynamic>() → void, core::int)> extends core::Object {
+ synthetic constructor •() → self::B<self::B::X2>
+ : super core::Object::•()
+ ;
+}
+class C<X3 extends ({required a: <Y3 extends core::num = dynamic>() → void, required b: core::int})> extends core::Object {
+ synthetic constructor •() → self::C<self::C::X3>
: super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/records/issue50182.dart.strong.expect b/pkg/front_end/testcases/records/issue50182.dart.strong.expect
index aec4e08..3e502c4 100644
--- a/pkg/front_end/testcases/records/issue50182.dart.strong.expect
+++ b/pkg/front_end/testcases/records/issue50182.dart.strong.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-typedef Hello<unrelated T extends core::Object? = dynamic> = (T%, {required name: T%});
+typedef Hello<T extends core::Object? = dynamic> = (T%, {required name: T%});
class MyClass<T extends core::Object? = dynamic> extends core::Object {
final field () → self::Value<(self::MyClass::T%, {required name: self::MyClass::T%})>? myField;
constructor •(() → self::Value<(self::MyClass::T%, {required name: self::MyClass::T%})>? myField) → self::MyClass<self::MyClass::T%>
diff --git a/pkg/front_end/testcases/records/issue50182.dart.strong.transformed.expect b/pkg/front_end/testcases/records/issue50182.dart.strong.transformed.expect
index 85bd7f3..01b4cac 100644
--- a/pkg/front_end/testcases/records/issue50182.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/records/issue50182.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-typedef Hello<unrelated T extends core::Object? = dynamic> = (T%, {required name: T%});
+typedef Hello<T extends core::Object? = dynamic> = (T%, {required name: T%});
class MyClass<T extends core::Object? = dynamic> extends core::Object {
final field () → self::Value<(self::MyClass::T%, {required name: self::MyClass::T%})>? myField;
constructor •(() → self::Value<(self::MyClass::T%, {required name: self::MyClass::T%})>? myField) → self::MyClass<self::MyClass::T%>
diff --git a/pkg/front_end/testcases/records/issue50182.dart.weak.expect b/pkg/front_end/testcases/records/issue50182.dart.weak.expect
index aec4e08..3e502c4 100644
--- a/pkg/front_end/testcases/records/issue50182.dart.weak.expect
+++ b/pkg/front_end/testcases/records/issue50182.dart.weak.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-typedef Hello<unrelated T extends core::Object? = dynamic> = (T%, {required name: T%});
+typedef Hello<T extends core::Object? = dynamic> = (T%, {required name: T%});
class MyClass<T extends core::Object? = dynamic> extends core::Object {
final field () → self::Value<(self::MyClass::T%, {required name: self::MyClass::T%})>? myField;
constructor •(() → self::Value<(self::MyClass::T%, {required name: self::MyClass::T%})>? myField) → self::MyClass<self::MyClass::T%>
diff --git a/pkg/front_end/testcases/records/issue50182.dart.weak.modular.expect b/pkg/front_end/testcases/records/issue50182.dart.weak.modular.expect
index aec4e08..3e502c4 100644
--- a/pkg/front_end/testcases/records/issue50182.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/records/issue50182.dart.weak.modular.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-typedef Hello<unrelated T extends core::Object? = dynamic> = (T%, {required name: T%});
+typedef Hello<T extends core::Object? = dynamic> = (T%, {required name: T%});
class MyClass<T extends core::Object? = dynamic> extends core::Object {
final field () → self::Value<(self::MyClass::T%, {required name: self::MyClass::T%})>? myField;
constructor •(() → self::Value<(self::MyClass::T%, {required name: self::MyClass::T%})>? myField) → self::MyClass<self::MyClass::T%>
diff --git a/pkg/front_end/testcases/records/issue50182.dart.weak.outline.expect b/pkg/front_end/testcases/records/issue50182.dart.weak.outline.expect
index 046d435..bfcb91e 100644
--- a/pkg/front_end/testcases/records/issue50182.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/records/issue50182.dart.weak.outline.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-typedef Hello<unrelated T extends core::Object? = dynamic> = (T%, {required name: T%});
+typedef Hello<T extends core::Object? = dynamic> = (T%, {required name: T%});
class MyClass<T extends core::Object? = dynamic> extends core::Object {
final field () → self::Value<(self::MyClass::T%, {required name: self::MyClass::T%})>? myField;
constructor •(() → self::Value<(self::MyClass::T%, {required name: self::MyClass::T%})>? myField) → self::MyClass<self::MyClass::T%>
diff --git a/pkg/front_end/testcases/records/issue50182.dart.weak.transformed.expect b/pkg/front_end/testcases/records/issue50182.dart.weak.transformed.expect
index 85bd7f3..01b4cac 100644
--- a/pkg/front_end/testcases/records/issue50182.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/records/issue50182.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-typedef Hello<unrelated T extends core::Object? = dynamic> = (T%, {required name: T%});
+typedef Hello<T extends core::Object? = dynamic> = (T%, {required name: T%});
class MyClass<T extends core::Object? = dynamic> extends core::Object {
final field () → self::Value<(self::MyClass::T%, {required name: self::MyClass::T%})>? myField;
constructor •(() → self::Value<(self::MyClass::T%, {required name: self::MyClass::T%})>? myField) → self::MyClass<self::MyClass::T%>
diff --git a/pkg/front_end/testcases/records/issue51940.dart.strong.expect b/pkg/front_end/testcases/records/issue51940.dart.strong.expect
index e7f616c..676b9ba 100644
--- a/pkg/front_end/testcases/records/issue51940.dart.strong.expect
+++ b/pkg/front_end/testcases/records/issue51940.dart.strong.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-typedef Parser<unrelated T extends core::Object? = dynamic> = (core::String) → (self::Result<T%>, core::String);
+typedef Parser<T extends core::Object? = dynamic> = (core::String) → (self::Result<T%>, core::String);
abstract sealed class Result<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::Result<self::Result::T%>
: super core::Object::•()
diff --git a/pkg/front_end/testcases/records/issue51940.dart.strong.transformed.expect b/pkg/front_end/testcases/records/issue51940.dart.strong.transformed.expect
index e7f616c..676b9ba 100644
--- a/pkg/front_end/testcases/records/issue51940.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/records/issue51940.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-typedef Parser<unrelated T extends core::Object? = dynamic> = (core::String) → (self::Result<T%>, core::String);
+typedef Parser<T extends core::Object? = dynamic> = (core::String) → (self::Result<T%>, core::String);
abstract sealed class Result<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::Result<self::Result::T%>
: super core::Object::•()
diff --git a/pkg/front_end/testcases/records/issue51940.dart.weak.expect b/pkg/front_end/testcases/records/issue51940.dart.weak.expect
index 0b8b49e..340195e 100644
--- a/pkg/front_end/testcases/records/issue51940.dart.weak.expect
+++ b/pkg/front_end/testcases/records/issue51940.dart.weak.expect
@@ -3,7 +3,7 @@
import "dart:core" as core;
import "dart:_internal" as _in;
-typedef Parser<unrelated T extends core::Object? = dynamic> = (core::String) → (self::Result<T%>, core::String);
+typedef Parser<T extends core::Object? = dynamic> = (core::String) → (self::Result<T%>, core::String);
abstract sealed class Result<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::Result<self::Result::T%>
: super core::Object::•()
diff --git a/pkg/front_end/testcases/records/issue51940.dart.weak.modular.expect b/pkg/front_end/testcases/records/issue51940.dart.weak.modular.expect
index 0b8b49e..340195e 100644
--- a/pkg/front_end/testcases/records/issue51940.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/records/issue51940.dart.weak.modular.expect
@@ -3,7 +3,7 @@
import "dart:core" as core;
import "dart:_internal" as _in;
-typedef Parser<unrelated T extends core::Object? = dynamic> = (core::String) → (self::Result<T%>, core::String);
+typedef Parser<T extends core::Object? = dynamic> = (core::String) → (self::Result<T%>, core::String);
abstract sealed class Result<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::Result<self::Result::T%>
: super core::Object::•()
diff --git a/pkg/front_end/testcases/records/issue51940.dart.weak.outline.expect b/pkg/front_end/testcases/records/issue51940.dart.weak.outline.expect
index af1741f..1425b8a 100644
--- a/pkg/front_end/testcases/records/issue51940.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/records/issue51940.dart.weak.outline.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-typedef Parser<unrelated T extends core::Object? = dynamic> = (core::String) → (self::Result<T%>, core::String);
+typedef Parser<T extends core::Object? = dynamic> = (core::String) → (self::Result<T%>, core::String);
abstract sealed class Result<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::Result<self::Result::T%>
: super core::Object::•()
diff --git a/pkg/front_end/testcases/records/issue51940.dart.weak.transformed.expect b/pkg/front_end/testcases/records/issue51940.dart.weak.transformed.expect
index 0b8b49e..340195e 100644
--- a/pkg/front_end/testcases/records/issue51940.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/records/issue51940.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
import "dart:core" as core;
import "dart:_internal" as _in;
-typedef Parser<unrelated T extends core::Object? = dynamic> = (core::String) → (self::Result<T%>, core::String);
+typedef Parser<T extends core::Object? = dynamic> = (core::String) → (self::Result<T%>, core::String);
abstract sealed class Result<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::Result<self::Result::T%>
: super core::Object::•()
diff --git a/pkg/front_end/testcases/records/variance.dart b/pkg/front_end/testcases/records/variance.dart
new file mode 100644
index 0000000..4388d2d
--- /dev/null
+++ b/pkg/front_end/testcases/records/variance.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+typedef A<T> = (String, int);
+typedef B<T> = (T, int);
+typedef C<T> = ({T a, int b});
+typedef D<T> = (T, T);
+typedef E<T> = (void Function(T), int);
+typedef F<T> = ({void Function(T) a, int b});
+typedef G<T> = (void Function(T), T);
+typedef H<T> = (void Function(T), {T b});
diff --git a/pkg/front_end/testcases/records/variance.dart.strong.expect b/pkg/front_end/testcases/records/variance.dart.strong.expect
new file mode 100644
index 0000000..4de9aa5
--- /dev/null
+++ b/pkg/front_end/testcases/records/variance.dart.strong.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<unrelated T extends core::Object? = dynamic> = (core::String, core::int);
+typedef B<T extends core::Object? = dynamic> = (T%, core::int);
+typedef C<T extends core::Object? = dynamic> = ({required a: T%, required b: core::int});
+typedef D<T extends core::Object? = dynamic> = (T%, T%);
+typedef E<contravariant T extends core::Object? = dynamic> = ((T%) → void, core::int);
+typedef F<contravariant T extends core::Object? = dynamic> = ({required a: (T%) → void, required b: core::int});
+typedef G<invariant T extends core::Object? = dynamic> = ((T%) → void, T%);
+typedef H<invariant T extends core::Object? = dynamic> = ((T%) → void, {required b: T%});
diff --git a/pkg/front_end/testcases/records/variance.dart.strong.transformed.expect b/pkg/front_end/testcases/records/variance.dart.strong.transformed.expect
new file mode 100644
index 0000000..4de9aa5
--- /dev/null
+++ b/pkg/front_end/testcases/records/variance.dart.strong.transformed.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<unrelated T extends core::Object? = dynamic> = (core::String, core::int);
+typedef B<T extends core::Object? = dynamic> = (T%, core::int);
+typedef C<T extends core::Object? = dynamic> = ({required a: T%, required b: core::int});
+typedef D<T extends core::Object? = dynamic> = (T%, T%);
+typedef E<contravariant T extends core::Object? = dynamic> = ((T%) → void, core::int);
+typedef F<contravariant T extends core::Object? = dynamic> = ({required a: (T%) → void, required b: core::int});
+typedef G<invariant T extends core::Object? = dynamic> = ((T%) → void, T%);
+typedef H<invariant T extends core::Object? = dynamic> = ((T%) → void, {required b: T%});
diff --git a/pkg/front_end/testcases/records/variance.dart.textual_outline.expect b/pkg/front_end/testcases/records/variance.dart.textual_outline.expect
new file mode 100644
index 0000000..aa38e10
--- /dev/null
+++ b/pkg/front_end/testcases/records/variance.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+typedef A<T> = (String, int);
+typedef B<T> = (T, int);
+typedef C<T> = ({T a, int b});
+typedef D<T> = (T, T);
+typedef E<T> = (void Function(T), int);
+typedef F<T> = ({void Function(T) a, int b});
+typedef G<T> = (void Function(T), T);
+typedef H<T> = (void Function(T), {T b});
diff --git a/pkg/front_end/testcases/records/variance.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/records/variance.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..aa38e10
--- /dev/null
+++ b/pkg/front_end/testcases/records/variance.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+typedef A<T> = (String, int);
+typedef B<T> = (T, int);
+typedef C<T> = ({T a, int b});
+typedef D<T> = (T, T);
+typedef E<T> = (void Function(T), int);
+typedef F<T> = ({void Function(T) a, int b});
+typedef G<T> = (void Function(T), T);
+typedef H<T> = (void Function(T), {T b});
diff --git a/pkg/front_end/testcases/records/variance.dart.weak.expect b/pkg/front_end/testcases/records/variance.dart.weak.expect
new file mode 100644
index 0000000..4de9aa5
--- /dev/null
+++ b/pkg/front_end/testcases/records/variance.dart.weak.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<unrelated T extends core::Object? = dynamic> = (core::String, core::int);
+typedef B<T extends core::Object? = dynamic> = (T%, core::int);
+typedef C<T extends core::Object? = dynamic> = ({required a: T%, required b: core::int});
+typedef D<T extends core::Object? = dynamic> = (T%, T%);
+typedef E<contravariant T extends core::Object? = dynamic> = ((T%) → void, core::int);
+typedef F<contravariant T extends core::Object? = dynamic> = ({required a: (T%) → void, required b: core::int});
+typedef G<invariant T extends core::Object? = dynamic> = ((T%) → void, T%);
+typedef H<invariant T extends core::Object? = dynamic> = ((T%) → void, {required b: T%});
diff --git a/pkg/front_end/testcases/records/variance.dart.weak.modular.expect b/pkg/front_end/testcases/records/variance.dart.weak.modular.expect
new file mode 100644
index 0000000..4de9aa5
--- /dev/null
+++ b/pkg/front_end/testcases/records/variance.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<unrelated T extends core::Object? = dynamic> = (core::String, core::int);
+typedef B<T extends core::Object? = dynamic> = (T%, core::int);
+typedef C<T extends core::Object? = dynamic> = ({required a: T%, required b: core::int});
+typedef D<T extends core::Object? = dynamic> = (T%, T%);
+typedef E<contravariant T extends core::Object? = dynamic> = ((T%) → void, core::int);
+typedef F<contravariant T extends core::Object? = dynamic> = ({required a: (T%) → void, required b: core::int});
+typedef G<invariant T extends core::Object? = dynamic> = ((T%) → void, T%);
+typedef H<invariant T extends core::Object? = dynamic> = ((T%) → void, {required b: T%});
diff --git a/pkg/front_end/testcases/records/variance.dart.weak.outline.expect b/pkg/front_end/testcases/records/variance.dart.weak.outline.expect
new file mode 100644
index 0000000..4de9aa5
--- /dev/null
+++ b/pkg/front_end/testcases/records/variance.dart.weak.outline.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<unrelated T extends core::Object? = dynamic> = (core::String, core::int);
+typedef B<T extends core::Object? = dynamic> = (T%, core::int);
+typedef C<T extends core::Object? = dynamic> = ({required a: T%, required b: core::int});
+typedef D<T extends core::Object? = dynamic> = (T%, T%);
+typedef E<contravariant T extends core::Object? = dynamic> = ((T%) → void, core::int);
+typedef F<contravariant T extends core::Object? = dynamic> = ({required a: (T%) → void, required b: core::int});
+typedef G<invariant T extends core::Object? = dynamic> = ((T%) → void, T%);
+typedef H<invariant T extends core::Object? = dynamic> = ((T%) → void, {required b: T%});
diff --git a/pkg/front_end/testcases/records/variance.dart.weak.transformed.expect b/pkg/front_end/testcases/records/variance.dart.weak.transformed.expect
new file mode 100644
index 0000000..4de9aa5
--- /dev/null
+++ b/pkg/front_end/testcases/records/variance.dart.weak.transformed.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<unrelated T extends core::Object? = dynamic> = (core::String, core::int);
+typedef B<T extends core::Object? = dynamic> = (T%, core::int);
+typedef C<T extends core::Object? = dynamic> = ({required a: T%, required b: core::int});
+typedef D<T extends core::Object? = dynamic> = (T%, T%);
+typedef E<contravariant T extends core::Object? = dynamic> = ((T%) → void, core::int);
+typedef F<contravariant T extends core::Object? = dynamic> = ({required a: (T%) → void, required b: core::int});
+typedef G<invariant T extends core::Object? = dynamic> = ((T%) → void, T%);
+typedef H<invariant T extends core::Object? = dynamic> = ((T%) → void, {required b: T%});