[cfe] Generate tear off lowering for named mixin application constructors

Closes #47313

Change-Id: I41f822cdc026214b538e5bcf562b51a065e50904
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/215200
Reviewed-by: Chloe Stefantsova <dmitryas@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
Johnni Winther 2021-10-04 13:55:37 +00:00 committed by commit-bot@chromium.org
parent b2c2acee09
commit 81839ddcc1
28 changed files with 1629 additions and 64 deletions

View file

@ -362,7 +362,9 @@ void _createParameters(Procedure tearOff, Member constructor,
substitution.substituteType(function.returnType);
tearOff.function.requiredParameterCount = function.requiredParameterCount;
libraryBuilder.loader.registerTypeDependency(
tearOff, new TypeDependency(tearOff, constructor, substitution));
tearOff,
new TypeDependency(tearOff, constructor, substitution,
copyReturnType: true));
}
/// Creates the [Arguments] for passing the parameters from [tearOff] to its

View file

@ -53,7 +53,7 @@ class SynthesizedFunctionNode {
new CloneVisitorNotMembers(typeSubstitution: _typeSubstitution);
clonedParameter.initializer = cloner!
.clone(originalParameter.initializer!)
..parent = clonedParameter;
..parent = clonedParameter;
}
}
@ -116,8 +116,10 @@ class TypeDependency {
final Member synthesized;
final Member original;
final Substitution substitution;
final bool copyReturnType;
TypeDependency(this.synthesized, this.original, this.substitution);
TypeDependency(this.synthesized, this.original, this.substitution,
{required this.copyReturnType});
void copyInferred() {
for (int i = 0; i < original.function!.positionalParameters.length; i++) {
@ -136,7 +138,9 @@ class TypeDependency {
synthesizedParameter.type =
substitution.substituteType(originalParameter.type);
}
synthesized.function!.returnType =
substitution.substituteType(original.function!.returnType);
if (copyReturnType) {
synthesized.function!.returnType =
substitution.substituteType(original.function!.returnType);
}
}
}

View file

@ -13,7 +13,7 @@ import 'package:kernel/target/changed_structure_notifier.dart'
show ChangedStructureNotifier;
import 'package:kernel/target/targets.dart' show DiagnosticReporter, Target;
import 'package:kernel/transformations/value_class.dart' as valueClass;
import 'package:kernel/type_algebra.dart' show substitute;
import 'package:kernel/type_algebra.dart' show Substitution;
import 'package:kernel/type_environment.dart' show TypeEnvironment;
import 'package:package_config/package_config.dart' hide LanguageVersion;
@ -522,7 +522,6 @@ class KernelTarget extends TargetImplementation {
loader.checkTypes();
loader.checkRedirectingFactories(myClasses);
loader.checkMainMethods();
_updateDelayedParameterTypes();
installAllComponentProblems(loader.allComponentProblems);
loader.allComponentProblems.clear();
return component;
@ -758,17 +757,6 @@ class KernelTarget extends TargetImplementation {
ticker.logMs("Installed synthetic constructors");
}
List<DelayedParameterType> _delayedParameterTypes = <DelayedParameterType>[];
/// Update the type of parameters cloned from parameters with inferred
/// parameter types.
void _updateDelayedParameterTypes() {
for (DelayedParameterType delayedParameterType in _delayedParameterTypes) {
delayedParameterType.updateType();
}
_delayedParameterTypes.clear();
}
ClassBuilder get objectClassBuilder => objectType.declaration as ClassBuilder;
Class get objectClass => objectClassBuilder.cls;
@ -889,26 +877,29 @@ class KernelTarget extends TargetImplementation {
SyntheticConstructorBuilder _makeMixinApplicationConstructor(
SourceClassBuilder classBuilder,
Class mixin,
MemberBuilderImpl memberBuilder,
MemberBuilderImpl superConstructorBuilder,
Map<TypeParameter, DartType> substitutionMap,
Constructor? referenceFrom) {
bool hasTypeDependency = false;
Substitution substitution = Substitution.fromMap(substitutionMap);
VariableDeclaration copyFormal(VariableDeclaration formal) {
VariableDeclaration copy = new VariableDeclaration(formal.name,
isFinal: formal.isFinal,
isConst: formal.isConst,
type: const UnknownType());
if (formal.type is! UnknownType) {
copy.type = substitute(formal.type, substitutionMap);
if (!hasTypeDependency && formal.type is! UnknownType) {
copy.type = substitution.substituteType(formal.type);
} else {
_delayedParameterTypes
.add(new DelayedParameterType(formal, copy, substitutionMap));
hasTypeDependency = true;
}
return copy;
}
Class cls = classBuilder.cls;
Constructor constructor = memberBuilder.member as Constructor;
bool isConst = constructor.isConst;
Constructor superConstructor =
superConstructorBuilder.member as Constructor;
bool isConst = superConstructor.isConst;
if (isConst && mixin.fields.isNotEmpty) {
for (Field field in mixin.fields) {
if (!field.isStatic) {
@ -923,11 +914,12 @@ class KernelTarget extends TargetImplementation {
List<NamedExpression> named = <NamedExpression>[];
for (VariableDeclaration formal
in constructor.function.positionalParameters) {
in superConstructor.function.positionalParameters) {
positionalParameters.add(copyFormal(formal));
positional.add(new VariableGet(positionalParameters.last));
}
for (VariableDeclaration formal in constructor.function.namedParameters) {
for (VariableDeclaration formal
in superConstructor.function.namedParameters) {
VariableDeclaration clone = copyFormal(formal);
namedParameters.add(clone);
named.add(new NamedExpression(
@ -936,13 +928,14 @@ class KernelTarget extends TargetImplementation {
FunctionNode function = new FunctionNode(new EmptyStatement(),
positionalParameters: positionalParameters,
namedParameters: namedParameters,
requiredParameterCount: constructor.function.requiredParameterCount,
requiredParameterCount:
superConstructor.function.requiredParameterCount,
returnType: makeConstructorReturnType(cls));
SuperInitializer initializer = new SuperInitializer(
constructor, new Arguments(positional, named: named));
superConstructor, new Arguments(positional, named: named));
SynthesizedFunctionNode synthesizedFunctionNode =
new SynthesizedFunctionNode(
substitutionMap, constructor.function, function);
substitutionMap, superConstructor.function, function);
if (!isConst) {
// For constant constructors default values are computed and cloned part
// of the outline expression and therefore passed to the
@ -952,23 +945,44 @@ class KernelTarget extends TargetImplementation {
// full compilation using [synthesizedFunctionNodes].
synthesizedFunctionNodes.add(synthesizedFunctionNode);
}
Constructor constructor = new Constructor(function,
name: superConstructor.name,
initializers: <Initializer>[initializer],
isSynthetic: true,
isConst: isConst,
reference: referenceFrom?.reference,
fileUri: cls.fileUri)
// TODO(johnniwinther): Should we add file offsets to synthesized
// constructors?
//..fileOffset = cls.fileOffset
//..fileEndOffset = cls.fileOffset
..isNonNullableByDefault = cls.enclosingLibrary.isNonNullableByDefault;
if (hasTypeDependency) {
loader.registerTypeDependency(
constructor,
new TypeDependency(constructor, superConstructor, substitution,
copyReturnType: false));
}
Procedure? constructorTearOff = createConstructorTearOffProcedure(
superConstructor.name.text,
classBuilder.library,
cls.fileUri,
cls.fileOffset,
forAbstractClassOrEnum: classBuilder.isAbstract);
if (constructorTearOff != null) {
buildConstructorTearOffProcedure(constructorTearOff, constructor,
classBuilder.cls, classBuilder.library);
}
return new SyntheticConstructorBuilder(
classBuilder,
new Constructor(function,
name: constructor.name,
initializers: <Initializer>[initializer],
isSynthetic: true,
isConst: isConst,
reference: referenceFrom?.reference,
fileUri: cls.fileUri)
..isNonNullableByDefault =
cls.enclosingLibrary.isNonNullableByDefault,
null,
classBuilder, constructor, constructorTearOff,
// If the constructor is constant, the default values must be part of
// the outline expressions. We pass on the original constructor and
// cloned function nodes to ensure that the default values are computed
// and cloned for the outline.
origin: isConst ? memberBuilder : null,
origin: isConst ? superConstructorBuilder : null,
synthesizedFunctionNode: isConst ? synthesizedFunctionNode : null);
}
@ -992,10 +1006,13 @@ class KernelTarget extends TargetImplementation {
reference: referenceFrom?.reference,
fileUri: enclosingClass.fileUri)
..fileOffset = enclosingClass.fileOffset
// TODO(johnniwinther): Should we add file end offsets to synthesized
// constructors?
//..fileEndOffset = enclosingClass.fileOffset
..isNonNullableByDefault =
enclosingClass.enclosingLibrary.isNonNullableByDefault;
Procedure? constructorTearOff = createConstructorTearOffProcedure(
'', classBuilder.library, classBuilder.fileUri, constructor.fileOffset,
Procedure? constructorTearOff = createConstructorTearOffProcedure('',
classBuilder.library, enclosingClass.fileUri, enclosingClass.fileOffset,
forAbstractClassOrEnum:
enclosingClass.isAbstract || enclosingClass.isEnum);
if (constructorTearOff != null) {
@ -1599,22 +1616,3 @@ class KernelDiagnosticReporter
loader.addProblem(message, charOffset, noLength, fileUri, context: context);
}
}
/// Data for updating cloned parameters of parameters with inferred parameter
/// types.
///
/// The type of [source] is not declared so the type of [target] needs to be
/// updated when the type of [source] has been inferred.
class DelayedParameterType {
final VariableDeclaration source;
final VariableDeclaration target;
final Map<TypeParameter, DartType> substitutionMap;
DelayedParameterType(this.source, this.target, this.substitutionMap);
void updateType() {
// ignore: unnecessary_null_comparison
assert(source.type is! UnknownType, "No type computed for $source.");
target.type = substitute(source.type, substitutionMap);
}
}

View file

@ -361,7 +361,6 @@ class TypeInferrerImpl implements TypeInferrer {
}
/// Ensures that the type of [member] has been computed.
// TODO(johnniwinther): Expand this to handle lowerings.
void ensureMemberType(Member member) {
if (member is Constructor) {
inferConstructorParameterTypes(member);

View file

@ -0,0 +1,52 @@
// 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.
abstract class Interface {
int get field;
}
class Class<T> implements Interface {
var field;
Class([this.field = 0]);
Class.named(this.field);
Class.redirectingGenerative(int field) : this(field);
factory Class.fact(int field) => new Class(field);
factory Class.redirectingFactory(int field) = Class;
}
mixin Mixin<S> {}
class NamedMixinApplication<T, S> = Class<T> with Mixin<S>;
abstract class AbstractNamedMixinApplication<T, S> = Class<T> with Mixin<S>;
test() {
NamedMixinApplication.fact;
NamedMixinApplication.redirectingFactory;
AbstractNamedMixinApplication.new;
AbstractNamedMixinApplication.named;
AbstractNamedMixinApplication.redirectingGenerative;
AbstractNamedMixinApplication.fact;
AbstractNamedMixinApplication.redirectingFactory;
}
var f1 = NamedMixinApplication.new;
var f2 = NamedMixinApplication.named;
var f3 = NamedMixinApplication.redirectingGenerative;
main() {
var f1 = NamedMixinApplication.new;
var f2 = NamedMixinApplication.named;
var f3 = NamedMixinApplication.redirectingGenerative;
NamedMixinApplication<int, String>.new;
NamedMixinApplication<int, String>.named;
NamedMixinApplication<int, String>.redirectingGenerative;
NamedMixinApplication<int, String> Function([int]) n1 = f1<int, String>;
NamedMixinApplication<int, String> Function(int) n2 = f2<int, String>;
NamedMixinApplication<int, String> Function(int) n3 = f3<int, String>;
}

View file

@ -0,0 +1,145 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
// NamedMixinApplication.fact;
// ^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
// NamedMixinApplication.redirectingFactory;
// ^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.new;
// ^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.named;
// ^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.redirectingGenerative;
// ^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
// AbstractNamedMixinApplication.fact;
// ^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
// AbstractNamedMixinApplication.redirectingFactory;
// ^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
abstract class Interface extends core::Object {
synthetic constructor •() → self::Interface
: super core::Object::•()
;
abstract get field() → core::int;
}
class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
field core::int field;
static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
constructor •([core::int field = #C1]) → self::Class<self::Class::T%>
: self::Class::field = field, super core::Object::•()
;
constructor named(core::int field) → self::Class<self::Class::T%>
: self::Class::field = field, super core::Object::•()
;
constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
: this self::Class::•(field)
;
static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field = #C1]) → self::Class<self::Class::_#new#tearOff::T%>
return new self::Class::•<self::Class::_#new#tearOff::T%>(field);
static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#named#tearOff::T%>
return new self::Class::named<self::Class::_#named#tearOff::T%>(field);
static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#redirectingGenerative#tearOff::T%>
return new self::Class::redirectingGenerative<self::Class::_#redirectingGenerative#tearOff::T%>(field);
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 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%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C1) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
}
abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
}
class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
synthetic constructor •([core::int field = #C1]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
return new self::NamedMixinApplication::•<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>(field);
static method _#named#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>
return new self::NamedMixinApplication::named<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>(field);
static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>
return new self::NamedMixinApplication::redirectingGenerative<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>(field);
}
abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
synthetic constructor •([core::int field = #C1]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
}
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
static method test() → dynamic {
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
NamedMixinApplication.fact;
^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
NamedMixinApplication.redirectingFactory;
^^^^^^^^^^^^^^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.new;
^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.named;
^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.redirectingGenerative;
^^^^^^^^^^^^^^^^^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
AbstractNamedMixinApplication.fact;
^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
AbstractNamedMixinApplication.redirectingFactory;
^^^^^^^^^^^^^^^^^^";
}
static method main() → dynamic {
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
#C5;
#C6;
#C7;
([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
(core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
(core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
}
constants {
#C1 = 0
#C2 = static-tearoff self::NamedMixinApplication::_#new#tearOff
#C3 = static-tearoff self::NamedMixinApplication::_#named#tearOff
#C4 = static-tearoff self::NamedMixinApplication::_#redirectingGenerative#tearOff
#C5 = instantiation self::NamedMixinApplication::_#new#tearOff <core::int, core::String>
#C6 = instantiation self::NamedMixinApplication::_#named#tearOff <core::int, core::String>
#C7 = instantiation self::NamedMixinApplication::_#redirectingGenerative#tearOff <core::int, core::String>
}

View file

@ -0,0 +1,145 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
// NamedMixinApplication.fact;
// ^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
// NamedMixinApplication.redirectingFactory;
// ^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.new;
// ^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.named;
// ^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.redirectingGenerative;
// ^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
// AbstractNamedMixinApplication.fact;
// ^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
// AbstractNamedMixinApplication.redirectingFactory;
// ^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
abstract class Interface extends core::Object {
synthetic constructor •() → self::Interface
: super core::Object::•()
;
abstract get field() → core::int;
}
class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
field core::int field;
static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
constructor •([core::int field = #C1]) → self::Class<self::Class::T%>
: self::Class::field = field, super core::Object::•()
;
constructor named(core::int field) → self::Class<self::Class::T%>
: self::Class::field = field, super core::Object::•()
;
constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
: this self::Class::•(field)
;
static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field = #C1]) → self::Class<self::Class::_#new#tearOff::T%>
return new self::Class::•<self::Class::_#new#tearOff::T%>(field);
static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#named#tearOff::T%>
return new self::Class::named<self::Class::_#named#tearOff::T%>(field);
static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#redirectingGenerative#tearOff::T%>
return new self::Class::redirectingGenerative<self::Class::_#redirectingGenerative#tearOff::T%>(field);
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 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%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C1) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
}
abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
}
class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::NamedMixinApplication::T%> implements self::Mixin<self::NamedMixinApplication::S%> /*isEliminatedMixin*/ {
synthetic constructor •([core::int field = #C1]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
return new self::NamedMixinApplication::•<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>(field);
static method _#named#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>
return new self::NamedMixinApplication::named<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>(field);
static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>
return new self::NamedMixinApplication::redirectingGenerative<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>(field);
}
abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::AbstractNamedMixinApplication::T%> implements self::Mixin<self::AbstractNamedMixinApplication::S%> /*isEliminatedMixin*/ {
synthetic constructor •([core::int field = #C1]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
}
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
static method test() → dynamic {
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
NamedMixinApplication.fact;
^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
NamedMixinApplication.redirectingFactory;
^^^^^^^^^^^^^^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.new;
^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.named;
^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.redirectingGenerative;
^^^^^^^^^^^^^^^^^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
AbstractNamedMixinApplication.fact;
^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
AbstractNamedMixinApplication.redirectingFactory;
^^^^^^^^^^^^^^^^^^";
}
static method main() → dynamic {
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
#C5;
#C6;
#C7;
([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
(core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
(core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
}
constants {
#C1 = 0
#C2 = static-tearoff self::NamedMixinApplication::_#new#tearOff
#C3 = static-tearoff self::NamedMixinApplication::_#named#tearOff
#C4 = static-tearoff self::NamedMixinApplication::_#redirectingGenerative#tearOff
#C5 = instantiation self::NamedMixinApplication::_#new#tearOff <core::int, core::String>
#C6 = instantiation self::NamedMixinApplication::_#named#tearOff <core::int, core::String>
#C7 = instantiation self::NamedMixinApplication::_#redirectingGenerative#tearOff <core::int, core::String>
}

View file

@ -0,0 +1,21 @@
abstract class Interface {
int get field;
}
class Class<T> implements Interface {
var field;
Class([this.field = 0]);
Class.named(this.field);
Class.redirectingGenerative(int field) : this(field);
factory Class.fact(int field) => new Class(field);
factory Class.redirectingFactory(int field) = Class;
}
mixin Mixin<S> {}
class NamedMixinApplication<T, S> = Class<T> with Mixin<S>;
abstract class AbstractNamedMixinApplication<T, S> = Class<T> with Mixin<S>;
test() {}
var f1 = NamedMixinApplication.new;
var f2 = NamedMixinApplication.named;
var f3 = NamedMixinApplication.redirectingGenerative;
main() {}

View file

@ -0,0 +1,22 @@
abstract class AbstractNamedMixinApplication<T, S> = Class<T> with Mixin<S>;
abstract class Interface {
int get field;
}
class Class<T> implements Interface {
Class([this.field = 0]);
Class.named(this.field);
Class.redirectingGenerative(int field) : this(field);
factory Class.fact(int field) => new Class(field);
factory Class.redirectingFactory(int field) = Class;
var field;
}
class NamedMixinApplication<T, S> = Class<T> with Mixin<S>;
main() {}
mixin Mixin<S> {}
test() {}
var f1 = NamedMixinApplication.new;
var f2 = NamedMixinApplication.named;
var f3 = NamedMixinApplication.redirectingGenerative;

View file

@ -0,0 +1,145 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
// NamedMixinApplication.fact;
// ^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
// NamedMixinApplication.redirectingFactory;
// ^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.new;
// ^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.named;
// ^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.redirectingGenerative;
// ^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
// AbstractNamedMixinApplication.fact;
// ^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
// AbstractNamedMixinApplication.redirectingFactory;
// ^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
abstract class Interface extends core::Object {
synthetic constructor •() → self::Interface
: super core::Object::•()
;
abstract get field() → core::int;
}
class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
field core::int field;
static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
constructor •([core::int field = #C1]) → self::Class<self::Class::T%>
: self::Class::field = field, super core::Object::•()
;
constructor named(core::int field) → self::Class<self::Class::T%>
: self::Class::field = field, super core::Object::•()
;
constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
: this self::Class::•(field)
;
static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field = #C1]) → self::Class<self::Class::_#new#tearOff::T%>
return new self::Class::•<self::Class::_#new#tearOff::T%>(field);
static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#named#tearOff::T%>
return new self::Class::named<self::Class::_#named#tearOff::T%>(field);
static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#redirectingGenerative#tearOff::T%>
return new self::Class::redirectingGenerative<self::Class::_#redirectingGenerative#tearOff::T%>(field);
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 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%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C1) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
}
abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
}
class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
synthetic constructor •([core::int field = #C1]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
return new self::NamedMixinApplication::•<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>(field);
static method _#named#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>
return new self::NamedMixinApplication::named<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>(field);
static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>
return new self::NamedMixinApplication::redirectingGenerative<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>(field);
}
abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
synthetic constructor •([core::int field = #C1]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
}
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
static method test() → dynamic {
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
NamedMixinApplication.fact;
^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
NamedMixinApplication.redirectingFactory;
^^^^^^^^^^^^^^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.new;
^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.named;
^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.redirectingGenerative;
^^^^^^^^^^^^^^^^^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
AbstractNamedMixinApplication.fact;
^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
AbstractNamedMixinApplication.redirectingFactory;
^^^^^^^^^^^^^^^^^^";
}
static method main() → dynamic {
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
#C5;
#C6;
#C7;
([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
(core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
(core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
}
constants {
#C1 = 0
#C2 = static-tearoff self::NamedMixinApplication::_#new#tearOff
#C3 = static-tearoff self::NamedMixinApplication::_#named#tearOff
#C4 = static-tearoff self::NamedMixinApplication::_#redirectingGenerative#tearOff
#C5 = instantiation self::NamedMixinApplication::_#new#tearOff <core::int*, core::String*>
#C6 = instantiation self::NamedMixinApplication::_#named#tearOff <core::int*, core::String*>
#C7 = instantiation self::NamedMixinApplication::_#redirectingGenerative#tearOff <core::int*, core::String*>
}

View file

@ -0,0 +1,70 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
abstract class Interface extends core::Object {
synthetic constructor •() → self::Interface
;
abstract get field() → core::int;
}
class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
field core::int field;
static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
constructor •([core::int field]) → self::Class<self::Class::T%>
;
constructor named(core::int field) → self::Class<self::Class::T%>
;
constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
;
static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field]) → self::Class<self::Class::_#new#tearOff::T%>
return new self::Class::•<self::Class::_#new#tearOff::T%>(field);
static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#named#tearOff::T%>
return new self::Class::named<self::Class::_#named#tearOff::T%>(field);
static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#redirectingGenerative#tearOff::T%>
return new self::Class::redirectingGenerative<self::Class::_#redirectingGenerative#tearOff::T%>(field);
static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
;
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%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
}
abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
}
class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
synthetic constructor •([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
return new self::NamedMixinApplication::•<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>(field);
static method _#named#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>
return new self::NamedMixinApplication::named<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>(field);
static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>
return new self::NamedMixinApplication::redirectingGenerative<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>(field);
}
abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
synthetic constructor •([core::int field]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
}
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3;
static method test() → dynamic
;
static method main() → dynamic
;

View file

@ -0,0 +1,145 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
// NamedMixinApplication.fact;
// ^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
// NamedMixinApplication.redirectingFactory;
// ^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.new;
// ^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.named;
// ^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.redirectingGenerative;
// ^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
// AbstractNamedMixinApplication.fact;
// ^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
// AbstractNamedMixinApplication.redirectingFactory;
// ^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
abstract class Interface extends core::Object {
synthetic constructor •() → self::Interface
: super core::Object::•()
;
abstract get field() → core::int;
}
class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
field core::int field;
static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
constructor •([core::int field = #C1]) → self::Class<self::Class::T%>
: self::Class::field = field, super core::Object::•()
;
constructor named(core::int field) → self::Class<self::Class::T%>
: self::Class::field = field, super core::Object::•()
;
constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
: this self::Class::•(field)
;
static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field = #C1]) → self::Class<self::Class::_#new#tearOff::T%>
return new self::Class::•<self::Class::_#new#tearOff::T%>(field);
static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#named#tearOff::T%>
return new self::Class::named<self::Class::_#named#tearOff::T%>(field);
static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#redirectingGenerative#tearOff::T%>
return new self::Class::redirectingGenerative<self::Class::_#redirectingGenerative#tearOff::T%>(field);
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 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%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C1) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
}
abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
}
class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::NamedMixinApplication::T%> implements self::Mixin<self::NamedMixinApplication::S%> /*isEliminatedMixin*/ {
synthetic constructor •([core::int field = #C1]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
return new self::NamedMixinApplication::•<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>(field);
static method _#named#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>
return new self::NamedMixinApplication::named<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>(field);
static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>
return new self::NamedMixinApplication::redirectingGenerative<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>(field);
}
abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::AbstractNamedMixinApplication::T%> implements self::Mixin<self::AbstractNamedMixinApplication::S%> /*isEliminatedMixin*/ {
synthetic constructor •([core::int field = #C1]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
}
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
static method test() → dynamic {
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
NamedMixinApplication.fact;
^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
NamedMixinApplication.redirectingFactory;
^^^^^^^^^^^^^^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.new;
^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.named;
^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.redirectingGenerative;
^^^^^^^^^^^^^^^^^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
AbstractNamedMixinApplication.fact;
^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
AbstractNamedMixinApplication.redirectingFactory;
^^^^^^^^^^^^^^^^^^";
}
static method main() → dynamic {
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
#C5;
#C6;
#C7;
([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
(core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
(core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
}
constants {
#C1 = 0
#C2 = static-tearoff self::NamedMixinApplication::_#new#tearOff
#C3 = static-tearoff self::NamedMixinApplication::_#named#tearOff
#C4 = static-tearoff self::NamedMixinApplication::_#redirectingGenerative#tearOff
#C5 = instantiation self::NamedMixinApplication::_#new#tearOff <core::int*, core::String*>
#C6 = instantiation self::NamedMixinApplication::_#named#tearOff <core::int*, core::String*>
#C7 = instantiation self::NamedMixinApplication::_#redirectingGenerative#tearOff <core::int*, core::String*>
}

View file

@ -0,0 +1,52 @@
// 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.
abstract class Interface {
int get field;
}
class Class<T> implements Interface {
var field;
Class([this.field = 0]);
Class.named(this.field);
Class.redirectingGenerative(int field) : this(field);
factory Class.fact(int field) => new Class(field);
factory Class.redirectingFactory(int field) = Class;
}
mixin Mixin<S> {}
class NamedMixinApplication<T, S> = Class<T> with Mixin<S>;
abstract class AbstractNamedMixinApplication<T, S> = Class<T> with Mixin<S>;
test() {
NamedMixinApplication.fact;
NamedMixinApplication.redirectingFactory;
AbstractNamedMixinApplication.new;
AbstractNamedMixinApplication.named;
AbstractNamedMixinApplication.redirectingGenerative;
AbstractNamedMixinApplication.fact;
AbstractNamedMixinApplication.redirectingFactory;
}
var f1 = NamedMixinApplication.new;
var f2 = NamedMixinApplication.named;
var f3 = NamedMixinApplication.redirectingGenerative;
main() {
var f1 = NamedMixinApplication.new;
var f2 = NamedMixinApplication.named;
var f3 = NamedMixinApplication.redirectingGenerative;
NamedMixinApplication<int, String>.new;
NamedMixinApplication<int, String>.named;
NamedMixinApplication<int, String>.redirectingGenerative;
NamedMixinApplication<int, String> Function([int]) n1 = f1<int, String>;
NamedMixinApplication<int, String> Function(int) n2 = f2<int, String>;
NamedMixinApplication<int, String> Function(int) n3 = f3<int, String>;
}

View file

@ -0,0 +1,129 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
// NamedMixinApplication.fact;
// ^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
// NamedMixinApplication.redirectingFactory;
// ^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.new;
// ^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.named;
// ^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.redirectingGenerative;
// ^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
// AbstractNamedMixinApplication.fact;
// ^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
// AbstractNamedMixinApplication.redirectingFactory;
// ^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
abstract class Interface extends core::Object {
synthetic constructor •() → self::Interface
: super core::Object::•()
;
abstract get field() → core::int;
}
class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
field core::int field;
static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
constructor •([core::int field = #C1]) → self::Class<self::Class::T%>
: self::Class::field = field, super core::Object::•()
;
constructor named(core::int field) → self::Class<self::Class::T%>
: self::Class::field = field, super core::Object::•()
;
constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
: this self::Class::•(field)
;
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%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
}
abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
}
class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
synthetic constructor •([core::int field = #C1]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
}
abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
synthetic constructor •([core::int field = #C1]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
}
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
static method test() → dynamic {
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
NamedMixinApplication.fact;
^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
NamedMixinApplication.redirectingFactory;
^^^^^^^^^^^^^^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.new;
^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.named;
^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.redirectingGenerative;
^^^^^^^^^^^^^^^^^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
AbstractNamedMixinApplication.fact;
^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
AbstractNamedMixinApplication.redirectingFactory;
^^^^^^^^^^^^^^^^^^";
}
static method main() → dynamic {
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
#C5;
#C6;
#C7;
([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
(core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
(core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
}
constants {
#C1 = 0
#C2 = constructor-tearoff self::NamedMixinApplication::•
#C3 = constructor-tearoff self::NamedMixinApplication::named
#C4 = constructor-tearoff self::NamedMixinApplication::redirectingGenerative
#C5 = instantiation self::NamedMixinApplication::• <core::int, core::String>
#C6 = instantiation self::NamedMixinApplication::named <core::int, core::String>
#C7 = instantiation self::NamedMixinApplication::redirectingGenerative <core::int, core::String>
}

View file

@ -0,0 +1,129 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
// NamedMixinApplication.fact;
// ^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
// NamedMixinApplication.redirectingFactory;
// ^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.new;
// ^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.named;
// ^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.redirectingGenerative;
// ^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
// AbstractNamedMixinApplication.fact;
// ^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
// AbstractNamedMixinApplication.redirectingFactory;
// ^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
abstract class Interface extends core::Object {
synthetic constructor •() → self::Interface
: super core::Object::•()
;
abstract get field() → core::int;
}
class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
field core::int field;
static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
constructor •([core::int field = #C1]) → self::Class<self::Class::T%>
: self::Class::field = field, super core::Object::•()
;
constructor named(core::int field) → self::Class<self::Class::T%>
: self::Class::field = field, super core::Object::•()
;
constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
: this self::Class::•(field)
;
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%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
}
abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
}
class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::NamedMixinApplication::T%> implements self::Mixin<self::NamedMixinApplication::S%> /*isEliminatedMixin*/ {
synthetic constructor •([core::int field = #C1]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
}
abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::AbstractNamedMixinApplication::T%> implements self::Mixin<self::AbstractNamedMixinApplication::S%> /*isEliminatedMixin*/ {
synthetic constructor •([core::int field = #C1]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
}
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
static method test() → dynamic {
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
NamedMixinApplication.fact;
^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
NamedMixinApplication.redirectingFactory;
^^^^^^^^^^^^^^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.new;
^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.named;
^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.redirectingGenerative;
^^^^^^^^^^^^^^^^^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
AbstractNamedMixinApplication.fact;
^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
AbstractNamedMixinApplication.redirectingFactory;
^^^^^^^^^^^^^^^^^^";
}
static method main() → dynamic {
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
#C5;
#C6;
#C7;
([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
(core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
(core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
}
constants {
#C1 = 0
#C2 = constructor-tearoff self::NamedMixinApplication::•
#C3 = constructor-tearoff self::NamedMixinApplication::named
#C4 = constructor-tearoff self::NamedMixinApplication::redirectingGenerative
#C5 = instantiation self::NamedMixinApplication::• <core::int, core::String>
#C6 = instantiation self::NamedMixinApplication::named <core::int, core::String>
#C7 = instantiation self::NamedMixinApplication::redirectingGenerative <core::int, core::String>
}

View file

@ -0,0 +1,21 @@
abstract class Interface {
int get field;
}
class Class<T> implements Interface {
var field;
Class([this.field = 0]);
Class.named(this.field);
Class.redirectingGenerative(int field) : this(field);
factory Class.fact(int field) => new Class(field);
factory Class.redirectingFactory(int field) = Class;
}
mixin Mixin<S> {}
class NamedMixinApplication<T, S> = Class<T> with Mixin<S>;
abstract class AbstractNamedMixinApplication<T, S> = Class<T> with Mixin<S>;
test() {}
var f1 = NamedMixinApplication.new;
var f2 = NamedMixinApplication.named;
var f3 = NamedMixinApplication.redirectingGenerative;
main() {}

View file

@ -0,0 +1,22 @@
abstract class AbstractNamedMixinApplication<T, S> = Class<T> with Mixin<S>;
abstract class Interface {
int get field;
}
class Class<T> implements Interface {
Class([this.field = 0]);
Class.named(this.field);
Class.redirectingGenerative(int field) : this(field);
factory Class.fact(int field) => new Class(field);
factory Class.redirectingFactory(int field) = Class;
var field;
}
class NamedMixinApplication<T, S> = Class<T> with Mixin<S>;
main() {}
mixin Mixin<S> {}
test() {}
var f1 = NamedMixinApplication.new;
var f2 = NamedMixinApplication.named;
var f3 = NamedMixinApplication.redirectingGenerative;

View file

@ -0,0 +1,129 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
// NamedMixinApplication.fact;
// ^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
// NamedMixinApplication.redirectingFactory;
// ^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.new;
// ^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.named;
// ^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.redirectingGenerative;
// ^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
// AbstractNamedMixinApplication.fact;
// ^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
// AbstractNamedMixinApplication.redirectingFactory;
// ^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
abstract class Interface extends core::Object {
synthetic constructor •() → self::Interface
: super core::Object::•()
;
abstract get field() → core::int;
}
class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
field core::int field;
static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
constructor •([core::int field = #C1]) → self::Class<self::Class::T%>
: self::Class::field = field, super core::Object::•()
;
constructor named(core::int field) → self::Class<self::Class::T%>
: self::Class::field = field, super core::Object::•()
;
constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
: this self::Class::•(field)
;
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%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
}
abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
}
class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
synthetic constructor •([core::int field = #C1]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
}
abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
synthetic constructor •([core::int field = #C1]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
}
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
static method test() → dynamic {
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
NamedMixinApplication.fact;
^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
NamedMixinApplication.redirectingFactory;
^^^^^^^^^^^^^^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.new;
^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.named;
^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.redirectingGenerative;
^^^^^^^^^^^^^^^^^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
AbstractNamedMixinApplication.fact;
^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
AbstractNamedMixinApplication.redirectingFactory;
^^^^^^^^^^^^^^^^^^";
}
static method main() → dynamic {
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
#C5;
#C6;
#C7;
([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
(core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
(core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
}
constants {
#C1 = 0
#C2 = constructor-tearoff self::NamedMixinApplication::•
#C3 = constructor-tearoff self::NamedMixinApplication::named
#C4 = constructor-tearoff self::NamedMixinApplication::redirectingGenerative
#C5 = instantiation self::NamedMixinApplication::• <core::int*, core::String*>
#C6 = instantiation self::NamedMixinApplication::named <core::int*, core::String*>
#C7 = instantiation self::NamedMixinApplication::redirectingGenerative <core::int*, core::String*>
}

View file

@ -0,0 +1,54 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
abstract class Interface extends core::Object {
synthetic constructor •() → self::Interface
;
abstract get field() → core::int;
}
class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
field core::int field;
static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
constructor •([core::int field]) → self::Class<self::Class::T%>
;
constructor named(core::int field) → self::Class<self::Class::T%>
;
constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
;
static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
;
static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → 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*/ {
}
class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
synthetic constructor •([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
}
abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
synthetic constructor •([core::int field]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
}
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3;
static method test() → dynamic
;
static method main() → dynamic
;

View file

@ -0,0 +1,129 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
// NamedMixinApplication.fact;
// ^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
// NamedMixinApplication.redirectingFactory;
// ^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.new;
// ^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.named;
// ^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
// AbstractNamedMixinApplication.redirectingGenerative;
// ^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
// AbstractNamedMixinApplication.fact;
// ^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
// AbstractNamedMixinApplication.redirectingFactory;
// ^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
abstract class Interface extends core::Object {
synthetic constructor •() → self::Interface
: super core::Object::•()
;
abstract get field() → core::int;
}
class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
field core::int field;
static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
constructor •([core::int field = #C1]) → self::Class<self::Class::T%>
: self::Class::field = field, super core::Object::•()
;
constructor named(core::int field) → self::Class<self::Class::T%>
: self::Class::field = field, super core::Object::•()
;
constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
: this self::Class::•(field)
;
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%>
return new self::Class::•<self::Class::redirectingFactory::T%>(field);
}
abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ {
}
class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::NamedMixinApplication::T%> implements self::Mixin<self::NamedMixinApplication::S%> /*isEliminatedMixin*/ {
synthetic constructor •([core::int field = #C1]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
}
abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::AbstractNamedMixinApplication::T%> implements self::Mixin<self::AbstractNamedMixinApplication::S%> /*isEliminatedMixin*/ {
synthetic constructor •([core::int field = #C1]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::•(field)
;
synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::named(field)
;
synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
: super self::Class::redirectingGenerative(field)
;
}
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
static method test() → dynamic {
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
NamedMixinApplication.fact;
^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
NamedMixinApplication.redirectingFactory;
^^^^^^^^^^^^^^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.new;
^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.named;
^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
AbstractNamedMixinApplication.redirectingGenerative;
^^^^^^^^^^^^^^^^^^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
AbstractNamedMixinApplication.fact;
^^^^";
invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
AbstractNamedMixinApplication.redirectingFactory;
^^^^^^^^^^^^^^^^^^";
}
static method main() → dynamic {
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
#C5;
#C6;
#C7;
([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
(core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
(core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
}
constants {
#C1 = 0
#C2 = constructor-tearoff self::NamedMixinApplication::•
#C3 = constructor-tearoff self::NamedMixinApplication::named
#C4 = constructor-tearoff self::NamedMixinApplication::redirectingGenerative
#C5 = instantiation self::NamedMixinApplication::• <core::int*, core::String*>
#C6 = instantiation self::NamedMixinApplication::named <core::int*, core::String*>
#C7 = instantiation self::NamedMixinApplication::redirectingGenerative <core::int*, core::String*>
}

View file

@ -0,0 +1,13 @@
// 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.
class A<X> {}
mixin M {}
class C<X> = A<X> with M;
main() {
C.new;
}

View file

@ -0,0 +1,27 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class A<X extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() → self::A<self::A::X%>
: super core::Object::•()
;
static method _#new#tearOff<X extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::X%>
return new self::A::•<self::A::_#new#tearOff::X%>();
}
abstract class M extends core::Object /*isMixinDeclaration*/ {
}
class C<X extends core::Object? = dynamic> = self::A<self::C::X%> with self::M {
synthetic constructor •() → self::C<self::C::X%>
: super self::A::•()
;
static method _#new#tearOff<X extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::X%>
return new self::C::•<self::C::_#new#tearOff::X%>();
}
static method main() → dynamic {
#C1;
}
constants {
#C1 = static-tearoff self::C::_#new#tearOff
}

View file

@ -0,0 +1,27 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class A<X extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() → self::A<self::A::X%>
: super core::Object::•()
;
static method _#new#tearOff<X extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::X%>
return new self::A::•<self::A::_#new#tearOff::X%>();
}
abstract class M extends core::Object /*isMixinDeclaration*/ {
}
class C<X extends core::Object? = dynamic> = self::A<self::C::X%> with self::M {
synthetic constructor •() → self::C<self::C::X%>
: super self::A::•()
;
static method _#new#tearOff<X extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::X%>
return new self::C::•<self::C::_#new#tearOff::X%>();
}
static method main() → dynamic {
#C1;
}
constants {
#C1 = static-tearoff self::C::_#new#tearOff
}

View file

@ -0,0 +1,5 @@
class A<X> {}
mixin M {}
class C<X> = A<X> with M;
main() {}

View file

@ -0,0 +1,5 @@
class A<X> {}
class C<X> = A<X> with M;
main() {}
mixin M {}

View file

@ -0,0 +1,27 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class A<X extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() → self::A<self::A::X%>
: super core::Object::•()
;
static method _#new#tearOff<X extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::X%>
return new self::A::•<self::A::_#new#tearOff::X%>();
}
abstract class M extends core::Object /*isMixinDeclaration*/ {
}
class C<X extends core::Object? = dynamic> = self::A<self::C::X%> with self::M {
synthetic constructor •() → self::C<self::C::X%>
: super self::A::•()
;
static method _#new#tearOff<X extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::X%>
return new self::C::•<self::C::_#new#tearOff::X%>();
}
static method main() → dynamic {
#C1;
}
constants {
#C1 = static-tearoff self::C::_#new#tearOff
}

View file

@ -0,0 +1,21 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class A<X extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() → self::A<self::A::X%>
;
static method _#new#tearOff<X extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::X%>
return new self::A::•<self::A::_#new#tearOff::X%>();
}
abstract class M extends core::Object /*isMixinDeclaration*/ {
}
class C<X extends core::Object? = dynamic> = self::A<self::C::X%> with self::M {
synthetic constructor •() → self::C<self::C::X%>
: super self::A::•()
;
static method _#new#tearOff<X extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::X%>
return new self::C::•<self::C::_#new#tearOff::X%>();
}
static method main() → dynamic
;

View file

@ -0,0 +1,27 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class A<X extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() → self::A<self::A::X%>
: super core::Object::•()
;
static method _#new#tearOff<X extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::X%>
return new self::A::•<self::A::_#new#tearOff::X%>();
}
abstract class M extends core::Object /*isMixinDeclaration*/ {
}
class C<X extends core::Object? = dynamic> = self::A<self::C::X%> with self::M {
synthetic constructor •() → self::C<self::C::X%>
: super self::A::•()
;
static method _#new#tearOff<X extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::X%>
return new self::C::•<self::C::_#new#tearOff::X%>();
}
static method main() → dynamic {
#C1;
}
constants {
#C1 = static-tearoff self::C::_#new#tearOff
}