mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 09:22:12 +00:00
[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:
parent
b2c2acee09
commit
81839ddcc1
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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>;
|
||||
}
|
|
@ -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>
|
||||
}
|
|
@ -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>
|
||||
}
|
|
@ -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() {}
|
|
@ -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;
|
|
@ -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*>
|
||||
}
|
|
@ -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
|
||||
;
|
|
@ -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*>
|
||||
}
|
|
@ -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>;
|
||||
}
|
|
@ -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>
|
||||
}
|
|
@ -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>
|
||||
}
|
|
@ -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() {}
|
|
@ -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;
|
|
@ -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*>
|
||||
}
|
|
@ -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
|
||||
;
|
|
@ -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*>
|
||||
}
|
13
pkg/front_end/testcases/dartdevc/issue47313.dart
Normal file
13
pkg/front_end/testcases/dartdevc/issue47313.dart
Normal 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;
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
class A<X> {}
|
||||
|
||||
mixin M {}
|
||||
class C<X> = A<X> with M;
|
||||
main() {}
|
|
@ -0,0 +1,5 @@
|
|||
class A<X> {}
|
||||
|
||||
class C<X> = A<X> with M;
|
||||
main() {}
|
||||
mixin M {}
|
27
pkg/front_end/testcases/dartdevc/issue47313.dart.weak.expect
Normal file
27
pkg/front_end/testcases/dartdevc/issue47313.dart.weak.expect
Normal 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
|
||||
}
|
|
@ -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
|
||||
;
|
|
@ -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
|
||||
}
|
Loading…
Reference in a new issue