Version 2.17.0-208.0.dev
Merge commit '7e4b88c0c934685cb6da0f57226b2ec16bb0a94a' into 'dev'
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index 0f02e2e..897b3d8 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -116,7 +116,7 @@
import 'incremental_serializer.dart' show IncrementalSerializer;
-import 'kernel/macro.dart' show enableMacros, NeededPrecompilations;
+import 'kernel/macro/macro.dart' show enableMacros, NeededPrecompilations;
import 'scope.dart' show Scope;
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 30bd373..2bd09ac 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
@@ -51,7 +51,7 @@
List<Supertype> interfacesList;
int maxInheritancePath;
- List<TypeBuilder>? directInterfaceBuilders;
+ List<ClassHierarchyNode>? interfaceNodes;
if (classBuilder.isMixinApplication) {
inferMixinApplication();
@@ -85,7 +85,8 @@
}
}
- directInterfaceBuilders = ignoreFunction(classBuilder.interfaceBuilders);
+ List<TypeBuilder>? directInterfaceBuilders =
+ ignoreFunction(classBuilder.interfaceBuilders);
if (classBuilder.isMixinApplication) {
if (directInterfaceBuilders == null) {
directInterfaceBuilders = <TypeBuilder>[
@@ -99,15 +100,13 @@
}
List<Supertype> superclassInterfaces = supernode.interfaces;
- // ignore: unnecessary_null_comparison
- if (superclassInterfaces != null) {
+ if (superclassInterfaces.isNotEmpty) {
superclassInterfaces = substSupertypes(supertype, superclassInterfaces);
}
if (directInterfaceBuilders != null) {
Map<Class, Supertype> interfaces = {};
- // ignore: unnecessary_null_comparison
- if (superclassInterfaces != null) {
+ if (superclassInterfaces.isNotEmpty) {
for (int i = 0; i < superclassInterfaces.length; i++) {
addInterface(interfaces, superclasses, superclassInterfaces[i]);
}
@@ -121,31 +120,28 @@
addInterface(interfaces, superclasses, directInterface);
ClassHierarchyNode interfaceNode =
hierarchy.getNodeFromClass(directInterface.classNode);
- // ignore: unnecessary_null_comparison
- if (interfaceNode != null) {
- if (maxInheritancePath < interfaceNode.maxInheritancePath + 1) {
- maxInheritancePath = interfaceNode.maxInheritancePath + 1;
- }
+ (interfaceNodes ??= []).add(interfaceNode);
+ if (maxInheritancePath < interfaceNode.maxInheritancePath + 1) {
+ maxInheritancePath = interfaceNode.maxInheritancePath + 1;
+ }
+
+ List<Supertype> types =
+ substSupertypes(directInterface, interfaceNode.superclasses);
+ for (int i = 0; i < types.length; i++) {
+ addInterface(interfaces, superclasses, types[i]);
+ }
+ if (interfaceNode.interfaces.isNotEmpty) {
List<Supertype> types =
- substSupertypes(directInterface, interfaceNode.superclasses);
+ substSupertypes(directInterface, interfaceNode.interfaces);
for (int i = 0; i < types.length; i++) {
addInterface(interfaces, superclasses, types[i]);
}
- // ignore: unnecessary_null_comparison
- if (interfaceNode.interfaces != null) {
- List<Supertype> types =
- substSupertypes(directInterface, interfaceNode.interfaces);
- for (int i = 0; i < types.length; i++) {
- addInterface(interfaces, superclasses, types[i]);
- }
- }
}
}
}
interfacesList = interfaces.values.toList();
- // ignore: unnecessary_null_comparison
- } else if (superclassInterfaces != null &&
+ } else if (superclassInterfaces.isNotEmpty &&
!classBuilder.library.isNonNullableByDefault &&
supernode.classBuilder.library.isNonNullableByDefault) {
Map<Class, Supertype> interfaces = {};
@@ -168,13 +164,8 @@
}
}
- return new ClassHierarchyNode(
- classBuilder,
- supernode,
- directInterfaceBuilders,
- superclasses,
- interfacesList,
- maxInheritancePath);
+ return new ClassHierarchyNode(classBuilder, supernode, interfaceNodes,
+ superclasses, interfacesList, maxInheritancePath);
}
Supertype recordSupertype(Supertype supertype) {
@@ -329,9 +320,13 @@
/// The class corresponding to this hierarchy node.
final ClassBuilder classBuilder;
- final ClassHierarchyNode? supernode;
+ /// The [ClassHierarchyNode] for the direct super class of [classBuilder], or
+ /// `null` if this is `Object`.
+ final ClassHierarchyNode? directSuperClassNode;
- final List<TypeBuilder>? directInterfaceBuilders;
+ /// The [ClassHierarchyNode]s for the direct super interfaces of
+ /// [classBuilder].
+ final List<ClassHierarchyNode>? directInterfaceNodes;
/// All superclasses of [classBuilder] excluding itself. The classes are
/// sorted by depth from the root (Object) in ascending order.
@@ -348,8 +343,8 @@
ClassHierarchyNode(
this.classBuilder,
- this.supernode,
- this.directInterfaceBuilders,
+ this.directSuperClassNode,
+ this.directInterfaceNodes,
this.superclasses,
this.interfaces,
this.maxInheritancePath);
@@ -390,8 +385,7 @@
sb.writeln();
depth++;
}
- // ignore: unnecessary_null_comparison
- if (interfaces != null) {
+ if (interfaces.isNotEmpty) {
sb.write(" interfaces:");
bool first = true;
for (Supertype i in interfaces) {
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 e4a2839..e4faf56 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
@@ -566,12 +566,12 @@
}
ClassMembersNode build() {
- ClassMembersNode? supernode = _hierarchyNode.supernode != null
- ? _membersBuilder
- .getNodeFromClassBuilder(_hierarchyNode.supernode!.classBuilder)
+ ClassMembersNode? supernode = _hierarchyNode.directSuperClassNode != null
+ ? _membersBuilder.getNodeFromClassBuilder(
+ _hierarchyNode.directSuperClassNode!.classBuilder)
: null;
- List<TypeBuilder>? directInterfaceBuilders =
- _hierarchyNode.directInterfaceBuilders;
+ List<ClassHierarchyNode>? interfaceNodes =
+ _hierarchyNode.directInterfaceNodes;
/// Set to `true` if the class needs interfaces, that is, if it has any
/// members where the interface member is different from its corresponding
@@ -770,18 +770,16 @@
implement(supernode.interfaceSetterMap ?? supernode.classSetterMap);
}
- if (directInterfaceBuilders != null) {
- for (int i = 0; i < directInterfaceBuilders.length; i++) {
+ if (interfaceNodes != null) {
+ for (int i = 0; i < interfaceNodes.length; i++) {
ClassMembersNode? interfaceNode = _membersBuilder
- .getNodeFromTypeBuilder(directInterfaceBuilders[i]);
- if (interfaceNode != null) {
- hasInterfaces = true;
+ .getNodeFromClassBuilder(interfaceNodes[i].classBuilder);
+ hasInterfaces = true;
- implement(interfaceNode.interfaceMemberMap ??
- interfaceNode.classMemberMap);
- implement(interfaceNode.interfaceSetterMap ??
- interfaceNode.classSetterMap);
- }
+ implement(
+ interfaceNode.interfaceMemberMap ?? interfaceNode.classMemberMap);
+ implement(
+ interfaceNode.interfaceSetterMap ?? interfaceNode.classSetterMap);
}
}
}
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 730ab5747..09fc019 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -82,7 +82,7 @@
ConstantEvaluationData;
import 'kernel_constants.dart' show KernelConstantErrorReporter;
import 'kernel_helper.dart';
-import 'macro.dart';
+import 'macro/macro.dart';
import 'verifier.dart' show verifyComponent, verifyGetStaticType;
class KernelTarget extends TargetImplementation {
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro_annotation_parser.dart b/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
similarity index 98%
rename from pkg/front_end/lib/src/fasta/kernel/macro_annotation_parser.dart
rename to pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
index aeed256..e177ba8 100644
--- a/pkg/front_end/lib/src/fasta/kernel/macro_annotation_parser.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
@@ -7,14 +7,14 @@
import 'package:_fe_analyzer_shared/src/scanner/error_token.dart';
import 'package:_fe_analyzer_shared/src/scanner/token.dart';
-import '../builder/builder.dart';
-import '../builder/class_builder.dart';
-import '../builder/member_builder.dart';
-import '../builder/metadata_builder.dart';
-import '../builder/prefix_builder.dart';
-import '../scope.dart';
-import '../source/diet_parser.dart';
-import '../source/source_library_builder.dart';
+import '../../builder/builder.dart';
+import '../../builder/class_builder.dart';
+import '../../builder/member_builder.dart';
+import '../../builder/metadata_builder.dart';
+import '../../builder/prefix_builder.dart';
+import '../../scope.dart';
+import '../../source/diet_parser.dart';
+import '../../source/source_library_builder.dart';
import 'macro.dart';
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro/identifiers.dart b/pkg/front_end/lib/src/fasta/kernel/macro/identifiers.dart
new file mode 100644
index 0000000..ad6743a
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/macro/identifiers.dart
@@ -0,0 +1,165 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:_fe_analyzer_shared/src/macros/executor.dart' as macro;
+import 'package:_fe_analyzer_shared/src/macros/executor/introspection_impls.dart'
+ as macro;
+import 'package:kernel/ast.dart';
+
+import '../../builder/class_builder.dart';
+import '../../builder/formal_parameter_builder.dart';
+import '../../builder/library_builder.dart';
+import '../../builder/member_builder.dart';
+import '../../builder/nullability_builder.dart';
+import '../../builder/type_alias_builder.dart';
+import '../../builder/type_builder.dart';
+import '../../builder/type_declaration_builder.dart';
+
+abstract class IdentifierImpl implements macro.IdentifierImpl {
+ macro.ResolvedIdentifier resolveIdentifier();
+ DartType buildType(
+ NullabilityBuilder nullabilityBuilder, List<DartType> typeArguments);
+}
+
+class TypeBuilderIdentifier extends macro.IdentifierImpl
+ implements IdentifierImpl {
+ final TypeBuilder typeBuilder;
+ final LibraryBuilder libraryBuilder;
+
+ TypeBuilderIdentifier({
+ required this.typeBuilder,
+ required this.libraryBuilder,
+ required int id,
+ required String name,
+ }) : super(id: id, name: name);
+
+ @override
+ macro.ResolvedIdentifier resolveIdentifier() {
+ TypeDeclarationBuilder? typeDeclarationBuilder = typeBuilder.declaration;
+ if (typeDeclarationBuilder != null) {
+ Uri? uri;
+ if (typeDeclarationBuilder is ClassBuilder) {
+ uri = typeDeclarationBuilder.library.importUri;
+ } else if (typeDeclarationBuilder is TypeAliasBuilder) {
+ uri = typeDeclarationBuilder.library.importUri;
+ } else if (name == 'dynamic') {
+ uri = Uri.parse('dart:core');
+ }
+ return new macro.ResolvedIdentifier(
+ kind: macro.IdentifierKind.topLevelMember,
+ name: name,
+ staticScope: null,
+ uri: uri);
+ } else {
+ throw new StateError('Unable to resolve identifier $this');
+ }
+ }
+
+ @override
+ DartType buildType(
+ NullabilityBuilder nullabilityBuilder, List<DartType> typeArguments) {
+ return typeBuilder.declaration!.buildTypeWithBuiltArguments(libraryBuilder,
+ nullabilityBuilder.build(libraryBuilder), typeArguments);
+ }
+}
+
+class TypeDeclarationBuilderIdentifier extends macro.IdentifierImpl
+ implements IdentifierImpl {
+ final TypeDeclarationBuilder typeDeclarationBuilder;
+ final LibraryBuilder libraryBuilder;
+
+ TypeDeclarationBuilderIdentifier({
+ required this.typeDeclarationBuilder,
+ required this.libraryBuilder,
+ required int id,
+ required String name,
+ }) : super(id: id, name: name);
+
+ @override
+ macro.ResolvedIdentifier resolveIdentifier() {
+ Uri? uri;
+ if (typeDeclarationBuilder is ClassBuilder) {
+ uri = (typeDeclarationBuilder as ClassBuilder).library.importUri;
+ } else if (typeDeclarationBuilder is TypeAliasBuilder) {
+ uri = (typeDeclarationBuilder as TypeAliasBuilder).library.importUri;
+ } else if (name == 'dynamic') {
+ uri = Uri.parse('dart:core');
+ }
+ return new macro.ResolvedIdentifier(
+ kind: macro.IdentifierKind.topLevelMember,
+ name: name,
+ staticScope: null,
+ uri: uri);
+ }
+
+ @override
+ DartType buildType(
+ NullabilityBuilder nullabilityBuilder, List<DartType> typeArguments) {
+ return typeDeclarationBuilder.buildTypeWithBuiltArguments(libraryBuilder,
+ nullabilityBuilder.build(libraryBuilder), typeArguments);
+ }
+}
+
+class MemberBuilderIdentifier extends macro.IdentifierImpl
+ implements IdentifierImpl {
+ final MemberBuilder memberBuilder;
+
+ MemberBuilderIdentifier(
+ {required this.memberBuilder, required int id, required String name})
+ : super(id: id, name: name);
+
+ @override
+ macro.ResolvedIdentifier resolveIdentifier() {
+ Uri? uri;
+ String? staticScope;
+ macro.IdentifierKind kind;
+ if (memberBuilder.isStatic || memberBuilder.isConstructor) {
+ ClassBuilder classBuilder = memberBuilder.classBuilder!;
+ staticScope = classBuilder.name;
+ uri = classBuilder.library.importUri;
+ kind = macro.IdentifierKind.staticInstanceMember;
+ } else if (memberBuilder.isTopLevel) {
+ uri = memberBuilder.library.importUri;
+ kind = macro.IdentifierKind.topLevelMember;
+ } else {
+ kind = macro.IdentifierKind.instanceMember;
+ }
+ return new macro.ResolvedIdentifier(
+ kind: kind, name: name, staticScope: staticScope, uri: uri);
+ }
+
+ @override
+ DartType buildType(
+ NullabilityBuilder nullabilityBuilder, List<DartType> typeArguments) {
+ throw new UnsupportedError('Cannot build type from member.');
+ }
+}
+
+class FormalParameterBuilderIdentifier extends macro.IdentifierImpl
+ implements IdentifierImpl {
+ final LibraryBuilder libraryBuilder;
+ final FormalParameterBuilder parameterBuilder;
+
+ FormalParameterBuilderIdentifier({
+ required this.parameterBuilder,
+ required this.libraryBuilder,
+ required int id,
+ required String name,
+ }) : super(id: id, name: name);
+
+ @override
+ macro.ResolvedIdentifier resolveIdentifier() {
+ return new macro.ResolvedIdentifier(
+ kind: macro.IdentifierKind.local,
+ name: name,
+ staticScope: null,
+ uri: null);
+ }
+
+ @override
+ DartType buildType(
+ NullabilityBuilder nullabilityBuilder, List<DartType> typeArguments) {
+ throw new UnsupportedError('Cannot build type from formal parameter.');
+ }
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro.dart b/pkg/front_end/lib/src/fasta/kernel/macro/macro.dart
similarity index 82%
rename from pkg/front_end/lib/src/fasta/kernel/macro.dart
rename to pkg/front_end/lib/src/fasta/kernel/macro/macro.dart
index 5a9d010..8779439 100644
--- a/pkg/front_end/lib/src/fasta/kernel/macro.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/macro/macro.dart
@@ -12,27 +12,27 @@
import 'package:kernel/src/types.dart';
import 'package:kernel/type_environment.dart' show SubtypeCheckMode;
-import '../../base/common.dart';
-import '../builder/builder.dart';
-import '../builder/class_builder.dart';
-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/type_alias_builder.dart';
-import '../builder/type_builder.dart';
-import '../builder/type_declaration_builder.dart';
-import '../identifiers.dart';
-import '../source/source_class_builder.dart';
-import '../source/source_constructor_builder.dart';
-import '../source/source_factory_builder.dart';
-import '../source/source_field_builder.dart';
-import '../source/source_library_builder.dart';
-import '../source/source_loader.dart';
-import '../source/source_procedure_builder.dart';
-import 'hierarchy/hierarchy_builder.dart';
-import 'hierarchy/hierarchy_node.dart';
+import '../../../base/common.dart';
+import '../../builder/builder.dart';
+import '../../builder/class_builder.dart';
+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/type_builder.dart';
+import '../../builder/type_declaration_builder.dart';
+import '../../identifiers.dart';
+import '../../source/source_class_builder.dart';
+import '../../source/source_constructor_builder.dart';
+import '../../source/source_factory_builder.dart';
+import '../../source/source_field_builder.dart';
+import '../../source/source_library_builder.dart';
+import '../../source/source_loader.dart';
+import '../../source/source_procedure_builder.dart';
+import '../hierarchy/hierarchy_builder.dart';
+import '../hierarchy/hierarchy_node.dart';
+import 'identifiers.dart';
bool enableMacros = false;
@@ -214,55 +214,8 @@
}
macro.ResolvedIdentifier _resolveIdentifier(macro.Identifier identifier) {
- if (identifier is _IdentifierImpl) {
- MemberBuilder? memberBuilder = identifier.memberBuilder;
- FormalParameterBuilder? parameterBuilder = identifier.parameterBuilder;
- TypeDeclarationBuilder? typeDeclarationBuilder =
- identifier.typeDeclarationBuilder ??
- identifier.typeBuilder?.declaration;
- if (memberBuilder != null) {
- Uri? uri;
- String? staticScope;
- macro.IdentifierKind kind;
- if (memberBuilder.isStatic || memberBuilder.isConstructor) {
- ClassBuilder classBuilder = memberBuilder.classBuilder!;
- staticScope = classBuilder.name;
- uri = classBuilder.library.importUri;
- kind = macro.IdentifierKind.staticInstanceMember;
- } else if (memberBuilder.isTopLevel) {
- uri = memberBuilder.library.importUri;
- kind = macro.IdentifierKind.topLevelMember;
- } else {
- kind = macro.IdentifierKind.instanceMember;
- }
- return new macro.ResolvedIdentifier(
- kind: kind,
- name: identifier.name,
- staticScope: staticScope,
- uri: uri);
- } else if (typeDeclarationBuilder != null) {
- Uri? uri;
- if (typeDeclarationBuilder is ClassBuilder) {
- uri = typeDeclarationBuilder.library.importUri;
- } else if (typeDeclarationBuilder is TypeAliasBuilder) {
- uri = typeDeclarationBuilder.library.importUri;
- } else if (identifier.name == 'dynamic') {
- uri = Uri.parse('dart:core');
- }
- return new macro.ResolvedIdentifier(
- kind: macro.IdentifierKind.topLevelMember,
- name: identifier.name,
- staticScope: null,
- uri: uri);
- } else if (parameterBuilder != null) {
- return new macro.ResolvedIdentifier(
- kind: macro.IdentifierKind.local,
- name: identifier.name,
- staticScope: null,
- uri: null);
- } else {
- throw new StateError('Unable to resolve identifier $identifier');
- }
+ if (identifier is IdentifierImpl) {
+ return identifier.resolveIdentifier();
} else {
// TODO(johnniwinther): Use [_IdentifierImpl] for all identifiers.
if (identical(identifier, dynamicIdentifier)) {
@@ -522,7 +475,7 @@
macro.ClassDeclaration _createClassDeclaration(ClassBuilder builder) {
macro.ClassDeclaration declaration = new macro.ClassDeclarationImpl(
id: macro.RemoteInstance.uniqueId,
- identifier: new _IdentifierImpl.forTypeDeclarationBuilder(
+ identifier: new TypeDeclarationBuilderIdentifier(
typeDeclarationBuilder: builder,
libraryBuilder: builder.library,
id: macro.RemoteInstance.uniqueId,
@@ -553,12 +506,11 @@
for (FormalParameterBuilder formal in formals) {
macro.TypeAnnotationImpl type =
computeTypeAnnotation(builder.library, formal.type);
- macro.IdentifierImpl identifier =
- new _IdentifierImpl.forParameterBuilder(
- id: macro.RemoteInstance.uniqueId,
- name: formal.name,
- parameterBuilder: formal,
- libraryBuilder: builder.library);
+ macro.IdentifierImpl identifier = new FormalParameterBuilderIdentifier(
+ id: macro.RemoteInstance.uniqueId,
+ name: formal.name,
+ parameterBuilder: formal,
+ libraryBuilder: builder.library);
if (formal.isNamed) {
namedParameters.add(new macro.ParameterDeclarationImpl(
id: macro.RemoteInstance.uniqueId,
@@ -594,7 +546,7 @@
_getClassDeclaration(builder.classBuilder as SourceClassBuilder);
return new macro.ConstructorDeclarationImpl(
id: macro.RemoteInstance.uniqueId,
- identifier: new _IdentifierImpl.forMemberBuilder(
+ identifier: new MemberBuilderIdentifier(
memberBuilder: builder,
id: macro.RemoteInstance.uniqueId,
name: builder.name),
@@ -623,7 +575,7 @@
return new macro.ConstructorDeclarationImpl(
id: macro.RemoteInstance.uniqueId,
- identifier: new _IdentifierImpl.forMemberBuilder(
+ identifier: new MemberBuilderIdentifier(
memberBuilder: builder,
id: macro.RemoteInstance.uniqueId,
name: builder.name),
@@ -658,7 +610,7 @@
// declarations?
return new macro.MethodDeclarationImpl(
id: macro.RemoteInstance.uniqueId,
- identifier: new _IdentifierImpl.forMemberBuilder(
+ identifier: new MemberBuilderIdentifier(
memberBuilder: builder,
id: macro.RemoteInstance.uniqueId,
name: builder.name),
@@ -678,7 +630,7 @@
} else {
return new macro.FunctionDeclarationImpl(
id: macro.RemoteInstance.uniqueId,
- identifier: new _IdentifierImpl.forMemberBuilder(
+ identifier: new MemberBuilderIdentifier(
memberBuilder: builder,
id: macro.RemoteInstance.uniqueId,
name: builder.name),
@@ -708,7 +660,7 @@
// declarations?
return new macro.FieldDeclarationImpl(
id: macro.RemoteInstance.uniqueId,
- identifier: new _IdentifierImpl.forMemberBuilder(
+ identifier: new MemberBuilderIdentifier(
memberBuilder: builder,
id: macro.RemoteInstance.uniqueId,
name: builder.name),
@@ -721,7 +673,7 @@
} else {
return new macro.VariableDeclarationImpl(
id: macro.RemoteInstance.uniqueId,
- identifier: new _IdentifierImpl.forMemberBuilder(
+ identifier: new MemberBuilderIdentifier(
memberBuilder: builder,
id: macro.RemoteInstance.uniqueId,
name: builder.name),
@@ -752,7 +704,7 @@
if (name is String) {
return new macro.NamedTypeAnnotationImpl(
id: macro.RemoteInstance.uniqueId,
- identifier: new _IdentifierImpl.forTypeBuilder(
+ identifier: new TypeBuilderIdentifier(
typeBuilder: typeBuilder,
libraryBuilder: libraryBuilder,
id: macro.RemoteInstance.uniqueId,
@@ -763,7 +715,7 @@
assert(name.qualifier is String);
return new macro.NamedTypeAnnotationImpl(
id: macro.RemoteInstance.uniqueId,
- identifier: new _IdentifierImpl.forTypeBuilder(
+ identifier: new TypeBuilderIdentifier(
typeBuilder: typeBuilder,
libraryBuilder: libraryBuilder,
id: macro.RemoteInstance.uniqueId,
@@ -786,8 +738,7 @@
_computeTypeAnnotation(libraryBuilder, typeBuilder);
}
- TypeBuilder _typeBuilderForAnnotation(
- macro.TypeAnnotationCode typeAnnotation) {
+ DartType _typeForAnnotation(macro.TypeAnnotationCode typeAnnotation) {
NullabilityBuilder nullabilityBuilder;
if (typeAnnotation is macro.NullableTypeAnnotationCode) {
nullabilityBuilder = const NullabilityBuilder.nullable();
@@ -797,35 +748,13 @@
}
if (typeAnnotation is macro.NamedTypeAnnotationCode) {
- _IdentifierImpl typeIdentifier = typeAnnotation.name as _IdentifierImpl;
- TypeDeclarationBuilder? typeDeclarationBuilder =
- typeIdentifier.typeDeclarationBuilder;
- InstanceTypeVariableAccessState instanceTypeVariableAccessState =
- InstanceTypeVariableAccessState.Unexpected;
- if (typeDeclarationBuilder == null) {
- TypeBuilder? originalTypeBuilder = typeIdentifier.typeBuilder;
-
- if (originalTypeBuilder == null) {
- throw new StateError('No type builder for $typeIdentifier');
- }
- if (originalTypeBuilder is! NamedTypeBuilder) {
- throw new StateError(
- 'Type $typeIdentifier was not a named type as expected!');
- }
- typeDeclarationBuilder = originalTypeBuilder.declaration!;
- instanceTypeVariableAccessState =
- originalTypeBuilder.instanceTypeVariableAccess;
- }
- List<TypeBuilder> arguments = [
- for (macro.TypeAnnotationCode argumentCode
- in typeAnnotation.typeArguments)
- _typeBuilderForAnnotation(argumentCode),
- ];
-
- return new NamedTypeBuilder.fromTypeDeclarationBuilder(
- typeDeclarationBuilder, nullabilityBuilder,
- instanceTypeVariableAccess: instanceTypeVariableAccessState,
- arguments: arguments);
+ macro.NamedTypeAnnotationCode namedTypeAnnotation = typeAnnotation;
+ IdentifierImpl typeIdentifier = typeAnnotation.name as IdentifierImpl;
+ List<DartType> arguments = new List<DartType>.generate(
+ namedTypeAnnotation.typeArguments.length,
+ (int index) =>
+ _typeForAnnotation(namedTypeAnnotation.typeArguments[index]));
+ return typeIdentifier.buildType(nullabilityBuilder, arguments);
}
// TODO: Implement support for function types.
throw new UnimplementedError(
@@ -834,12 +763,7 @@
macro.StaticType resolveTypeAnnotation(
macro.TypeAnnotationCode typeAnnotation) {
- TypeBuilder typeBuilder = _typeBuilderForAnnotation(typeAnnotation);
- // TODO: This should probably be passed in instead, possibly attached to the
- // TypeResolver class?
- LibraryBuilder libraryBuilder =
- typeAnnotation.parts.whereType<_IdentifierImpl>().first.libraryBuilder;
- return createStaticType(typeBuilder.build(libraryBuilder));
+ return createStaticType(_typeForAnnotation(typeAnnotation));
}
Map<DartType, _StaticTypeImpl> _staticTypeCache = {};
@@ -849,54 +773,6 @@
}
}
-class _IdentifierImpl extends macro.IdentifierImpl {
- final TypeDeclarationBuilder? typeDeclarationBuilder;
- final MemberBuilder? memberBuilder;
- final TypeBuilder? typeBuilder;
- final LibraryBuilder libraryBuilder;
- final FormalParameterBuilder? parameterBuilder;
-
- _IdentifierImpl.forTypeBuilder({
- required TypeBuilder this.typeBuilder,
- required this.libraryBuilder,
- required int id,
- required String name,
- }) : typeDeclarationBuilder = null,
- memberBuilder = null,
- parameterBuilder = null,
- super(id: id, name: name);
-
- _IdentifierImpl.forTypeDeclarationBuilder({
- required TypeDeclarationBuilder this.typeDeclarationBuilder,
- required this.libraryBuilder,
- required int id,
- required String name,
- }) : typeBuilder = null,
- memberBuilder = null,
- parameterBuilder = null,
- super(id: id, name: name);
-
- _IdentifierImpl.forMemberBuilder(
- {required MemberBuilder this.memberBuilder,
- required int id,
- required String name})
- : typeBuilder = null,
- typeDeclarationBuilder = null,
- parameterBuilder = null,
- libraryBuilder = memberBuilder.library,
- super(id: id, name: name);
-
- _IdentifierImpl.forParameterBuilder({
- required FormalParameterBuilder this.parameterBuilder,
- required this.libraryBuilder,
- required int id,
- required String name,
- }) : typeBuilder = null,
- typeDeclarationBuilder = null,
- memberBuilder = null,
- super(id: id, name: name);
-}
-
class _StaticTypeImpl extends macro.StaticType {
final MacroApplications macroApplications;
final DartType type;
@@ -942,13 +818,13 @@
'Unable to find top level identifier "$name" in $library'),
StackTrace.current);
} else if (builder is TypeDeclarationBuilder) {
- return new Future.value(new _IdentifierImpl.forTypeDeclarationBuilder(
+ return new Future.value(new TypeDeclarationBuilderIdentifier(
typeDeclarationBuilder: builder,
libraryBuilder: libraryBuilder,
id: macro.RemoteInstance.uniqueId,
name: name));
} else if (builder is MemberBuilder) {
- return new Future.value(new _IdentifierImpl.forMemberBuilder(
+ return new Future.value(new MemberBuilderIdentifier(
memberBuilder: builder,
id: macro.RemoteInstance.uniqueId,
name: name));
@@ -1044,10 +920,10 @@
ClassBuilder classBuilder = macroApplications._getClassBuilder(clazz);
ClassHierarchyNode node =
classHierarchy.getNodeFromClassBuilder(classBuilder);
- ClassHierarchyNode? superNode = node.supernode;
+ ClassHierarchyNode? superNode = node.directSuperClassNode;
while (superNode != null &&
superNode.classBuilder.isAnonymousMixinApplication) {
- superNode = superNode.supernode;
+ superNode = superNode.directSuperClassNode;
}
if (superNode != null) {
return new Future.value(
diff --git a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
index edf0831..8665c23 100644
--- a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
@@ -462,34 +462,51 @@
new RedirectingFactoryBody(target, typeArguments, function);
function.body!.parent = function;
}
- if (_factoryTearOff != null) {
- Set<Procedure> seenTargets = {};
- while (target is Procedure && target.isRedirectingFactory) {
- if (!seenTargets.add(target)) {
- // Cyclic dependency.
- target = null;
- break;
- }
- RedirectingFactoryBody body =
- target.function.body as RedirectingFactoryBody;
- if (typeArguments != null) {
- Substitution substitution = Substitution.fromPairs(
- target.function.typeParameters, typeArguments);
- typeArguments =
- body.typeArguments?.map(substitution.substituteType).toList();
- } else {
- typeArguments = body.typeArguments;
- }
- target = body.target;
+
+ Set<Procedure> seenTargets = {};
+ while (target is Procedure && target.isRedirectingFactory) {
+ if (!seenTargets.add(target)) {
+ // Cyclic dependency.
+ target = null;
+ break;
}
- if (target is Constructor || target is Procedure && target.isFactory) {
+ RedirectingFactoryBody body =
+ target.function.body as RedirectingFactoryBody;
+ if (typeArguments != null) {
+ Substitution substitution = Substitution.fromPairs(
+ target.function.typeParameters, typeArguments);
+ typeArguments =
+ body.typeArguments?.map(substitution.substituteType).toList();
+ } else {
+ typeArguments = body.typeArguments;
+ }
+ target = body.target;
+ }
+
+ if (target is Constructor || target is Procedure && target.isFactory) {
+ typeArguments ??= [];
+ if (_factoryTearOff != null) {
synthesizedFunctionNodes.add(buildRedirectingFactoryTearOffBody(
_factoryTearOff!,
target!,
- typeArguments ?? [],
+ typeArguments,
_tearOffTypeParameters!,
library));
}
+ Map<TypeParameter, DartType> substitutionMap;
+ if (function.typeParameters.length == typeArguments.length) {
+ substitutionMap = new Map<TypeParameter, DartType>.fromIterables(
+ function.typeParameters, typeArguments);
+ } else {
+ // Error case: Substitute type parameters with `dynamic`.
+ substitutionMap = new Map<TypeParameter, DartType>.fromIterables(
+ function.typeParameters,
+ new List<DartType>.generate(function.typeParameters.length,
+ (int index) => const DynamicType()));
+ }
+ synthesizedFunctionNodes.add(new SynthesizedFunctionNode(
+ substitutionMap, target!.function!, function,
+ libraryBuilder: library, identicalSignatures: false));
}
if (isConst && isPatch) {
_finishPatch();
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 17257de..181c94b 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
@@ -66,7 +66,7 @@
import '../kernel/internal_ast.dart';
import '../kernel/kernel_helper.dart';
import '../kernel/load_library_builder.dart';
-import '../kernel/macro.dart';
+import '../kernel/macro/macro.dart';
import '../kernel/type_algorithms.dart'
show
NonSimplicityIssue,
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 a281736..fb53047 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -74,8 +74,8 @@
import '../kernel/kernel_helper.dart'
show SynthesizedFunctionNode, TypeDependency;
import '../kernel/kernel_target.dart' show KernelTarget;
-import '../kernel/macro.dart';
-import '../kernel/macro_annotation_parser.dart';
+import '../kernel/macro/macro.dart';
+import '../kernel/macro/annotation_parser.dart';
import '../kernel/transform_collections.dart' show CollectionTransformer;
import '../kernel/transform_set_literals.dart' show SetLiteralTransformer;
import '../kernel/type_builder_computer.dart' show TypeBuilderComputer;
diff --git a/pkg/front_end/lib/src/kernel_generator_impl.dart b/pkg/front_end/lib/src/kernel_generator_impl.dart
index 6a02262..cfb4145 100644
--- a/pkg/front_end/lib/src/kernel_generator_impl.dart
+++ b/pkg/front_end/lib/src/kernel_generator_impl.dart
@@ -24,7 +24,7 @@
import 'fasta/fasta_codes.dart' show LocatedMessage;
import 'fasta/hybrid_file_system.dart';
import 'fasta/kernel/kernel_target.dart' show BuildResult, KernelTarget;
-import 'fasta/kernel/macro.dart';
+import 'fasta/kernel/macro/macro.dart';
import 'fasta/kernel/utils.dart' show printComponentText, serializeComponent;
import 'fasta/kernel/verifier.dart' show verifyComponent;
import 'fasta/source/source_loader.dart' show SourceLoader;
diff --git a/pkg/front_end/lib/src/testing/id_testing_helper.dart b/pkg/front_end/lib/src/testing/id_testing_helper.dart
index 102912e..4be720bd 100644
--- a/pkg/front_end/lib/src/testing/id_testing_helper.dart
+++ b/pkg/front_end/lib/src/testing/id_testing_helper.dart
@@ -25,7 +25,7 @@
import '../api_prototype/terminal_color_support.dart'
show printDiagnosticMessage;
import '../base/common.dart';
-import '../fasta/kernel/macro.dart';
+import '../fasta/kernel/macro/macro.dart';
import '../fasta/messages.dart' show FormattedMessage;
import '../kernel_generator_impl.dart' show InternalCompilerResult;
import 'compiler_common.dart' show compileScript, toTestUri;
diff --git a/pkg/front_end/test/fasta/types/dill_hierarchy_test.dart b/pkg/front_end/test/fasta/types/dill_hierarchy_test.dart
index 55076d6..a1c2094 100644
--- a/pkg/front_end/test/fasta/types/dill_hierarchy_test.dart
+++ b/pkg/front_end/test/fasta/types/dill_hierarchy_test.dart
@@ -37,12 +37,10 @@
const String expectedHierarchy = """
Object:
superclasses:
- interfaces:
A:
superclasses:
Object
- interfaces:
B:
Longest path to Object: 2
diff --git a/pkg/front_end/test/macros/application/macro_application_test.dart b/pkg/front_end/test/macros/application/macro_application_test.dart
index 731f92d..69ae9c6 100644
--- a/pkg/front_end/test/macros/application/macro_application_test.dart
+++ b/pkg/front_end/test/macros/application/macro_application_test.dart
@@ -16,7 +16,7 @@
import 'package:front_end/src/api_prototype/experimental_flags.dart';
import 'package:front_end/src/fasta/builder/field_builder.dart';
import 'package:front_end/src/fasta/builder/member_builder.dart';
-import 'package:front_end/src/fasta/kernel/macro.dart';
+import 'package:front_end/src/fasta/kernel/macro/macro.dart';
import 'package:front_end/src/fasta/source/source_class_builder.dart';
import 'package:front_end/src/fasta/source/source_library_builder.dart';
import 'package:front_end/src/macro_serializer.dart';
diff --git a/pkg/front_end/test/macros/declaration/macro_declaration_test.dart b/pkg/front_end/test/macros/declaration/macro_declaration_test.dart
index 175c4f3..27aa722 100644
--- a/pkg/front_end/test/macros/declaration/macro_declaration_test.dart
+++ b/pkg/front_end/test/macros/declaration/macro_declaration_test.dart
@@ -15,7 +15,7 @@
import 'package:front_end/src/fasta/builder/class_builder.dart';
import 'package:front_end/src/fasta/builder/library_builder.dart';
import 'package:front_end/src/fasta/builder/member_builder.dart';
-import 'package:front_end/src/fasta/kernel/macro.dart';
+import 'package:front_end/src/fasta/kernel/macro/macro.dart';
import 'package:front_end/src/testing/id_testing_helper.dart';
import 'package:front_end/src/testing/id_testing_utils.dart';
import 'package:kernel/ast.dart' hide Arguments;
diff --git a/pkg/front_end/test/macros/incremental/incremental_macro_test.dart b/pkg/front_end/test/macros/incremental/incremental_macro_test.dart
index 2213b4c..6e38046 100644
--- a/pkg/front_end/test/macros/incremental/incremental_macro_test.dart
+++ b/pkg/front_end/test/macros/incremental/incremental_macro_test.dart
@@ -16,7 +16,7 @@
import 'package:front_end/src/fasta/compiler_context.dart';
import 'package:front_end/src/fasta/hybrid_file_system.dart';
import 'package:front_end/src/fasta/incremental_compiler.dart';
-import 'package:front_end/src/fasta/kernel/macro.dart';
+import 'package:front_end/src/fasta/kernel/macro/macro.dart';
import 'package:front_end/src/isolate_macro_serializer.dart';
import 'package:front_end/src/macro_serializer.dart';
import 'package:front_end/src/testing/compiler_common.dart';
diff --git a/pkg/front_end/test/macros/macro_api_test.dart b/pkg/front_end/test/macros/macro_api_test.dart
index 768d1d1..1392e5f 100644
--- a/pkg/front_end/test/macros/macro_api_test.dart
+++ b/pkg/front_end/test/macros/macro_api_test.dart
@@ -11,7 +11,7 @@
import 'package:front_end/src/api_prototype/experimental_flags.dart';
import 'package:front_end/src/api_prototype/front_end.dart';
import 'package:front_end/src/compute_platform_binaries_location.dart';
-import 'package:front_end/src/fasta/kernel/macro.dart';
+import 'package:front_end/src/fasta/kernel/macro/macro.dart';
import 'package:front_end/src/isolate_macro_serializer.dart';
import 'package:front_end/src/macro_serializer.dart';
import 'package:front_end/src/testing/id_testing_helper.dart';
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect
index 4acef90..a55684b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect
@@ -61,7 +61,7 @@
return new self::Class::•<self::Class::fact::T%>(field);
static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
- static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+ static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect
index e793729..149333a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect
@@ -61,7 +61,7 @@
return new self::Class::•<self::Class::fact::T%>(field);
static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
- static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+ static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect
index 841838c..7093a76 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect
@@ -61,7 +61,7 @@
return new self::Class::•<self::Class::fact::T%>(field);
static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
- static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+ static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect
index 841838c..7093a76 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect
@@ -61,7 +61,7 @@
return new self::Class::•<self::Class::fact::T%>(field);
static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
- static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+ static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect
index 742d873..0b49573 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect
@@ -61,7 +61,7 @@
return new self::Class::•<self::Class::fact::T%>(field);
static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
- static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+ static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.expect
index 8c398fe..00b5a13 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.expect
@@ -23,20 +23,20 @@
;
static method _#_#tearOff([core::int field = #C2]) → self::Class1
return new self::Class1::_(field);
- static factory •([core::int field = #C3]) → self::Class1
+ static factory •([core::int field = #C2]) → self::Class1
return new self::Class1::_(field);
static method _#new#tearOff([core::int field = #C2]) → self::Class1
return new self::Class1::_(field);
}
class Class2 extends core::Object {
final field core::int field;
- static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+ static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
constructor _({core::int field = #C2}) → self::Class2
: self::Class2::field = field, super core::Object::•()
;
static method _#_#tearOff({core::int field = #C2}) → self::Class2
return new self::Class2::_(field: field);
- static factory •({core::int field = #C3}) → self::Class2
+ static factory •({core::int field = #C2}) → self::Class2
return new self::Class2::_(field: field);
static method _#new#tearOff({core::int field = #C2}) → self::Class2
return new self::Class2::_(field: field);
@@ -47,7 +47,7 @@
self::testDefaultValues();
}
static method testDefaultValues() → void {
- ([core::int]) → self::Class1 f1a = #C5;
+ ([core::int]) → self::Class1 f1a = #C4;
self::Class1 c1a = f1a(){([core::int]) → self::Class1};
self::expect(42, c1a.{self::Class1::field}{core::int});
self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
f1a(42, 87); // error
^" in f1a{<inapplicable>}.(42, 87);
};
- dynamic f1b = #C5;
+ dynamic f1b = #C4;
dynamic c1c = f1b{dynamic}.call();
self::expect(42, c1c{dynamic}.field);
dynamic c1d = f1b{dynamic}.call(87);
self::expect(87, c1d{dynamic}.field);
self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
- ({field: core::int}) → self::Class2 f2a = #C6;
+ ({field: core::int}) → self::Class2 f2a = #C5;
self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
self::expect(42, c2a.{self::Class2::field}{core::int});
self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
f2a(87); // error
^" in f2a{<inapplicable>}.(87);
};
- dynamic f2b = #C6;
+ dynamic f2b = #C5;
dynamic c2c = f2b{dynamic}.call();
self::expect(42, c2c{dynamic}.field);
dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
try {
f(){() → dynamic};
}
@@ -103,9 +103,8 @@
constants {
#C1 = constructor-tearoff self::Class1::•
#C2 = 42
- #C3 = null
- #C4 = constructor-tearoff self::Class2::•
- #C5 = static-tearoff self::Class1::_#new#tearOff
- #C6 = static-tearoff self::Class2::_#new#tearOff
- #C7 = false
+ #C3 = constructor-tearoff self::Class2::•
+ #C4 = static-tearoff self::Class1::_#new#tearOff
+ #C5 = static-tearoff self::Class2::_#new#tearOff
+ #C6 = false
}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.transformed.expect
index cc59901..f707639 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.transformed.expect
@@ -23,20 +23,20 @@
;
static method _#_#tearOff([core::int field = #C2]) → self::Class1
return new self::Class1::_(field);
- static factory •([core::int field = #C3]) → self::Class1
+ static factory •([core::int field = #C2]) → self::Class1
return new self::Class1::_(field);
static method _#new#tearOff([core::int field = #C2]) → self::Class1
return new self::Class1::_(field);
}
class Class2 extends core::Object {
final field core::int field;
- static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+ static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
constructor _({core::int field = #C2}) → self::Class2
: self::Class2::field = field, super core::Object::•()
;
static method _#_#tearOff({core::int field = #C2}) → self::Class2
return new self::Class2::_(field: field);
- static factory •({core::int field = #C3}) → self::Class2
+ static factory •({core::int field = #C2}) → self::Class2
return new self::Class2::_(field: field);
static method _#new#tearOff({core::int field = #C2}) → self::Class2
return new self::Class2::_(field: field);
@@ -47,7 +47,7 @@
self::testDefaultValues();
}
static method testDefaultValues() → void {
- ([core::int]) → self::Class1 f1a = #C5;
+ ([core::int]) → self::Class1 f1a = #C4;
self::Class1 c1a = f1a(){([core::int]) → self::Class1};
self::expect(42, c1a.{self::Class1::field}{core::int});
self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
f1a(42, 87); // error
^" in f1a{<inapplicable>}.(42, 87);
};
- dynamic f1b = #C5;
+ dynamic f1b = #C4;
dynamic c1c = f1b{dynamic}.call();
self::expect(42, c1c{dynamic}.field);
dynamic c1d = f1b{dynamic}.call(87);
self::expect(87, c1d{dynamic}.field);
self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
- ({field: core::int}) → self::Class2 f2a = #C6;
+ ({field: core::int}) → self::Class2 f2a = #C5;
self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
self::expect(42, c2a.{self::Class2::field}{core::int});
self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
f2a(87); // error
^" in f2a{<inapplicable>}.(87);
};
- dynamic f2b = #C6;
+ dynamic f2b = #C5;
dynamic c2c = f2b{dynamic}.call();
self::expect(42, c2c{dynamic}.field);
dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
try {
f(){() → dynamic};
}
@@ -103,9 +103,8 @@
constants {
#C1 = constructor-tearoff self::Class1::•
#C2 = 42
- #C3 = null
- #C4 = constructor-tearoff self::Class2::•
- #C5 = static-tearoff self::Class1::_#new#tearOff
- #C6 = static-tearoff self::Class2::_#new#tearOff
- #C7 = false
+ #C3 = constructor-tearoff self::Class2::•
+ #C4 = static-tearoff self::Class1::_#new#tearOff
+ #C5 = static-tearoff self::Class2::_#new#tearOff
+ #C6 = false
}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.expect
index 8c398fe..00b5a13 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.expect
@@ -23,20 +23,20 @@
;
static method _#_#tearOff([core::int field = #C2]) → self::Class1
return new self::Class1::_(field);
- static factory •([core::int field = #C3]) → self::Class1
+ static factory •([core::int field = #C2]) → self::Class1
return new self::Class1::_(field);
static method _#new#tearOff([core::int field = #C2]) → self::Class1
return new self::Class1::_(field);
}
class Class2 extends core::Object {
final field core::int field;
- static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+ static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
constructor _({core::int field = #C2}) → self::Class2
: self::Class2::field = field, super core::Object::•()
;
static method _#_#tearOff({core::int field = #C2}) → self::Class2
return new self::Class2::_(field: field);
- static factory •({core::int field = #C3}) → self::Class2
+ static factory •({core::int field = #C2}) → self::Class2
return new self::Class2::_(field: field);
static method _#new#tearOff({core::int field = #C2}) → self::Class2
return new self::Class2::_(field: field);
@@ -47,7 +47,7 @@
self::testDefaultValues();
}
static method testDefaultValues() → void {
- ([core::int]) → self::Class1 f1a = #C5;
+ ([core::int]) → self::Class1 f1a = #C4;
self::Class1 c1a = f1a(){([core::int]) → self::Class1};
self::expect(42, c1a.{self::Class1::field}{core::int});
self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
f1a(42, 87); // error
^" in f1a{<inapplicable>}.(42, 87);
};
- dynamic f1b = #C5;
+ dynamic f1b = #C4;
dynamic c1c = f1b{dynamic}.call();
self::expect(42, c1c{dynamic}.field);
dynamic c1d = f1b{dynamic}.call(87);
self::expect(87, c1d{dynamic}.field);
self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
- ({field: core::int}) → self::Class2 f2a = #C6;
+ ({field: core::int}) → self::Class2 f2a = #C5;
self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
self::expect(42, c2a.{self::Class2::field}{core::int});
self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
f2a(87); // error
^" in f2a{<inapplicable>}.(87);
};
- dynamic f2b = #C6;
+ dynamic f2b = #C5;
dynamic c2c = f2b{dynamic}.call();
self::expect(42, c2c{dynamic}.field);
dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
try {
f(){() → dynamic};
}
@@ -103,9 +103,8 @@
constants {
#C1 = constructor-tearoff self::Class1::•
#C2 = 42
- #C3 = null
- #C4 = constructor-tearoff self::Class2::•
- #C5 = static-tearoff self::Class1::_#new#tearOff
- #C6 = static-tearoff self::Class2::_#new#tearOff
- #C7 = false
+ #C3 = constructor-tearoff self::Class2::•
+ #C4 = static-tearoff self::Class1::_#new#tearOff
+ #C5 = static-tearoff self::Class2::_#new#tearOff
+ #C6 = false
}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.modular.expect
index 8c398fe..00b5a13 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.modular.expect
@@ -23,20 +23,20 @@
;
static method _#_#tearOff([core::int field = #C2]) → self::Class1
return new self::Class1::_(field);
- static factory •([core::int field = #C3]) → self::Class1
+ static factory •([core::int field = #C2]) → self::Class1
return new self::Class1::_(field);
static method _#new#tearOff([core::int field = #C2]) → self::Class1
return new self::Class1::_(field);
}
class Class2 extends core::Object {
final field core::int field;
- static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+ static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
constructor _({core::int field = #C2}) → self::Class2
: self::Class2::field = field, super core::Object::•()
;
static method _#_#tearOff({core::int field = #C2}) → self::Class2
return new self::Class2::_(field: field);
- static factory •({core::int field = #C3}) → self::Class2
+ static factory •({core::int field = #C2}) → self::Class2
return new self::Class2::_(field: field);
static method _#new#tearOff({core::int field = #C2}) → self::Class2
return new self::Class2::_(field: field);
@@ -47,7 +47,7 @@
self::testDefaultValues();
}
static method testDefaultValues() → void {
- ([core::int]) → self::Class1 f1a = #C5;
+ ([core::int]) → self::Class1 f1a = #C4;
self::Class1 c1a = f1a(){([core::int]) → self::Class1};
self::expect(42, c1a.{self::Class1::field}{core::int});
self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
f1a(42, 87); // error
^" in f1a{<inapplicable>}.(42, 87);
};
- dynamic f1b = #C5;
+ dynamic f1b = #C4;
dynamic c1c = f1b{dynamic}.call();
self::expect(42, c1c{dynamic}.field);
dynamic c1d = f1b{dynamic}.call(87);
self::expect(87, c1d{dynamic}.field);
self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
- ({field: core::int}) → self::Class2 f2a = #C6;
+ ({field: core::int}) → self::Class2 f2a = #C5;
self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
self::expect(42, c2a.{self::Class2::field}{core::int});
self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
f2a(87); // error
^" in f2a{<inapplicable>}.(87);
};
- dynamic f2b = #C6;
+ dynamic f2b = #C5;
dynamic c2c = f2b{dynamic}.call();
self::expect(42, c2c{dynamic}.field);
dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
try {
f(){() → dynamic};
}
@@ -103,9 +103,8 @@
constants {
#C1 = constructor-tearoff self::Class1::•
#C2 = 42
- #C3 = null
- #C4 = constructor-tearoff self::Class2::•
- #C5 = static-tearoff self::Class1::_#new#tearOff
- #C6 = static-tearoff self::Class2::_#new#tearOff
- #C7 = false
+ #C3 = constructor-tearoff self::Class2::•
+ #C4 = static-tearoff self::Class1::_#new#tearOff
+ #C5 = static-tearoff self::Class2::_#new#tearOff
+ #C6 = false
}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.transformed.expect
index cc59901..f707639 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.transformed.expect
@@ -23,20 +23,20 @@
;
static method _#_#tearOff([core::int field = #C2]) → self::Class1
return new self::Class1::_(field);
- static factory •([core::int field = #C3]) → self::Class1
+ static factory •([core::int field = #C2]) → self::Class1
return new self::Class1::_(field);
static method _#new#tearOff([core::int field = #C2]) → self::Class1
return new self::Class1::_(field);
}
class Class2 extends core::Object {
final field core::int field;
- static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+ static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
constructor _({core::int field = #C2}) → self::Class2
: self::Class2::field = field, super core::Object::•()
;
static method _#_#tearOff({core::int field = #C2}) → self::Class2
return new self::Class2::_(field: field);
- static factory •({core::int field = #C3}) → self::Class2
+ static factory •({core::int field = #C2}) → self::Class2
return new self::Class2::_(field: field);
static method _#new#tearOff({core::int field = #C2}) → self::Class2
return new self::Class2::_(field: field);
@@ -47,7 +47,7 @@
self::testDefaultValues();
}
static method testDefaultValues() → void {
- ([core::int]) → self::Class1 f1a = #C5;
+ ([core::int]) → self::Class1 f1a = #C4;
self::Class1 c1a = f1a(){([core::int]) → self::Class1};
self::expect(42, c1a.{self::Class1::field}{core::int});
self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
f1a(42, 87); // error
^" in f1a{<inapplicable>}.(42, 87);
};
- dynamic f1b = #C5;
+ dynamic f1b = #C4;
dynamic c1c = f1b{dynamic}.call();
self::expect(42, c1c{dynamic}.field);
dynamic c1d = f1b{dynamic}.call(87);
self::expect(87, c1d{dynamic}.field);
self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
- ({field: core::int}) → self::Class2 f2a = #C6;
+ ({field: core::int}) → self::Class2 f2a = #C5;
self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
self::expect(42, c2a.{self::Class2::field}{core::int});
self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
f2a(87); // error
^" in f2a{<inapplicable>}.(87);
};
- dynamic f2b = #C6;
+ dynamic f2b = #C5;
dynamic c2c = f2b{dynamic}.call();
self::expect(42, c2c{dynamic}.field);
dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
try {
f(){() → dynamic};
}
@@ -103,9 +103,8 @@
constants {
#C1 = constructor-tearoff self::Class1::•
#C2 = 42
- #C3 = null
- #C4 = constructor-tearoff self::Class2::•
- #C5 = static-tearoff self::Class1::_#new#tearOff
- #C6 = static-tearoff self::Class2::_#new#tearOff
- #C7 = false
+ #C3 = constructor-tearoff self::Class2::•
+ #C4 = static-tearoff self::Class1::_#new#tearOff
+ #C5 = static-tearoff self::Class2::_#new#tearOff
+ #C6 = false
}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.expect
index aa8c2df..f53573a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.expect
@@ -52,11 +52,11 @@
;
static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
return new self::Class1::positional(field1, field2);
- static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
+ static factory redirectPositionalSame([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
return new self::Class1::positional(field1, field2);
static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
return new self::Class1::positional(field1, field2);
- static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
+ static factory redirectPositionalFewer1([core::int field1 = #C9]) → self::Class1
return new self::Class1::positional(field1);
static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
return new self::Class1::positional(field1);
@@ -66,19 +66,19 @@
return new self::Class1::positional();
static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field1: field1, field2: field2);
- static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
+ static factory redirectNamedSame({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field1: field1, field2: field2);
static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field1: field1, field2: field2);
- static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
+ static factory redirectNamedReorder({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field2: field2, field1: field1);
static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field2: field2, field1: field1);
- static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
+ static factory redirectNamedFewer1({core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field1: field1);
static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field1: field1);
- static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
+ static factory redirectNamedFewer2({core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field2: field2);
static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field2: field2);
@@ -93,7 +93,7 @@
self::testDefaultValues();
}
static method testDefaultValues() → dynamic {
- ([core::int, core::int]) → self::Class1 f1a = #C12;
+ ([core::int, core::int]) → self::Class1 f1a = #C11;
self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
self::expect(1, c1a.{self::Class1::field1}{core::int});
self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
self::expect(42, c1c.{self::Class1::field1}{core::int});
self::expect(87, c1c.{self::Class1::field2}{core::int});
- ([core::int]) → self::Class1 f1b = #C13;
+ ([core::int]) → self::Class1 f1b = #C12;
self::Class1 c1d = f1b(){([core::int]) → self::Class1};
self::expect(1, c1d.{self::Class1::field1}{core::int});
self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
f1b(42, 87); // error
^" in f1b{<inapplicable>}.(42, 87);
};
- () → self::Class1 f1c = #C14;
+ () → self::Class1 f1c = #C13;
self::Class1 c1f = f1c(){() → self::Class1};
self::expect(1, c1f.{self::Class1::field1}{core::int});
self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
f1c(42, 87); // error
^" in f1c{<inapplicable>}.(42, 87);
};
- ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
+ ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C14;
self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(1, c2a.{self::Class1::field1}{core::int});
self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(42, c2e.{self::Class1::field1}{core::int});
self::expect(87, c2e.{self::Class1::field2}{core::int});
- ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
+ ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C15;
self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(1, c3a.{self::Class1::field1}{core::int});
self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(42, c3e.{self::Class1::field1}{core::int});
self::expect(87, c3e.{self::Class1::field2}{core::int});
- ({field1: core::int}) → self::Class1 f2c = #C17;
+ ({field1: core::int}) → self::Class1 f2c = #C16;
self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
self::expect(1, c4a.{self::Class1::field1}{core::int});
self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
f2c(field1: 42, field2: 87); // error
^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
};
- ({field2: core::int}) → self::Class1 f2d = #C18;
+ ({field2: core::int}) → self::Class1 f2d = #C17;
self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
self::expect(1, c5a.{self::Class1::field1}{core::int});
self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
f2d(field1: 42, field2: 87); // error
^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
};
- () → self::Class1 f2e = #C19;
+ () → self::Class1 f2e = #C18;
self::Class1 c6a = f2e(){() → self::Class1};
self::expect(1, c6a.{self::Class1::field1}{core::int});
self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C19}) → dynamic {
try {
f(){() → dynamic};
}
@@ -231,14 +231,13 @@
#C8 = constructor-tearoff self::Class1::redirectNamedFewer3
#C9 = 1
#C10 = 2
- #C11 = null
- #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
- #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
- #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
- #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
- #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
- #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
- #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
- #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
- #C20 = false
+ #C11 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+ #C12 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+ #C13 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+ #C14 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+ #C15 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+ #C16 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+ #C17 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+ #C18 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+ #C19 = false
}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.transformed.expect
index aa4af4d..80d7fd2 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.transformed.expect
@@ -52,11 +52,11 @@
;
static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
return new self::Class1::positional(field1, field2);
- static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
+ static factory redirectPositionalSame([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
return new self::Class1::positional(field1, field2);
static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
return new self::Class1::positional(field1, field2);
- static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
+ static factory redirectPositionalFewer1([core::int field1 = #C9]) → self::Class1
return new self::Class1::positional(field1);
static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
return new self::Class1::positional(field1);
@@ -66,19 +66,19 @@
return new self::Class1::positional();
static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field1: field1, field2: field2);
- static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
+ static factory redirectNamedSame({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field1: field1, field2: field2);
static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field1: field1, field2: field2);
- static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
+ static factory redirectNamedReorder({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field2: field2, field1: field1);
static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field2: field2, field1: field1);
- static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
+ static factory redirectNamedFewer1({core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field1: field1);
static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field1: field1);
- static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
+ static factory redirectNamedFewer2({core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field2: field2);
static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field2: field2);
@@ -93,7 +93,7 @@
self::testDefaultValues();
}
static method testDefaultValues() → dynamic {
- ([core::int, core::int]) → self::Class1 f1a = #C12;
+ ([core::int, core::int]) → self::Class1 f1a = #C11;
self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
self::expect(1, c1a.{self::Class1::field1}{core::int});
self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
self::expect(42, c1c.{self::Class1::field1}{core::int});
self::expect(87, c1c.{self::Class1::field2}{core::int});
- ([core::int]) → self::Class1 f1b = #C13;
+ ([core::int]) → self::Class1 f1b = #C12;
self::Class1 c1d = f1b(){([core::int]) → self::Class1};
self::expect(1, c1d.{self::Class1::field1}{core::int});
self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
f1b(42, 87); // error
^" in f1b{<inapplicable>}.(42, 87);
};
- () → self::Class1 f1c = #C14;
+ () → self::Class1 f1c = #C13;
self::Class1 c1f = f1c(){() → self::Class1};
self::expect(1, c1f.{self::Class1::field1}{core::int});
self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
f1c(42, 87); // error
^" in f1c{<inapplicable>}.(42, 87);
};
- ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
+ ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C14;
self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(1, c2a.{self::Class1::field1}{core::int});
self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(42, c2e.{self::Class1::field1}{core::int});
self::expect(87, c2e.{self::Class1::field2}{core::int});
- ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
+ ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C15;
self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(1, c3a.{self::Class1::field1}{core::int});
self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(42, c3e.{self::Class1::field1}{core::int});
self::expect(87, c3e.{self::Class1::field2}{core::int});
- ({field1: core::int}) → self::Class1 f2c = #C17;
+ ({field1: core::int}) → self::Class1 f2c = #C16;
self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
self::expect(1, c4a.{self::Class1::field1}{core::int});
self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
f2c(field1: 42, field2: 87); // error
^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
};
- ({field2: core::int}) → self::Class1 f2d = #C18;
+ ({field2: core::int}) → self::Class1 f2d = #C17;
self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
self::expect(1, c5a.{self::Class1::field1}{core::int});
self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
f2d(field1: 42, field2: 87); // error
^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
};
- () → self::Class1 f2e = #C19;
+ () → self::Class1 f2e = #C18;
self::Class1 c6a = f2e(){() → self::Class1};
self::expect(1, c6a.{self::Class1::field1}{core::int});
self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C19}) → dynamic {
try {
f(){() → dynamic};
}
@@ -231,14 +231,13 @@
#C8 = constructor-tearoff self::Class1::redirectNamedFewer3
#C9 = 1
#C10 = 2
- #C11 = null
- #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
- #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
- #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
- #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
- #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
- #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
- #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
- #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
- #C20 = false
+ #C11 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+ #C12 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+ #C13 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+ #C14 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+ #C15 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+ #C16 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+ #C17 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+ #C18 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+ #C19 = false
}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.expect
index aa8c2df..f53573a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.expect
@@ -52,11 +52,11 @@
;
static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
return new self::Class1::positional(field1, field2);
- static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
+ static factory redirectPositionalSame([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
return new self::Class1::positional(field1, field2);
static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
return new self::Class1::positional(field1, field2);
- static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
+ static factory redirectPositionalFewer1([core::int field1 = #C9]) → self::Class1
return new self::Class1::positional(field1);
static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
return new self::Class1::positional(field1);
@@ -66,19 +66,19 @@
return new self::Class1::positional();
static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field1: field1, field2: field2);
- static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
+ static factory redirectNamedSame({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field1: field1, field2: field2);
static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field1: field1, field2: field2);
- static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
+ static factory redirectNamedReorder({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field2: field2, field1: field1);
static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field2: field2, field1: field1);
- static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
+ static factory redirectNamedFewer1({core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field1: field1);
static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field1: field1);
- static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
+ static factory redirectNamedFewer2({core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field2: field2);
static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field2: field2);
@@ -93,7 +93,7 @@
self::testDefaultValues();
}
static method testDefaultValues() → dynamic {
- ([core::int, core::int]) → self::Class1 f1a = #C12;
+ ([core::int, core::int]) → self::Class1 f1a = #C11;
self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
self::expect(1, c1a.{self::Class1::field1}{core::int});
self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
self::expect(42, c1c.{self::Class1::field1}{core::int});
self::expect(87, c1c.{self::Class1::field2}{core::int});
- ([core::int]) → self::Class1 f1b = #C13;
+ ([core::int]) → self::Class1 f1b = #C12;
self::Class1 c1d = f1b(){([core::int]) → self::Class1};
self::expect(1, c1d.{self::Class1::field1}{core::int});
self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
f1b(42, 87); // error
^" in f1b{<inapplicable>}.(42, 87);
};
- () → self::Class1 f1c = #C14;
+ () → self::Class1 f1c = #C13;
self::Class1 c1f = f1c(){() → self::Class1};
self::expect(1, c1f.{self::Class1::field1}{core::int});
self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
f1c(42, 87); // error
^" in f1c{<inapplicable>}.(42, 87);
};
- ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
+ ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C14;
self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(1, c2a.{self::Class1::field1}{core::int});
self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(42, c2e.{self::Class1::field1}{core::int});
self::expect(87, c2e.{self::Class1::field2}{core::int});
- ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
+ ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C15;
self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(1, c3a.{self::Class1::field1}{core::int});
self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(42, c3e.{self::Class1::field1}{core::int});
self::expect(87, c3e.{self::Class1::field2}{core::int});
- ({field1: core::int}) → self::Class1 f2c = #C17;
+ ({field1: core::int}) → self::Class1 f2c = #C16;
self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
self::expect(1, c4a.{self::Class1::field1}{core::int});
self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
f2c(field1: 42, field2: 87); // error
^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
};
- ({field2: core::int}) → self::Class1 f2d = #C18;
+ ({field2: core::int}) → self::Class1 f2d = #C17;
self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
self::expect(1, c5a.{self::Class1::field1}{core::int});
self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
f2d(field1: 42, field2: 87); // error
^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
};
- () → self::Class1 f2e = #C19;
+ () → self::Class1 f2e = #C18;
self::Class1 c6a = f2e(){() → self::Class1};
self::expect(1, c6a.{self::Class1::field1}{core::int});
self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C19}) → dynamic {
try {
f(){() → dynamic};
}
@@ -231,14 +231,13 @@
#C8 = constructor-tearoff self::Class1::redirectNamedFewer3
#C9 = 1
#C10 = 2
- #C11 = null
- #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
- #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
- #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
- #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
- #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
- #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
- #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
- #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
- #C20 = false
+ #C11 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+ #C12 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+ #C13 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+ #C14 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+ #C15 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+ #C16 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+ #C17 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+ #C18 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+ #C19 = false
}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.modular.expect
index aa8c2df..f53573a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.modular.expect
@@ -52,11 +52,11 @@
;
static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
return new self::Class1::positional(field1, field2);
- static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
+ static factory redirectPositionalSame([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
return new self::Class1::positional(field1, field2);
static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
return new self::Class1::positional(field1, field2);
- static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
+ static factory redirectPositionalFewer1([core::int field1 = #C9]) → self::Class1
return new self::Class1::positional(field1);
static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
return new self::Class1::positional(field1);
@@ -66,19 +66,19 @@
return new self::Class1::positional();
static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field1: field1, field2: field2);
- static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
+ static factory redirectNamedSame({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field1: field1, field2: field2);
static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field1: field1, field2: field2);
- static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
+ static factory redirectNamedReorder({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field2: field2, field1: field1);
static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field2: field2, field1: field1);
- static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
+ static factory redirectNamedFewer1({core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field1: field1);
static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field1: field1);
- static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
+ static factory redirectNamedFewer2({core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field2: field2);
static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field2: field2);
@@ -93,7 +93,7 @@
self::testDefaultValues();
}
static method testDefaultValues() → dynamic {
- ([core::int, core::int]) → self::Class1 f1a = #C12;
+ ([core::int, core::int]) → self::Class1 f1a = #C11;
self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
self::expect(1, c1a.{self::Class1::field1}{core::int});
self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
self::expect(42, c1c.{self::Class1::field1}{core::int});
self::expect(87, c1c.{self::Class1::field2}{core::int});
- ([core::int]) → self::Class1 f1b = #C13;
+ ([core::int]) → self::Class1 f1b = #C12;
self::Class1 c1d = f1b(){([core::int]) → self::Class1};
self::expect(1, c1d.{self::Class1::field1}{core::int});
self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
f1b(42, 87); // error
^" in f1b{<inapplicable>}.(42, 87);
};
- () → self::Class1 f1c = #C14;
+ () → self::Class1 f1c = #C13;
self::Class1 c1f = f1c(){() → self::Class1};
self::expect(1, c1f.{self::Class1::field1}{core::int});
self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
f1c(42, 87); // error
^" in f1c{<inapplicable>}.(42, 87);
};
- ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
+ ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C14;
self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(1, c2a.{self::Class1::field1}{core::int});
self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(42, c2e.{self::Class1::field1}{core::int});
self::expect(87, c2e.{self::Class1::field2}{core::int});
- ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
+ ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C15;
self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(1, c3a.{self::Class1::field1}{core::int});
self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(42, c3e.{self::Class1::field1}{core::int});
self::expect(87, c3e.{self::Class1::field2}{core::int});
- ({field1: core::int}) → self::Class1 f2c = #C17;
+ ({field1: core::int}) → self::Class1 f2c = #C16;
self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
self::expect(1, c4a.{self::Class1::field1}{core::int});
self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
f2c(field1: 42, field2: 87); // error
^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
};
- ({field2: core::int}) → self::Class1 f2d = #C18;
+ ({field2: core::int}) → self::Class1 f2d = #C17;
self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
self::expect(1, c5a.{self::Class1::field1}{core::int});
self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
f2d(field1: 42, field2: 87); // error
^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
};
- () → self::Class1 f2e = #C19;
+ () → self::Class1 f2e = #C18;
self::Class1 c6a = f2e(){() → self::Class1};
self::expect(1, c6a.{self::Class1::field1}{core::int});
self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C19}) → dynamic {
try {
f(){() → dynamic};
}
@@ -231,14 +231,13 @@
#C8 = constructor-tearoff self::Class1::redirectNamedFewer3
#C9 = 1
#C10 = 2
- #C11 = null
- #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
- #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
- #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
- #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
- #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
- #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
- #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
- #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
- #C20 = false
+ #C11 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+ #C12 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+ #C13 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+ #C14 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+ #C15 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+ #C16 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+ #C17 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+ #C18 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+ #C19 = false
}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.transformed.expect
index aa4af4d..80d7fd2 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.transformed.expect
@@ -52,11 +52,11 @@
;
static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
return new self::Class1::positional(field1, field2);
- static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
+ static factory redirectPositionalSame([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
return new self::Class1::positional(field1, field2);
static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
return new self::Class1::positional(field1, field2);
- static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
+ static factory redirectPositionalFewer1([core::int field1 = #C9]) → self::Class1
return new self::Class1::positional(field1);
static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
return new self::Class1::positional(field1);
@@ -66,19 +66,19 @@
return new self::Class1::positional();
static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field1: field1, field2: field2);
- static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
+ static factory redirectNamedSame({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field1: field1, field2: field2);
static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field1: field1, field2: field2);
- static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
+ static factory redirectNamedReorder({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field2: field2, field1: field1);
static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field2: field2, field1: field1);
- static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
+ static factory redirectNamedFewer1({core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field1: field1);
static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
return new self::Class1::named(field1: field1);
- static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
+ static factory redirectNamedFewer2({core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field2: field2);
static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
return new self::Class1::named(field2: field2);
@@ -93,7 +93,7 @@
self::testDefaultValues();
}
static method testDefaultValues() → dynamic {
- ([core::int, core::int]) → self::Class1 f1a = #C12;
+ ([core::int, core::int]) → self::Class1 f1a = #C11;
self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
self::expect(1, c1a.{self::Class1::field1}{core::int});
self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
self::expect(42, c1c.{self::Class1::field1}{core::int});
self::expect(87, c1c.{self::Class1::field2}{core::int});
- ([core::int]) → self::Class1 f1b = #C13;
+ ([core::int]) → self::Class1 f1b = #C12;
self::Class1 c1d = f1b(){([core::int]) → self::Class1};
self::expect(1, c1d.{self::Class1::field1}{core::int});
self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
f1b(42, 87); // error
^" in f1b{<inapplicable>}.(42, 87);
};
- () → self::Class1 f1c = #C14;
+ () → self::Class1 f1c = #C13;
self::Class1 c1f = f1c(){() → self::Class1};
self::expect(1, c1f.{self::Class1::field1}{core::int});
self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
f1c(42, 87); // error
^" in f1c{<inapplicable>}.(42, 87);
};
- ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
+ ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C14;
self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(1, c2a.{self::Class1::field1}{core::int});
self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(42, c2e.{self::Class1::field1}{core::int});
self::expect(87, c2e.{self::Class1::field2}{core::int});
- ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
+ ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C15;
self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(1, c3a.{self::Class1::field1}{core::int});
self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
self::expect(42, c3e.{self::Class1::field1}{core::int});
self::expect(87, c3e.{self::Class1::field2}{core::int});
- ({field1: core::int}) → self::Class1 f2c = #C17;
+ ({field1: core::int}) → self::Class1 f2c = #C16;
self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
self::expect(1, c4a.{self::Class1::field1}{core::int});
self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
f2c(field1: 42, field2: 87); // error
^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
};
- ({field2: core::int}) → self::Class1 f2d = #C18;
+ ({field2: core::int}) → self::Class1 f2d = #C17;
self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
self::expect(1, c5a.{self::Class1::field1}{core::int});
self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
f2d(field1: 42, field2: 87); // error
^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
};
- () → self::Class1 f2e = #C19;
+ () → self::Class1 f2e = #C18;
self::Class1 c6a = f2e(){() → self::Class1};
self::expect(1, c6a.{self::Class1::field1}{core::int});
self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C19}) → dynamic {
try {
f(){() → dynamic};
}
@@ -231,14 +231,13 @@
#C8 = constructor-tearoff self::Class1::redirectNamedFewer3
#C9 = 1
#C10 = 2
- #C11 = null
- #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
- #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
- #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
- #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
- #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
- #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
- #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
- #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
- #C20 = false
+ #C11 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+ #C12 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+ #C13 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+ #C14 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+ #C15 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+ #C16 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+ #C17 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+ #C18 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+ #C19 = false
}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.expect
index 713b894..3175a4a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.expect
@@ -53,7 +53,7 @@
;
static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
return new self::Class::•<self::Class::fact::T%>(field);
- static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+ static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
}
abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.transformed.expect
index e1f62d1..9913373 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.transformed.expect
@@ -53,7 +53,7 @@
;
static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
return new self::Class::•<self::Class::fact::T%>(field);
- static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+ static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
}
abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.expect
index 911cbda..2a8a57e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.expect
@@ -53,7 +53,7 @@
;
static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
return new self::Class::•<self::Class::fact::T%>(field);
- static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+ static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
}
abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.modular.expect
index 911cbda..2a8a57e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.modular.expect
@@ -53,7 +53,7 @@
;
static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
return new self::Class::•<self::Class::fact::T%>(field);
- static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+ static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
}
abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.transformed.expect
index ec985b8..7444b65 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.transformed.expect
@@ -53,7 +53,7 @@
;
static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
return new self::Class::•<self::Class::fact::T%>(field);
- static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+ static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
}
abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
index 7840205..3b2e796 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
@@ -99,7 +99,7 @@
^";
static factory f5() → self::E
return self::E::f();
- static factory f6(core::int value) → self::E
+ static factory f6(core::int value = #C11) → self::E
return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:28:29: Error: The constructor function type 'E Function()' isn't a subtype of 'E Function(int)'.
- 'E' is from 'pkg/front_end/testcases/enhanced_enums/constructor_calls.dart'.
factory E.f6(int value) = E.f; // Error.
@@ -129,7 +129,7 @@
Try using a constructor or factory that is 'const'.
const E.f(); // Error.
^";
- #C11;
+ #C12;
}
static method main() → dynamic {}
@@ -144,7 +144,8 @@
#C8 = constructor-tearoff self::E::f4
#C9 = constructor-tearoff self::E::f5
#C10 = constructor-tearoff self::E::f6
- #C11 = constructor-tearoff self::E::f
+ #C11 = null
+ #C12 = constructor-tearoff self::E::f
}
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
index 7840205..3b2e796 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
@@ -99,7 +99,7 @@
^";
static factory f5() → self::E
return self::E::f();
- static factory f6(core::int value) → self::E
+ static factory f6(core::int value = #C11) → self::E
return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:28:29: Error: The constructor function type 'E Function()' isn't a subtype of 'E Function(int)'.
- 'E' is from 'pkg/front_end/testcases/enhanced_enums/constructor_calls.dart'.
factory E.f6(int value) = E.f; // Error.
@@ -129,7 +129,7 @@
Try using a constructor or factory that is 'const'.
const E.f(); // Error.
^";
- #C11;
+ #C12;
}
static method main() → dynamic {}
@@ -144,7 +144,8 @@
#C8 = constructor-tearoff self::E::f4
#C9 = constructor-tearoff self::E::f5
#C10 = constructor-tearoff self::E::f6
- #C11 = constructor-tearoff self::E::f
+ #C11 = null
+ #C12 = constructor-tearoff self::E::f
}
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect
index 7840205..3b2e796 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect
@@ -99,7 +99,7 @@
^";
static factory f5() → self::E
return self::E::f();
- static factory f6(core::int value) → self::E
+ static factory f6(core::int value = #C11) → self::E
return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:28:29: Error: The constructor function type 'E Function()' isn't a subtype of 'E Function(int)'.
- 'E' is from 'pkg/front_end/testcases/enhanced_enums/constructor_calls.dart'.
factory E.f6(int value) = E.f; // Error.
@@ -129,7 +129,7 @@
Try using a constructor or factory that is 'const'.
const E.f(); // Error.
^";
- #C11;
+ #C12;
}
static method main() → dynamic {}
@@ -144,7 +144,8 @@
#C8 = constructor-tearoff self::E::f4
#C9 = constructor-tearoff self::E::f5
#C10 = constructor-tearoff self::E::f6
- #C11 = constructor-tearoff self::E::f
+ #C11 = null
+ #C12 = constructor-tearoff self::E::f
}
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect
index 7840205..3b2e796 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect
@@ -99,7 +99,7 @@
^";
static factory f5() → self::E
return self::E::f();
- static factory f6(core::int value) → self::E
+ static factory f6(core::int value = #C11) → self::E
return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:28:29: Error: The constructor function type 'E Function()' isn't a subtype of 'E Function(int)'.
- 'E' is from 'pkg/front_end/testcases/enhanced_enums/constructor_calls.dart'.
factory E.f6(int value) = E.f; // Error.
@@ -129,7 +129,7 @@
Try using a constructor or factory that is 'const'.
const E.f(); // Error.
^";
- #C11;
+ #C12;
}
static method main() → dynamic {}
@@ -144,7 +144,8 @@
#C8 = constructor-tearoff self::E::f4
#C9 = constructor-tearoff self::E::f5
#C10 = constructor-tearoff self::E::f6
- #C11 = constructor-tearoff self::E::f
+ #C11 = null
+ #C12 = constructor-tearoff self::E::f
}
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect
index 7840205..3b2e796 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect
@@ -99,7 +99,7 @@
^";
static factory f5() → self::E
return self::E::f();
- static factory f6(core::int value) → self::E
+ static factory f6(core::int value = #C11) → self::E
return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:28:29: Error: The constructor function type 'E Function()' isn't a subtype of 'E Function(int)'.
- 'E' is from 'pkg/front_end/testcases/enhanced_enums/constructor_calls.dart'.
factory E.f6(int value) = E.f; // Error.
@@ -129,7 +129,7 @@
Try using a constructor or factory that is 'const'.
const E.f(); // Error.
^";
- #C11;
+ #C12;
}
static method main() → dynamic {}
@@ -144,7 +144,8 @@
#C8 = constructor-tearoff self::E::f4
#C9 = constructor-tearoff self::E::f5
#C10 = constructor-tearoff self::E::f6
- #C11 = constructor-tearoff self::E::f
+ #C11 = null
+ #C12 = constructor-tearoff self::E::f
}
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
index 0cdd47c..ec986d0 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
@@ -37,7 +37,7 @@
static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C4}) → test::Class
return throw "unsupported";
@#C1
- static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C4}) → test::Class
+ static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C3}) → test::Class
return new test::Class::_internal(defaultValue: defaultValue);
}
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect
index 0cdd47c..ec986d0 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect
@@ -37,7 +37,7 @@
static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C4}) → test::Class
return throw "unsupported";
@#C1
- static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C4}) → test::Class
+ static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C3}) → test::Class
return new test::Class::_internal(defaultValue: defaultValue);
}
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect
index 0cdd47c..ec986d0 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect
@@ -37,7 +37,7 @@
static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C4}) → test::Class
return throw "unsupported";
@#C1
- static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C4}) → test::Class
+ static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C3}) → test::Class
return new test::Class::_internal(defaultValue: defaultValue);
}
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.expect
index 706562c..0be5e5b 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.expect
@@ -10,17 +10,17 @@
}
class Settings extends core::Object {
static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
- static factory •({@#C3 self::Sidebar sidebar = #C4}) → self::Settings
+ static factory •({@#C3 self::Sidebar sidebar = #C2}) → self::Settings
return self::_SSettings::•(sidebar: sidebar);
}
class Sidebar extends core::Object {
- static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+ static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
static factory •() → self::Sidebar
return self::_SSidebar::•();
}
abstract class _SSettings extends core::Object implements self::Settings {
- static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
- static factory •({self::Sidebar sidebar = #C4}) → self::_SSettings
+ static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+ static factory •({self::Sidebar sidebar = #C2}) → self::_SSettings
return new self::_$_SSettings::•(sidebar: sidebar);
}
class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/ {
@@ -30,7 +30,7 @@
;
}
abstract class _SSidebar extends core::Object implements self::Sidebar {
- static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+ static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
static factory •() → self::_SSidebar
return new self::_$_SSidebar::•();
}
@@ -45,10 +45,9 @@
#C1 = constructor-tearoff self::Settings::•
#C2 = self::_$_SSidebar {}
#C3 = self::Default {defaultValue:#C2}
- #C4 = null
- #C5 = constructor-tearoff self::Sidebar::•
- #C6 = constructor-tearoff self::_SSettings::•
- #C7 = constructor-tearoff self::_SSidebar::•
+ #C4 = constructor-tearoff self::Sidebar::•
+ #C5 = constructor-tearoff self::_SSettings::•
+ #C6 = constructor-tearoff self::_SSidebar::•
}
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.modular.expect
index 706562c..0be5e5b 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.modular.expect
@@ -10,17 +10,17 @@
}
class Settings extends core::Object {
static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
- static factory •({@#C3 self::Sidebar sidebar = #C4}) → self::Settings
+ static factory •({@#C3 self::Sidebar sidebar = #C2}) → self::Settings
return self::_SSettings::•(sidebar: sidebar);
}
class Sidebar extends core::Object {
- static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+ static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
static factory •() → self::Sidebar
return self::_SSidebar::•();
}
abstract class _SSettings extends core::Object implements self::Settings {
- static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
- static factory •({self::Sidebar sidebar = #C4}) → self::_SSettings
+ static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+ static factory •({self::Sidebar sidebar = #C2}) → self::_SSettings
return new self::_$_SSettings::•(sidebar: sidebar);
}
class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/ {
@@ -30,7 +30,7 @@
;
}
abstract class _SSidebar extends core::Object implements self::Sidebar {
- static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+ static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
static factory •() → self::_SSidebar
return new self::_$_SSidebar::•();
}
@@ -45,10 +45,9 @@
#C1 = constructor-tearoff self::Settings::•
#C2 = self::_$_SSidebar {}
#C3 = self::Default {defaultValue:#C2}
- #C4 = null
- #C5 = constructor-tearoff self::Sidebar::•
- #C6 = constructor-tearoff self::_SSettings::•
- #C7 = constructor-tearoff self::_SSidebar::•
+ #C4 = constructor-tearoff self::Sidebar::•
+ #C5 = constructor-tearoff self::_SSettings::•
+ #C6 = constructor-tearoff self::_SSidebar::•
}
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
index 706562c..0be5e5b 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
@@ -10,17 +10,17 @@
}
class Settings extends core::Object {
static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
- static factory •({@#C3 self::Sidebar sidebar = #C4}) → self::Settings
+ static factory •({@#C3 self::Sidebar sidebar = #C2}) → self::Settings
return self::_SSettings::•(sidebar: sidebar);
}
class Sidebar extends core::Object {
- static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+ static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
static factory •() → self::Sidebar
return self::_SSidebar::•();
}
abstract class _SSettings extends core::Object implements self::Settings {
- static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
- static factory •({self::Sidebar sidebar = #C4}) → self::_SSettings
+ static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+ static factory •({self::Sidebar sidebar = #C2}) → self::_SSettings
return new self::_$_SSettings::•(sidebar: sidebar);
}
class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/ {
@@ -30,7 +30,7 @@
;
}
abstract class _SSidebar extends core::Object implements self::Sidebar {
- static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+ static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
static factory •() → self::_SSidebar
return new self::_$_SSidebar::•();
}
@@ -45,10 +45,9 @@
#C1 = constructor-tearoff self::Settings::•
#C2 = self::_$_SSidebar {}
#C3 = self::Default {defaultValue:#C2}
- #C4 = null
- #C5 = constructor-tearoff self::Sidebar::•
- #C6 = constructor-tearoff self::_SSettings::•
- #C7 = constructor-tearoff self::_SSidebar::•
+ #C4 = constructor-tearoff self::Sidebar::•
+ #C5 = constructor-tearoff self::_SSettings::•
+ #C6 = constructor-tearoff self::_SSidebar::•
}
diff --git a/pkg/front_end/testcases/general/issue48548.dart b/pkg/front_end/testcases/general/issue48548.dart
new file mode 100644
index 0000000..52be292
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2022, 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.
+
+abstract class A {
+ int get value;
+ factory A({int value}) = _AImpl;
+}
+
+class _AImpl implements A {
+ final int value;
+ _AImpl({this.value = 0});
+}
+
+const _new = A.new;
+const _newImpl = _AImpl.new;
+
+void main(List<String> args) {
+ expect(0, A().value);
+ expect(0, A.new().value);
+ expect(0, _new().value);
+ expect(0, (A.new)().value);
+ expect(0, _AImpl().value);
+ expect(0, _AImpl.new().value);
+ expect(0, _newImpl().value);
+ expect(0, (_AImpl.new)().value);
+}
+
+expect(expected, actual) {
+ if (expected != actual) throw 'Expected $expected, actual $actual';
+}
diff --git a/pkg/front_end/testcases/general/issue48548.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue48548.dart.textual_outline.expect
new file mode 100644
index 0000000..a9c9cef
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.textual_outline.expect
@@ -0,0 +1,14 @@
+abstract class A {
+ int get value;
+ factory A({int value}) = _AImpl;
+}
+
+class _AImpl implements A {
+ final int value;
+ _AImpl({this.value = 0});
+}
+
+const _new = A.new;
+const _newImpl = _AImpl.new;
+void main(List<String> args) {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/general/issue48548.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue48548.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0c47551
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.textual_outline_modelled.expect
@@ -0,0 +1,14 @@
+abstract class A {
+ factory A({int value}) = _AImpl;
+ int get value;
+}
+
+class _AImpl implements A {
+ _AImpl({this.value = 0});
+ final int value;
+}
+
+const _new = A.new;
+const _newImpl = _AImpl.new;
+expect(expected, actual) {}
+void main(List<String> args) {}
diff --git a/pkg/front_end/testcases/general/issue48548.dart.weak.expect b/pkg/front_end/testcases/general/issue48548.dart.weak.expect
new file mode 100644
index 0000000..5077524
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.weak.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+ abstract get value() → core::int;
+ static factory •({core::int value = #C2}) → self::A
+ return new self::_AImpl::•(value: value);
+}
+class _AImpl extends core::Object implements self::A {
+ final field core::int value;
+ constructor •({core::int value = #C2}) → self::_AImpl
+ : self::_AImpl::value = value, super core::Object::•()
+ ;
+}
+static const field ({value: core::int}) → self::A _new = #C3;
+static const field ({value: core::int}) → self::_AImpl _newImpl = #C4;
+static method main(core::List<core::String> args) → void {
+ self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+ self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+ self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+ self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+ self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+ self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+ self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+ self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+
+constants {
+ #C1 = constructor-tearoff self::A::•
+ #C2 = 0
+ #C3 = redirecting-factory-tearoff self::A::•
+ #C4 = constructor-tearoff self::_AImpl::•
+}
diff --git a/pkg/front_end/testcases/general/issue48548.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48548.dart.weak.modular.expect
new file mode 100644
index 0000000..5077524
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+ abstract get value() → core::int;
+ static factory •({core::int value = #C2}) → self::A
+ return new self::_AImpl::•(value: value);
+}
+class _AImpl extends core::Object implements self::A {
+ final field core::int value;
+ constructor •({core::int value = #C2}) → self::_AImpl
+ : self::_AImpl::value = value, super core::Object::•()
+ ;
+}
+static const field ({value: core::int}) → self::A _new = #C3;
+static const field ({value: core::int}) → self::_AImpl _newImpl = #C4;
+static method main(core::List<core::String> args) → void {
+ self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+ self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+ self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+ self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+ self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+ self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+ self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+ self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+
+constants {
+ #C1 = constructor-tearoff self::A::•
+ #C2 = 0
+ #C3 = redirecting-factory-tearoff self::A::•
+ #C4 = constructor-tearoff self::_AImpl::•
+}
diff --git a/pkg/front_end/testcases/general/issue48548.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48548.dart.weak.outline.expect
new file mode 100644
index 0000000..3119c74
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.weak.outline.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+ abstract get value() → core::int;
+ static factory •({core::int value}) → self::A
+ return new self::_AImpl::•(value: value);
+}
+class _AImpl extends core::Object implements self::A {
+ final field core::int value;
+ constructor •({core::int value = 0}) → self::_AImpl
+ ;
+}
+static const field ({value: core::int}) → self::A _new = self::A::•;
+static const field ({value: core::int}) → self::_AImpl _newImpl = self::_AImpl::•;
+static method main(core::List<core::String> args) → void
+ ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+ ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue48548.dart:5:16 -> ConstructorTearOffConstant(A.)
+Evaluated: RedirectingFactoryTearOff @ org-dartlang-testcase:///issue48548.dart:15:14 -> RedirectingFactoryTearOffConstant(A.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue48548.dart:16:18 -> ConstructorTearOffConstant(_AImpl.)
+Extra constant evaluation: evaluated: 6, effectively constant: 3
diff --git a/pkg/front_end/testcases/general/issue48548.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48548.dart.weak.transformed.expect
new file mode 100644
index 0000000..5077524
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.weak.transformed.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+ abstract get value() → core::int;
+ static factory •({core::int value = #C2}) → self::A
+ return new self::_AImpl::•(value: value);
+}
+class _AImpl extends core::Object implements self::A {
+ final field core::int value;
+ constructor •({core::int value = #C2}) → self::_AImpl
+ : self::_AImpl::value = value, super core::Object::•()
+ ;
+}
+static const field ({value: core::int}) → self::A _new = #C3;
+static const field ({value: core::int}) → self::_AImpl _newImpl = #C4;
+static method main(core::List<core::String> args) → void {
+ self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+ self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+ self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+ self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+ self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+ self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+ self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+ self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+
+constants {
+ #C1 = constructor-tearoff self::A::•
+ #C2 = 0
+ #C3 = redirecting-factory-tearoff self::A::•
+ #C4 = constructor-tearoff self::_AImpl::•
+}
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart b/pkg/front_end/testcases/general/redirecting_default_values.dart
new file mode 100644
index 0000000..322fc25
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2022, 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.
+
+class Class {
+ Class.positional([int a = 0, int b = 42]);
+ factory Class.redirect1a() = Class.positional;
+ factory Class.redirect2a(int a) = Class.positional;
+ factory Class.redirect3a([int a]) = Class.positional;
+ factory Class.redirect4a(int a, [int b]) = Class.positional;
+ factory Class.redirect5a([int a, int b]) = Class.positional;
+ factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+
+ Class.named({int a = 0, int b = 42});
+ factory Class.redirect1b() = Class.named;
+ factory Class.redirect2b({int a}) = Class.named;
+ factory Class.redirect3b({int b}) = Class.named;
+ factory Class.redirect4b({int a, int b}) = Class.named;
+ factory Class.redirect5b({int b, int a}) = Class.named;
+ factory Class.redirect6b({int a = 1, int b}) = Class.named;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline.expect
new file mode 100644
index 0000000..85004fe
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline.expect
@@ -0,0 +1,18 @@
+class Class {
+ Class.positional([int a = 0, int b = 42]);
+ factory Class.redirect1a() = Class.positional;
+ factory Class.redirect2a(int a) = Class.positional;
+ factory Class.redirect3a([int a]) = Class.positional;
+ factory Class.redirect4a(int a, [int b]) = Class.positional;
+ factory Class.redirect5a([int a, int b]) = Class.positional;
+ factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+ Class.named({int a = 0, int b = 42});
+ factory Class.redirect1b() = Class.named;
+ factory Class.redirect2b({int a}) = Class.named;
+ factory Class.redirect3b({int b}) = Class.named;
+ factory Class.redirect4b({int a, int b}) = Class.named;
+ factory Class.redirect5b({int b, int a}) = Class.named;
+ factory Class.redirect6b({int a = 1, int b}) = Class.named;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c7ca7ed
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline_modelled.expect
@@ -0,0 +1,18 @@
+class Class {
+ Class.named({int a = 0, int b = 42});
+ Class.positional([int a = 0, int b = 42]);
+ factory Class.redirect1a() = Class.positional;
+ factory Class.redirect1b() = Class.named;
+ factory Class.redirect2a(int a) = Class.positional;
+ factory Class.redirect2b({int a}) = Class.named;
+ factory Class.redirect3a([int a]) = Class.positional;
+ factory Class.redirect3b({int b}) = Class.named;
+ factory Class.redirect4a(int a, [int b]) = Class.positional;
+ factory Class.redirect4b({int a, int b}) = Class.named;
+ factory Class.redirect5a([int a, int b]) = Class.positional;
+ factory Class.redirect5b({int b, int a}) = Class.named;
+ factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+ factory Class.redirect6b({int a = 1, int b}) = Class.named;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.expect
new file mode 100644
index 0000000..f08d181
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:12:44: Error: Can't have a default value here because any default values of 'Class.positional' would be used instead.
+// Try removing the default value.
+// factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+// ^
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:20:37: Error: Can't have a default value here because any default values of 'Class.named' would be used instead.
+// Try removing the default value.
+// factory Class.redirect6b({int a = 1, int b}) = Class.named;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8, #C9, #C10, #C11, #C12]/*isLegacy*/;
+ constructor positional([core::int a = #C13, core::int b = #C14]) → self::Class
+ : super core::Object::•()
+ ;
+ constructor named({core::int a = #C13, core::int b = #C14}) → self::Class
+ : super core::Object::•()
+ ;
+ static factory redirect1a() → self::Class
+ return new self::Class::positional();
+ static factory redirect2a(core::int a = #C13) → self::Class
+ return new self::Class::positional(a);
+ static factory redirect3a([core::int a = #C13]) → self::Class
+ return new self::Class::positional(a);
+ static factory redirect4a(core::int a = #C13, [core::int b = #C14]) → self::Class
+ return new self::Class::positional(a, b);
+ static factory redirect5a([core::int a = #C13, core::int b = #C14]) → self::Class
+ return new self::Class::positional(a, b);
+ static factory redirect6a([core::int a = #C13, core::int b = #C14]) → self::Class
+ return new self::Class::positional(a, b);
+ static factory redirect1b() → self::Class
+ return new self::Class::named();
+ static factory redirect2b({core::int a = #C13}) → self::Class
+ return new self::Class::named(a: a);
+ static factory redirect3b({core::int b = #C14}) → self::Class
+ return new self::Class::named(b: b);
+ static factory redirect4b({core::int a = #C13, core::int b = #C14}) → self::Class
+ return new self::Class::named(a: a, b: b);
+ static factory redirect5b({core::int b = #C14, core::int a = #C13}) → self::Class
+ return new self::Class::named(b: b, a: a);
+ static factory redirect6b({core::int a = #C13, core::int b = #C14}) → self::Class
+ return new self::Class::named(a: a, b: b);
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = constructor-tearoff self::Class::redirect1a
+ #C2 = constructor-tearoff self::Class::redirect2a
+ #C3 = constructor-tearoff self::Class::redirect3a
+ #C4 = constructor-tearoff self::Class::redirect4a
+ #C5 = constructor-tearoff self::Class::redirect5a
+ #C6 = constructor-tearoff self::Class::redirect6a
+ #C7 = constructor-tearoff self::Class::redirect1b
+ #C8 = constructor-tearoff self::Class::redirect2b
+ #C9 = constructor-tearoff self::Class::redirect3b
+ #C10 = constructor-tearoff self::Class::redirect4b
+ #C11 = constructor-tearoff self::Class::redirect5b
+ #C12 = constructor-tearoff self::Class::redirect6b
+ #C13 = 0
+ #C14 = 42
+}
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.modular.expect
new file mode 100644
index 0000000..f08d181
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.modular.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:12:44: Error: Can't have a default value here because any default values of 'Class.positional' would be used instead.
+// Try removing the default value.
+// factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+// ^
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:20:37: Error: Can't have a default value here because any default values of 'Class.named' would be used instead.
+// Try removing the default value.
+// factory Class.redirect6b({int a = 1, int b}) = Class.named;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8, #C9, #C10, #C11, #C12]/*isLegacy*/;
+ constructor positional([core::int a = #C13, core::int b = #C14]) → self::Class
+ : super core::Object::•()
+ ;
+ constructor named({core::int a = #C13, core::int b = #C14}) → self::Class
+ : super core::Object::•()
+ ;
+ static factory redirect1a() → self::Class
+ return new self::Class::positional();
+ static factory redirect2a(core::int a = #C13) → self::Class
+ return new self::Class::positional(a);
+ static factory redirect3a([core::int a = #C13]) → self::Class
+ return new self::Class::positional(a);
+ static factory redirect4a(core::int a = #C13, [core::int b = #C14]) → self::Class
+ return new self::Class::positional(a, b);
+ static factory redirect5a([core::int a = #C13, core::int b = #C14]) → self::Class
+ return new self::Class::positional(a, b);
+ static factory redirect6a([core::int a = #C13, core::int b = #C14]) → self::Class
+ return new self::Class::positional(a, b);
+ static factory redirect1b() → self::Class
+ return new self::Class::named();
+ static factory redirect2b({core::int a = #C13}) → self::Class
+ return new self::Class::named(a: a);
+ static factory redirect3b({core::int b = #C14}) → self::Class
+ return new self::Class::named(b: b);
+ static factory redirect4b({core::int a = #C13, core::int b = #C14}) → self::Class
+ return new self::Class::named(a: a, b: b);
+ static factory redirect5b({core::int b = #C14, core::int a = #C13}) → self::Class
+ return new self::Class::named(b: b, a: a);
+ static factory redirect6b({core::int a = #C13, core::int b = #C14}) → self::Class
+ return new self::Class::named(a: a, b: b);
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = constructor-tearoff self::Class::redirect1a
+ #C2 = constructor-tearoff self::Class::redirect2a
+ #C3 = constructor-tearoff self::Class::redirect3a
+ #C4 = constructor-tearoff self::Class::redirect4a
+ #C5 = constructor-tearoff self::Class::redirect5a
+ #C6 = constructor-tearoff self::Class::redirect6a
+ #C7 = constructor-tearoff self::Class::redirect1b
+ #C8 = constructor-tearoff self::Class::redirect2b
+ #C9 = constructor-tearoff self::Class::redirect3b
+ #C10 = constructor-tearoff self::Class::redirect4b
+ #C11 = constructor-tearoff self::Class::redirect5b
+ #C12 = constructor-tearoff self::Class::redirect6b
+ #C13 = 0
+ #C14 = 42
+}
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.outline.expect
new file mode 100644
index 0000000..cbca85f
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.outline.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::Class::redirect1a, self::Class::redirect2a, self::Class::redirect3a, self::Class::redirect4a, self::Class::redirect5a, self::Class::redirect6a, self::Class::redirect1b, self::Class::redirect2b, self::Class::redirect3b, self::Class::redirect4b, self::Class::redirect5b, self::Class::redirect6b]/*isLegacy*/;
+ constructor positional([core::int a = 0, core::int b = 42]) → self::Class
+ ;
+ constructor named({core::int a = 0, core::int b = 42}) → self::Class
+ ;
+ static factory redirect1a() → self::Class
+ return new self::Class::positional();
+ static factory redirect2a(core::int a) → self::Class
+ return new self::Class::positional(a);
+ static factory redirect3a([core::int a]) → self::Class
+ return new self::Class::positional(a);
+ static factory redirect4a(core::int a, [core::int b]) → self::Class
+ return new self::Class::positional(a, b);
+ static factory redirect5a([core::int a, core::int b]) → self::Class
+ return new self::Class::positional(a, b);
+ static factory redirect6a([core::int a, core::int b]) → self::Class
+ return new self::Class::positional(a, b);
+ static factory redirect1b() → self::Class
+ return new self::Class::named();
+ static factory redirect2b({core::int a}) → self::Class
+ return new self::Class::named(a: a);
+ static factory redirect3b({core::int b}) → self::Class
+ return new self::Class::named(b: b);
+ static factory redirect4b({core::int a, core::int b}) → self::Class
+ return new self::Class::named(a: a, b: b);
+ static factory redirect5b({core::int b, core::int a}) → self::Class
+ return new self::Class::named(b: b, a: a);
+ static factory redirect6b({core::int a, core::int b}) → self::Class
+ return new self::Class::named(a: a, b: b);
+}
+static method main() → dynamic
+ ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect1a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect2a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect3a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect4a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect5a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect6a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect1b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect2b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect3b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect4b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect5b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect6b)
+Extra constant evaluation: evaluated: 41, effectively constant: 12
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.transformed.expect
new file mode 100644
index 0000000..f08d181
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.transformed.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:12:44: Error: Can't have a default value here because any default values of 'Class.positional' would be used instead.
+// Try removing the default value.
+// factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+// ^
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:20:37: Error: Can't have a default value here because any default values of 'Class.named' would be used instead.
+// Try removing the default value.
+// factory Class.redirect6b({int a = 1, int b}) = Class.named;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8, #C9, #C10, #C11, #C12]/*isLegacy*/;
+ constructor positional([core::int a = #C13, core::int b = #C14]) → self::Class
+ : super core::Object::•()
+ ;
+ constructor named({core::int a = #C13, core::int b = #C14}) → self::Class
+ : super core::Object::•()
+ ;
+ static factory redirect1a() → self::Class
+ return new self::Class::positional();
+ static factory redirect2a(core::int a = #C13) → self::Class
+ return new self::Class::positional(a);
+ static factory redirect3a([core::int a = #C13]) → self::Class
+ return new self::Class::positional(a);
+ static factory redirect4a(core::int a = #C13, [core::int b = #C14]) → self::Class
+ return new self::Class::positional(a, b);
+ static factory redirect5a([core::int a = #C13, core::int b = #C14]) → self::Class
+ return new self::Class::positional(a, b);
+ static factory redirect6a([core::int a = #C13, core::int b = #C14]) → self::Class
+ return new self::Class::positional(a, b);
+ static factory redirect1b() → self::Class
+ return new self::Class::named();
+ static factory redirect2b({core::int a = #C13}) → self::Class
+ return new self::Class::named(a: a);
+ static factory redirect3b({core::int b = #C14}) → self::Class
+ return new self::Class::named(b: b);
+ static factory redirect4b({core::int a = #C13, core::int b = #C14}) → self::Class
+ return new self::Class::named(a: a, b: b);
+ static factory redirect5b({core::int b = #C14, core::int a = #C13}) → self::Class
+ return new self::Class::named(b: b, a: a);
+ static factory redirect6b({core::int a = #C13, core::int b = #C14}) → self::Class
+ return new self::Class::named(a: a, b: b);
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = constructor-tearoff self::Class::redirect1a
+ #C2 = constructor-tearoff self::Class::redirect2a
+ #C3 = constructor-tearoff self::Class::redirect3a
+ #C4 = constructor-tearoff self::Class::redirect4a
+ #C5 = constructor-tearoff self::Class::redirect5a
+ #C6 = constructor-tearoff self::Class::redirect6a
+ #C7 = constructor-tearoff self::Class::redirect1b
+ #C8 = constructor-tearoff self::Class::redirect2b
+ #C9 = constructor-tearoff self::Class::redirect3b
+ #C10 = constructor-tearoff self::Class::redirect4b
+ #C11 = constructor-tearoff self::Class::redirect5b
+ #C12 = constructor-tearoff self::Class::redirect6b
+ #C13 = 0
+ #C14 = 42
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.expect
index 4a74b87..1dd09f3 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.expect
@@ -16,7 +16,7 @@
constructor •([core::int field = #C2]) → self::A
: self::A::field = field, super core::Object::•()
;
- static factory redirect([core::int field]) → self::A
+ static factory redirect([core::int field = #C2]) → self::A
return new self::A::•(field);
}
static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.modular.expect
index 4a74b87..1dd09f3 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.modular.expect
@@ -16,7 +16,7 @@
constructor •([core::int field = #C2]) → self::A
: self::A::field = field, super core::Object::•()
;
- static factory redirect([core::int field]) → self::A
+ static factory redirect([core::int field = #C2]) → self::A
return new self::A::•(field);
}
static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.transformed.expect
index 4a74b87..1dd09f3 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
constructor •([core::int field = #C2]) → self::A
: self::A::field = field, super core::Object::•()
;
- static factory redirect([core::int field]) → self::A
+ static factory redirect([core::int field = #C2]) → self::A
return new self::A::•(field);
}
static method main() → dynamic {
diff --git a/pkg/frontend_server/lib/compute_kernel.dart b/pkg/frontend_server/lib/compute_kernel.dart
index f16b938..3754d31 100644
--- a/pkg/frontend_server/lib/compute_kernel.dart
+++ b/pkg/frontend_server/lib/compute_kernel.dart
@@ -24,7 +24,7 @@
import 'package:front_end/src/api_prototype/incremental_kernel_generator.dart';
import 'package:front_end/src/api_prototype/experimental_flags.dart';
import 'package:front_end/src/api_unstable/bazel_worker.dart' as fe;
-import 'package:front_end/src/fasta/kernel/macro.dart';
+import 'package:front_end/src/fasta/kernel/macro/macro.dart';
import 'package:kernel/ast.dart' show Component, Library, Reference;
import 'package:kernel/target/targets.dart';
import 'package:vm/target/flutter.dart';
diff --git a/tools/VERSION b/tools/VERSION
index 4f4bab0..90afb1e 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 17
PATCH 0
-PRERELEASE 207
+PRERELEASE 208
PRERELEASE_PATCH 0
\ No newline at end of file