Skip to content

Commit

Permalink
Version 3.2.0-235.0.dev
Browse files Browse the repository at this point in the history
Merge 81b7e4e into dev
  • Loading branch information
Dart CI committed Oct 5, 2023
2 parents fcdb6ff + 81b7e4e commit b57aec1
Show file tree
Hide file tree
Showing 98 changed files with 657 additions and 243 deletions.
15 changes: 12 additions & 3 deletions pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

import 'package:kernel/ast.dart';

import 'package:kernel/clone.dart' show CloneVisitorNotMembers;

import 'package:kernel/core_types.dart' show CoreTypes;

import 'package:kernel/type_algebra.dart';
Expand Down Expand Up @@ -634,13 +636,16 @@ class CombinedClassMemberSignature {
FreshTypeParametersFromStructuralParameters freshTypeParameters =
getFreshTypeParametersFromStructuralParameters(
functionType.typeParameters);
CloneVisitorNotMembers cloner = new CloneVisitorNotMembers();
for (int i = 0; i < function.positionalParameters.length; i++) {
VariableDeclaration parameter = function.positionalParameters[i];
DartType parameterType =
freshTypeParameters.substitute(functionType.positionalParameters[i]);
positionalParameters.add(new VariableDeclaration(parameter.name,
type: parameterType,
isCovariantByDeclaration: parameter.isCovariantByDeclaration)
isCovariantByDeclaration: parameter.isCovariantByDeclaration,
initializer: cloner.cloneOptional(parameter.initializer))
..hasDeclaredInitializer = parameter.hasDeclaredInitializer
..isCovariantByClass = parameter.isCovariantByClass
..fileOffset = copyLocation ? parameter.fileOffset : fileOffset);
}
Expand All @@ -652,7 +657,9 @@ class CombinedClassMemberSignature {
namedParameters.add(new VariableDeclaration(parameter.name,
type: freshTypeParameters.substitute(namedType.type),
isRequired: namedType.isRequired,
isCovariantByDeclaration: parameter.isCovariantByDeclaration)
isCovariantByDeclaration: parameter.isCovariantByDeclaration,
initializer: cloner.cloneOptional(parameter.initializer))
..hasDeclaredInitializer = parameter.hasDeclaredInitializer
..isCovariantByClass = parameter.isCovariantByClass
..fileOffset = copyLocation ? parameter.fileOffset : fileOffset);
} else if (namedParameterCount > 1) {
Expand All @@ -666,7 +673,9 @@ class CombinedClassMemberSignature {
namedParameters.add(new VariableDeclaration(parameter.name,
type: freshTypeParameters.substitute(namedParameterType.type),
isRequired: namedParameterType.isRequired,
isCovariantByDeclaration: parameter.isCovariantByDeclaration)
isCovariantByDeclaration: parameter.isCovariantByDeclaration,
initializer: cloner.cloneOptional(parameter.initializer))
..hasDeclaredInitializer = parameter.hasDeclaredInitializer
..isCovariantByClass = parameter.isCovariantByClass
..fileOffset = copyLocation ? parameter.fileOffset : fileOffset);
}
Expand Down
43 changes: 43 additions & 0 deletions pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
Original file line number Diff line number Diff line change
Expand Up @@ -447,6 +447,49 @@ class ForwardingNode {
..fileOffset = procedure.fileOffset;
}
}

FunctionType signatureType = procedure.function
.computeFunctionType(procedure.enclosingLibrary.nonNullable);
List<VariableDeclaration> positionalParameters =
procedure.function.positionalParameters;
List<VariableDeclaration> namedParameters =
procedure.function.namedParameters;
int requiredParameterCount = procedure.function.requiredParameterCount;
bool hasUpdate = false;
bool updateNullability(VariableDeclaration parameter,
{required bool isRequired}) {
// Parameters in nnbd libraries that backends might not be able to pass
// a non-null value for must be nullable. This allows backends to do the
// appropriate parameter checks in the forwarder stub for null placeholder
// arguments. Covariance indicates the type must stay the same.
return !(isRequired ||
parameter.hasDeclaredInitializer ||
parameter.isCovariantByDeclaration ||
parameter.isCovariantByClass) &&
libraryBuilder.isNonNullableByDefault &&
parameter.type.nullability != Nullability.nullable;
}

for (int i = 0; i < positionalParameters.length; i++) {
VariableDeclaration parameter = positionalParameters[i];
bool isRequired = i < requiredParameterCount;
if (updateNullability(parameter, isRequired: isRequired)) {
parameter.type =
parameter.type.withDeclaredNullability(Nullability.nullable);
hasUpdate = true;
}
}

for (VariableDeclaration parameter in namedParameters) {
if (updateNullability(parameter, isRequired: parameter.isRequired)) {
parameter.type =
parameter.type.withDeclaredNullability(Nullability.nullable);
hasUpdate = true;
}
}
if (hasUpdate) {
procedure.signatureType = signatureType;
}
procedure.function.body = new ReturnStatement(result)
..fileOffset = procedure.fileOffset
..parent = procedure.function;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ class C1 extends core::Object implements self::C {
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} Null;
no-such-method-forwarder operator +(core::double other) → core::double
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("+", <dynamic>[], <dynamic>[other], #C3, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::double;
no-such-method-forwarder method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C2]) → core::Map<self::C, self::C>
no-such-method-forwarder method /* signature-type: (self::C, [core::Set<core::Set<self::C>>]) → core::Map<self::C, self::C> */ m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>>? arg2 = #C2]) → core::Map<self::C, self::C>
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m1", <dynamic>[], <dynamic>[arg1, arg2], #C3, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::Map<self::C, self::C>;
no-such-method-forwarder method m2({dynamic arg1 = #C2, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C2}) → void
no-such-method-forwarder method /* signature-type: ({arg1: dynamic, arg2: ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic>}) → void */ m2({dynamic arg1 = #C2, ((dynamic) → dynamic, dynamic) →? core::Map<dynamic, dynamic> arg2 = #C2}) → void
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m2", <dynamic>[], <dynamic>[], <core::String, dynamic>{"arg1": arg1, "arg2": arg2}, 0)){(core::Invocation) → dynamic};
}
class D extends core::Object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ class C1 extends core::Object implements self::C {
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} Null;
no-such-method-forwarder operator +(core::double other) → core::double
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("+", <dynamic>[], <dynamic>[other], #C3, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::double;
no-such-method-forwarder method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C2]) → core::Map<self::C, self::C>
no-such-method-forwarder method /* signature-type: (self::C, [core::Set<core::Set<self::C>>]) → core::Map<self::C, self::C> */ m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>>? arg2 = #C2]) → core::Map<self::C, self::C>
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m1", <dynamic>[], <dynamic>[arg1, arg2], #C3, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::Map<self::C, self::C>;
no-such-method-forwarder method m2({dynamic arg1 = #C2, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C2}) → void
no-such-method-forwarder method /* signature-type: ({arg1: dynamic, arg2: ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic>}) → void */ m2({dynamic arg1 = #C2, ((dynamic) → dynamic, dynamic) →? core::Map<dynamic, dynamic> arg2 = #C2}) → void
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m2", <dynamic>[], <dynamic>[], <core::String, dynamic>{"arg1": arg1, "arg2": arg2}, 0)){(core::Invocation) → dynamic};
}
class D extends core::Object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ class C1 extends core::Object implements self::C {
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} Null;
no-such-method-forwarder operator +(core::double other) → core::double
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("+", <dynamic>[], <dynamic>[other], #C3, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::double;
no-such-method-forwarder method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C2]) → core::Map<self::C, self::C>
no-such-method-forwarder method /* signature-type: (self::C, [core::Set<core::Set<self::C>>]) → core::Map<self::C, self::C> */ m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>>? arg2 = #C2]) → core::Map<self::C, self::C>
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m1", <dynamic>[], <dynamic>[arg1, arg2], #C3, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::Map<self::C, self::C>;
no-such-method-forwarder method m2({dynamic arg1 = #C2, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C2}) → void
no-such-method-forwarder method /* signature-type: ({arg1: dynamic, arg2: ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic>}) → void */ m2({dynamic arg1 = #C2, ((dynamic) → dynamic, dynamic) →? core::Map<dynamic, dynamic> arg2 = #C2}) → void
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m2", <dynamic>[], <dynamic>[], <core::String, dynamic>{"arg1": arg1, "arg2": arg2}, 0)){(core::Invocation) → dynamic};
}
class D extends core::Object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ class C1 extends core::Object implements self::C {
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} Null;
no-such-method-forwarder operator +(core::double other) → core::double
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("+", <dynamic>[], <dynamic>[other], #C3, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::double;
no-such-method-forwarder method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C2]) → core::Map<self::C, self::C>
no-such-method-forwarder method /* signature-type: (self::C, [core::Set<core::Set<self::C>>]) → core::Map<self::C, self::C> */ m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>>? arg2 = #C2]) → core::Map<self::C, self::C>
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m1", <dynamic>[], <dynamic>[arg1, arg2], #C3, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::Map<self::C, self::C>;
no-such-method-forwarder method m2({dynamic arg1 = #C2, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C2}) → void
no-such-method-forwarder method /* signature-type: ({arg1: dynamic, arg2: ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic>}) → void */ m2({dynamic arg1 = #C2, ((dynamic) → dynamic, dynamic) →? core::Map<dynamic, dynamic> arg2 = #C2}) → void
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m2", <dynamic>[], <dynamic>[], <core::String, dynamic>{"arg1": arg1, "arg2": arg2}, 0)){(core::Invocation) → dynamic};
}
class D extends core::Object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ class C1 extends core::Object implements self::C {
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], const <core::String, dynamic>{}, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} Null;
no-such-method-forwarder operator +(core::double other) → core::double
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("+", <dynamic>[], <dynamic>[other], const <core::String, dynamic>{}, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::double;
no-such-method-forwarder method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2]) → core::Map<self::C, self::C>
no-such-method-forwarder method /* signature-type: (self::C, [core::Set<core::Set<self::C>>]) → core::Map<self::C, self::C> */ m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>>? arg2]) → core::Map<self::C, self::C>
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m1", <dynamic>[], <dynamic>[arg1, arg2], const <core::String, dynamic>{}, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::Map<self::C, self::C>;
no-such-method-forwarder method m2({dynamic arg1, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2}) → void
no-such-method-forwarder method /* signature-type: ({arg1: dynamic, arg2: ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic>}) → void */ m2({dynamic arg1, ((dynamic) → dynamic, dynamic) →? core::Map<dynamic, dynamic> arg2}) → void
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m2", <dynamic>[], <dynamic>[], <core::String, dynamic>{"arg1": arg1, "arg2": arg2}, 0)){(core::Invocation) → dynamic};
}
class D extends core::Object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ class C1 extends core::Object implements self::C {
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} Null;
no-such-method-forwarder operator +(core::double other) → core::double
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("+", <dynamic>[], <dynamic>[other], #C3, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::double;
no-such-method-forwarder method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C2]) → core::Map<self::C, self::C>
no-such-method-forwarder method /* signature-type: (self::C, [core::Set<core::Set<self::C>>]) → core::Map<self::C, self::C> */ m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>>? arg2 = #C2]) → core::Map<self::C, self::C>
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m1", <dynamic>[], <dynamic>[arg1, arg2], #C3, 0)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::Map<self::C, self::C>;
no-such-method-forwarder method m2({dynamic arg1 = #C2, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C2}) → void
no-such-method-forwarder method /* signature-type: ({arg1: dynamic, arg2: ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic>}) → void */ m2({dynamic arg1 = #C2, ((dynamic) → dynamic, dynamic) →? core::Map<dynamic, dynamic> arg2 = #C2}) → void
return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("m2", <dynamic>[], <dynamic>[], <core::String, dynamic>{"arg1": arg1, "arg2": arg2}, 0)){(core::Invocation) → dynamic};
}
class D extends core::Object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ abstract class _C&Object&A = core::Object with self::A /*isAnonymousMixin,hasCon
const synthetic constructor •() → self::_C&Object&A
: super core::Object::•()
;
mixin-super-stub method method(core::num i, {core::String s}) → core::String
mixin-super-stub method method(core::num i, {has-declared-initializer core::String s}) → core::String
return super.{self::A::method}(i, s: s);
}
abstract class _C&Object&A&B = self::_C&Object&A with self::B /*isAnonymousMixin,hasConstConstructor*/ {
Expand All @@ -56,14 +56,14 @@ abstract class _E&Object&A = core::Object with self::A /*isAnonymousMixin,hasCon
const synthetic constructor •() → self::_E&Object&A
: super core::Object::•()
;
mixin-super-stub method method(core::num i, {core::String s}) → core::String
mixin-super-stub method method(core::num i, {has-declared-initializer core::String s}) → core::String
return super.{self::A::method}(i, s: s);
}
abstract class _E&Object&A&D = self::_E&Object&A with self::D /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_E&Object&A&D
: super self::_E&Object&A::•()
;
forwarding-stub method method(covariant-by-declaration core::num i, {core::String s}) → core::String
forwarding-stub method method(covariant-by-declaration core::num i, {has-declared-initializer core::String s}) → core::String
return super.{self::_E&Object&A::method}(i, s: s);
}
class E extends self::_E&Object&A&D {
Expand All @@ -76,7 +76,7 @@ abstract class _G&Object&A = core::Object with self::A /*isAnonymousMixin,hasCon
const synthetic constructor •() → self::_G&Object&A
: super core::Object::•()
;
mixin-super-stub method method(core::num i, {core::String s}) → core::String
mixin-super-stub method method(core::num i, {has-declared-initializer core::String s}) → core::String
return super.{self::A::method}(i, s: s);
}
abstract class _G&Object&A&F = self::_G&Object&A with self::F /*isAnonymousMixin,hasConstConstructor*/ {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,14 @@ abstract class _E&Object&A = core::Object with self::A /*isAnonymousMixin,hasCon
const synthetic constructor •() → self::_E&Object&A
: super core::Object::•()
;
mixin-super-stub method method(core::num i, {core::String s}) → core::String
mixin-super-stub method method(core::num i, {has-declared-initializer core::String s}) → core::String
return super.{self::A::method}(i, s: s);
}
abstract class _E&Object&A&D = self::_E&Object&A with self::D /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_E&Object&A&D
: super self::_E&Object&A::•()
;
forwarding-stub method method(covariant-by-declaration core::num i, {core::String s}) → core::String
forwarding-stub method method(covariant-by-declaration core::num i, {has-declared-initializer core::String s}) → core::String
return super.{self::_E&Object&A::method}(i, s: s);
}
class E extends self::_E&Object&A&D {
Expand All @@ -48,7 +48,7 @@ abstract class _G&Object&A = core::Object with self::A /*isAnonymousMixin,hasCon
const synthetic constructor •() → self::_G&Object&A
: super core::Object::•()
;
mixin-super-stub method method(core::num i, {core::String s}) → core::String
mixin-super-stub method method(core::num i, {has-declared-initializer core::String s}) → core::String
return super.{self::A::method}(i, s: s);
}
abstract class _G&Object&A&F = self::_G&Object&A with self::F /*isAnonymousMixin,hasConstConstructor*/ {
Expand Down
Loading

0 comments on commit b57aec1

Please sign in to comment.