Skip to content

Commit

Permalink
Version 3.3.0-81.0.dev
Browse files Browse the repository at this point in the history
Merge acad657 into dev
  • Loading branch information
Dart CI committed Oct 31, 2023
2 parents 2a80a8a + acad657 commit 776fad2
Show file tree
Hide file tree
Showing 21 changed files with 291 additions and 302 deletions.
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@

### Libraries

#### `dart:nativewrappers`

- **Breaking Change** [#51896][]: The NativeWrapperClasses are marked `base` so
that none of their subtypes can be implemented. Implementing subtypes can lead
to crashes when passing such native wrapper to a native call, as it will try to
unwrap a native field that doesn't exist.

[#51896]: https://github.com/dart-lang/sdk/issues/51896

#### `dart:typed_data`

- **BREAKING CHANGE** (https://github.com/dart-lang/sdk/issues/53218) The
Expand Down
6 changes: 6 additions & 0 deletions pkg/front_end/lib/src/fasta/builder/member_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,12 @@ abstract class BuilderClassMember implements ClassMember {
@override
bool get hasDeclarations => false;

@override
bool get forSetter => memberKind == ClassMemberKind.Setter;

@override
bool get isProperty => memberKind != ClassMemberKind.Method;

@override
List<ClassMember> get declarations =>
throw new UnsupportedError("$runtimeType.declarations");
Expand Down
29 changes: 18 additions & 11 deletions pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ import '../builder/field_builder.dart';
import '../builder/member_builder.dart';

import '../builder/procedure_builder.dart';
import '../kernel/hierarchy/class_member.dart' show ClassMember;
import '../kernel/hierarchy/class_member.dart'
show ClassMember, ClassMemberKind;
import '../kernel/hierarchy/members_builder.dart' show ClassMembersBuilder;
import '../kernel/member_covariance.dart';

Expand Down Expand Up @@ -93,12 +94,18 @@ abstract class DillMemberBuilder extends MemberBuilderImpl {
@override
List<ClassMember> get localMembers => _localMembers ??= isSetter
? const <ClassMember>[]
: <ClassMember>[new DillClassMember(this, forSetter: false)];
: <ClassMember>[
new DillClassMember(
this,
member is Field || isGetter
? ClassMemberKind.Getter
: ClassMemberKind.Method)
];

@override
List<ClassMember> get localSetters =>
_localSetters ??= isSetter || member is Field && member.hasSetter
? <ClassMember>[new DillClassMember(this, forSetter: true)]
? <ClassMember>[new DillClassMember(this, ClassMemberKind.Setter)]
: const <ClassMember>[];

@override
Expand Down Expand Up @@ -268,9 +275,9 @@ class DillClassMember extends BuilderClassMember {
Covariance? _covariance;

@override
final bool forSetter;
final ClassMemberKind memberKind;

DillClassMember(this.memberBuilder, {required this.forSetter});
DillClassMember(this.memberBuilder, this.memberKind);

@override
bool get isSourceDeclaration => false;
Expand All @@ -294,12 +301,6 @@ class DillClassMember extends BuilderClassMember {
member.stubKind == ProcedureStubKind.NoSuchMethodForwarder;
}

@override
bool get isProperty =>
memberBuilder.kind == null ||
memberBuilder.kind == ProcedureKind.Getter ||
memberBuilder.kind == ProcedureKind.Setter;

@override
bool get isSynthesized {
Member member = memberBuilder.member;
Expand All @@ -309,6 +310,12 @@ class DillClassMember extends BuilderClassMember {
@override
Member getMember(ClassMembersBuilder membersBuilder) => memberBuilder.member;

@override
Member? getTearOff(ClassMembersBuilder membersBuilder) {
Member? readTarget = memberBuilder.readTarget;
return readTarget != memberBuilder.invokeTarget ? readTarget : null;
}

@override
Covariance getCovariance(ClassMembersBuilder membersBuilder) {
return _covariance ??=
Expand Down
47 changes: 33 additions & 14 deletions pkg/front_end/lib/src/fasta/kernel/hierarchy/class_member.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ import '../forwarding_node.dart' show ForwardingNode;
import '../member_covariance.dart';
import 'members_builder.dart';

enum ClassMemberKind {
Method,
Getter,
Setter,
}

abstract class ClassMember {
Name get name;
bool get isStatic;
Expand All @@ -33,6 +39,8 @@ abstract class ClassMember {
bool get isConst;
bool get forSetter;

ClassMemberKind get memberKind;

/// Returns `true` if this member corresponds to a declaration in the source
/// code.
bool get isSourceDeclaration;
Expand All @@ -43,6 +51,12 @@ abstract class ClassMember {
/// Computes the [Member] node resulting from this class member.
Member getMember(ClassMembersBuilder membersBuilder);

/// Computes the tear off [Member] node resulting from this class member, if
/// this is different from the [Member] returned from [getMember].
///
/// Returns `null` if this class member does not have a tear off.
Member? getTearOff(ClassMembersBuilder membersBuilder);

/// Returns the member [Covariance] for this class member.
Covariance getCovariance(ClassMembersBuilder membersBuilder);

Expand Down Expand Up @@ -154,13 +168,15 @@ abstract class SynthesizedMember extends ClassMember {
final Name name;

@override
final bool forSetter;
final ClassMemberKind memberKind;

SynthesizedMember(this.name, this.memberKind);

@override
final bool isProperty;
bool get forSetter => memberKind == ClassMemberKind.Setter;

SynthesizedMember(this.name,
{required this.forSetter, required this.isProperty});
@override
bool get isProperty => memberKind != ClassMemberKind.Method;

@override
List<ClassMember> get declarations => throw new UnimplementedError();
Expand Down Expand Up @@ -206,6 +222,13 @@ abstract class SynthesizedMember extends ClassMember {

@override
bool get isExtensionTypeMember => false;

@override
Member? getTearOff(ClassMembersBuilder membersBuilder) {
// Ensure member is computed.
getMember(membersBuilder);
return null;
}
}

/// Class member for a set of interface members.
Expand Down Expand Up @@ -316,15 +339,14 @@ class SynthesizedInterfaceMember extends SynthesizedMember {
ClassMember? canonicalMember,
ClassMember? mixedInMember,
ClassMember? noSuchMethodTarget,
required bool isProperty,
required bool forSetter,
required ClassMemberKind memberKind,
required bool shouldModifyKernel})
: this._superClassMember = superClassMember,
this._canonicalMember = canonicalMember,
this._mixedInMember = mixedInMember,
this._noSuchMethodTarget = noSuchMethodTarget,
this._shouldModifyKernel = shouldModifyKernel,
super(name, isProperty: isProperty, forSetter: forSetter);
super(name, memberKind);

@override
bool get hasDeclarations => true;
Expand Down Expand Up @@ -540,9 +562,8 @@ class InheritedClassMemberImplementsInterface extends SynthesizedMember {
InheritedClassMemberImplementsInterface(this.classBuilder, Name name,
{required this.inheritedClassMember,
required this.implementedInterfaceMember,
required bool isProperty,
required bool forSetter})
: super(name, isProperty: isProperty, forSetter: forSetter);
required ClassMemberKind memberKind})
: super(name, memberKind);

@override
DeclarationBuilder get declarationBuilder => classBuilder;
Expand Down Expand Up @@ -713,11 +734,9 @@ class SynthesizedNonExtensionTypeMember extends SynthesizedMember {

SynthesizedNonExtensionTypeMember(
this.extensionTypeDeclarationBuilder, Name name, this.declarations,
{required bool isProperty,
required bool forSetter,
required bool shouldModifyKernel})
{required ClassMemberKind memberKind, required bool shouldModifyKernel})
: this._shouldModifyKernel = shouldModifyKernel,
super(name, isProperty: isProperty, forSetter: forSetter);
super(name, memberKind);

@override
DeclarationBuilder get declarationBuilder => extensionTypeDeclarationBuilder;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -972,8 +972,7 @@ class _SanitizedMember {
extensionTypeDeclarationBuilder,
name,
_implementedNonExtensionTypeMembers,
isProperty: _definingMember.isProperty,
forSetter: _definingMember.forSetter,
memberKind: _definingMember.memberKind,
shouldModifyKernel: builder.shouldModifyKernel);
builder._membersBuilder.registerMemberComputation(classMember);
return nonExtensionTypeMemberMap[name] = classMember;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,11 +171,18 @@ class ClassMembersBuilder implements ClassHierarchyMembers {
Member? getExtensionTypeMember(
ExtensionTypeDeclaration extensionTypeDeclaration, Name name,
{bool setter = false}) {
return getNodeFromExtensionTypeDeclaration(extensionTypeDeclaration)
.getMember(name, setter)
return getExtensionTypeClassMember(extensionTypeDeclaration, name,
setter: setter)
?.getMember(this);
}

ClassMember? getExtensionTypeClassMember(
ExtensionTypeDeclaration extensionTypeDeclaration, Name name,
{bool setter = false}) {
return getNodeFromExtensionTypeDeclaration(extensionTypeDeclaration)
.getMember(name, setter);
}

@override
Member? getDispatchTarget(Class cls, Name name, {bool setter = false}) {
return getNodeFromClass(cls)
Expand Down
33 changes: 11 additions & 22 deletions pkg/front_end/lib/src/fasta/kernel/hierarchy/members_node.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2023,8 +2023,7 @@ class _SanitizedMember {
canonicalMember: _mixedInMember,
mixedInMember: _mixedInMember,
noSuchMethodTarget: noSuchMethodTarget,
isProperty: _definingMember.isProperty,
forSetter: _definingMember.forSetter,
memberKind: _definingMember.memberKind,
shouldModifyKernel: builder.shouldModifyKernel);
builder._membersBuilder.registerMemberComputation(interfaceMember);

Expand Down Expand Up @@ -2058,8 +2057,7 @@ class _SanitizedMember {
classBuilder, name,
inheritedClassMember: _extendedMember,
implementedInterfaceMember: interfaceMember,
forSetter: _definingMember.forSetter,
isProperty: _definingMember.isProperty);
memberKind: _definingMember.memberKind);
builder._membersBuilder.registerMemberComputation(classMember);
if (!classBuilder.isAbstract) {
overrides.registerInheritedImplements(
Expand Down Expand Up @@ -2153,8 +2151,7 @@ class _SanitizedMember {
// is the defining member.
canonicalMember: _mixedInMember,
mixedInMember: _mixedInMember,
isProperty: _definingMember.isProperty,
forSetter: _definingMember.forSetter,
memberKind: _definingMember.memberKind,
shouldModifyKernel: builder.shouldModifyKernel);
builder._membersBuilder.registerMemberComputation(interfaceMember);

Expand All @@ -2173,8 +2170,7 @@ class _SanitizedMember {
classBuilder, name,
inheritedClassMember: _mixedInMember,
implementedInterfaceMember: interfaceMember,
forSetter: _definingMember.forSetter,
isProperty: _definingMember.isProperty);
memberKind: _definingMember.memberKind);
builder._membersBuilder.registerMemberComputation(classMember);

if (!classBuilder.isAbstract) {
Expand Down Expand Up @@ -2278,8 +2274,7 @@ class _SanitizedMember {
// _because_ it is the defining member.
canonicalMember: _declaredMember,
noSuchMethodTarget: noSuchMethodTarget,
isProperty: _definingMember.isProperty,
forSetter: _definingMember.forSetter,
memberKind: _definingMember.memberKind,
shouldModifyKernel: builder.shouldModifyKernel);
builder._membersBuilder.registerMemberComputation(interfaceMember);
}
Expand Down Expand Up @@ -2311,8 +2306,7 @@ class _SanitizedMember {
classBuilder, name,
inheritedClassMember: _extendedMember,
implementedInterfaceMember: interfaceMember,
forSetter: _definingMember.forSetter,
isProperty: _definingMember.isProperty);
memberKind: _definingMember.memberKind);
builder._membersBuilder.registerMemberComputation(classMember);

if (!classBuilder.isAbstract && noSuchMethodTarget == null) {
Expand Down Expand Up @@ -2448,8 +2442,7 @@ class _SanitizedMember {
classBuilder, name, interfaceMembers.toList(),
superClassMember: _extendedMember,
noSuchMethodTarget: noSuchMethodTarget,
isProperty: _definingMember.isProperty,
forSetter: _definingMember.forSetter,
memberKind: _definingMember.memberKind,
shouldModifyKernel: builder.shouldModifyKernel);
builder._membersBuilder.registerMemberComputation(interfaceMember);
}
Expand Down Expand Up @@ -2493,8 +2486,7 @@ class _SanitizedMember {
classBuilder, name,
inheritedClassMember: _extendedMember,
implementedInterfaceMember: interfaceMember,
isProperty: _definingMember.isProperty,
forSetter: _definingMember.forSetter);
memberKind: _definingMember.memberKind);
builder._membersBuilder.registerMemberComputation(classMember);
if (!classBuilder.isAbstract && noSuchMethodTarget == null) {
/// class Super {
Expand All @@ -2519,8 +2511,7 @@ class _SanitizedMember {
interfaceMember = new SynthesizedInterfaceMember(
classBuilder, name, [_extendedMember],
superClassMember: _extendedMember,
isProperty: _definingMember.isProperty,
forSetter: _definingMember.forSetter,
memberKind: _definingMember.memberKind,
shouldModifyKernel: builder.shouldModifyKernel);
builder._membersBuilder.registerMemberComputation(interfaceMember);

Expand All @@ -2531,8 +2522,7 @@ class _SanitizedMember {
classBuilder, name,
inheritedClassMember: _extendedMember,
implementedInterfaceMember: interfaceMember,
isProperty: _definingMember.isProperty,
forSetter: _definingMember.forSetter);
memberKind: _definingMember.memberKind);
builder._membersBuilder.registerMemberComputation(classMember);
}
} else if (_implementedMembers != null) {
Expand Down Expand Up @@ -2589,8 +2579,7 @@ class _SanitizedMember {
interfaceMember = new SynthesizedInterfaceMember(
classBuilder, name, interfaceMembers.toList(),
noSuchMethodTarget: noSuchMethodTarget,
isProperty: _definingMember.isProperty,
forSetter: _definingMember.forSetter,
memberKind: _definingMember.memberKind,
shouldModifyKernel: builder.shouldModifyKernel);
builder._membersBuilder.registerMemberComputation(interfaceMember);
}
Expand Down
Loading

0 comments on commit 776fad2

Please sign in to comment.