[cfe] Ensure inferred parameter types on intermediate mixin application constructors

Closes #46159

Change-Id: Ice569565db68832c47cffb745faaca39defd9be2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/206641
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
Johnni Winther
2021-07-26 15:19:36 +00:00
committed by commit-bot@chromium.org
parent eb1a2166cd
commit da2f5bb22c
2 changed files with 5 additions and 3 deletions
@@ -716,7 +716,9 @@ class KernelTarget extends TargetImplementation {
Constructor? referenceFrom) {
VariableDeclaration copyFormal(VariableDeclaration formal) {
VariableDeclaration copy = new VariableDeclaration(formal.name,
isFinal: formal.isFinal, isConst: formal.isConst);
isFinal: formal.isFinal,
isConst: formal.isConst,
type: const UnknownType());
if (formal.type is! UnknownType) {
copy.type = substitute(formal.type, substitutionMap);
} else {
@@ -1424,7 +1426,7 @@ class DelayedParameterType {
void updateType() {
// ignore: unnecessary_null_comparison
assert(source.type != null, "No type computed for $source.");
assert(source.type is! UnknownType, "No type computed for $source.");
target.type = substitute(source.type, substitutionMap);
}
}
@@ -43,7 +43,7 @@ library from "org-dartlang-test:///main.dart" as main {
;
}
abstract class _A&B&C&D extends main::_A&B&C implements main::D /*isAnonymousMixin,isEliminatedMixin*/ {
synthetic constructor named(dynamic _field) → main::_A&B&C&D*
synthetic constructor named(lib::E* _field) → main::_A&B&C&D*
: super main::_A&B&C::named(_field)
;
}