Skip to content

Commit

Permalink
Version 3.3.0-63.0.dev
Browse files Browse the repository at this point in the history
Merge 931e277 into dev
  • Loading branch information
Dart CI committed Oct 26, 2023
2 parents 0b4e241 + 931e277 commit b9d7251
Show file tree
Hide file tree
Showing 54 changed files with 1,254 additions and 375 deletions.
4 changes: 2 additions & 2 deletions pkg/dart2wasm/lib/types.dart
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ class Types {
for (InterfaceType subtype in subtypes) {
interfaceTypeEnvironment._add(subtype);
List<DartType>? typeArguments = translator.hierarchy
.getTypeArgumentsAsInstanceOf(subtype, superclass)
.getInterfaceTypeArgumentsAsInstanceOfClass(subtype, superclass)
?.map(normalize)
.toList();
ClassInfo subclassInfo = translator.classInfo[subtype.classNode]!;
Expand Down Expand Up @@ -668,7 +668,7 @@ class Types {
// arguments.
Class cls = translator.classForType(operandType);
InterfaceType? base = translator.hierarchy
.getTypeAsInstanceOf(type, cls,
.getInterfaceTypeAsInstanceOfClass(type, cls,
isNonNullableByDefault:
codeGen.member.enclosingLibrary.isNonNullableByDefault)
?.withDeclaredNullability(operandType.declaredNullability);
Expand Down
2 changes: 1 addition & 1 deletion pkg/dev_compiler/lib/src/kernel/compiler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4205,7 +4205,7 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
.returnType;
if (type is InterfaceType) {
var matchArguments =
_hierarchy.getTypeArgumentsAsInstanceOf(type, expected);
_hierarchy.getInterfaceTypeArgumentsAsInstanceOfClass(type, expected);
if (matchArguments != null) return matchArguments[0];
}
return const DynamicType();
Expand Down
3 changes: 3 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 @@ -191,6 +191,9 @@ abstract class BuilderClassMember implements ClassMember {
@override
Uri get fileUri => memberBuilder.fileUri;

@override
bool get isExtensionTypeMember => memberBuilder.isExtensionTypeMember;

@override
Name get name {
// The name must be derived from the declared name and not the generated
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import '../scope.dart';
import 'dill_class_builder.dart';
import 'dill_extension_type_member_builder.dart';
import 'dill_library_builder.dart';
import 'dill_member_builder.dart';

class DillExtensionTypeDeclarationBuilder
extends ExtensionTypeDeclarationBuilderImpl
Expand Down Expand Up @@ -42,6 +43,31 @@ class DillExtensionTypeDeclarationBuilder
isModifiable: false),
new ConstructorScope(
_extensionTypeDeclaration.name, <String, MemberBuilder>{})) {
for (Procedure procedure in _extensionTypeDeclaration.procedures) {
String name = procedure.name.text;
switch (procedure.kind) {
case ProcedureKind.Factory:
throw new UnsupportedError(
"Unexpected procedure kind in extension type declaration: "
"$procedure (${procedure.kind}).");
case ProcedureKind.Setter:
scope.addLocalMember(name, new DillSetterBuilder(procedure, this),
setter: true);
break;
case ProcedureKind.Getter:
scope.addLocalMember(name, new DillGetterBuilder(procedure, this),
setter: false);
break;
case ProcedureKind.Operator:
scope.addLocalMember(name, new DillOperatorBuilder(procedure, this),
setter: false);
break;
case ProcedureKind.Method:
scope.addLocalMember(name, new DillMethodBuilder(procedure, this),
setter: false);
break;
}
}
for (ExtensionTypeMemberDescriptor descriptor
in _extensionTypeDeclaration.memberDescriptors) {
Name name = descriptor.name;
Expand Down
6 changes: 6 additions & 0 deletions pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,12 @@ class DillClassMember extends BuilderClassMember {
@override
bool get isSourceDeclaration => false;

@override
bool get isExtensionTypeMember {
Member member = memberBuilder.member;
return member.isExtensionTypeMember;
}

@override
bool get isInternalImplementation {
Member member = memberBuilder.member;
Expand Down
29 changes: 10 additions & 19 deletions pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
Original file line number Diff line number Diff line change
Expand Up @@ -270,8 +270,8 @@ abstract class CombinedMemberSignatureBase {
return _containsNnbdTypes;
}

/// Returns the [declarationBuilder] as an instance of [cls].
InterfaceType _asInstanceOfClass(Class cls);
/// Returns the this type of the [declarationBuilder].
TypeDeclarationType get thisType;

/// Returns `true` if the canonical member is declared in
/// [declarationBuilder].
Expand Down Expand Up @@ -726,11 +726,14 @@ abstract class CombinedMemberSignatureBase {
unhandled("${member.runtimeType}", "$member",
declarationBuilder.charOffset, declarationBuilder.fileUri);
}
if (member.enclosingClass!.typeParameters.isEmpty) {
if (member.enclosingTypeDeclaration!.typeParameters.isEmpty) {
return type;
}
InterfaceType instance = _asInstanceOfClass(member.enclosingClass!);
return Substitution.fromInterfaceType(instance).substituteType(type);
TypeDeclarationType instance = hierarchy.getTypeAsInstanceOf(
thisType, member.enclosingTypeDeclaration!,
isNonNullableByDefault:
declarationBuilder.libraryBuilder.isNonNullableByDefault)!;
return Substitution.fromTypeDeclarationType(instance).substituteType(type);
}

bool _isMoreSpecific(DartType a, DartType b, bool forSetter) {
Expand Down Expand Up @@ -771,18 +774,12 @@ class CombinedClassMemberSignature extends CombinedMemberSignatureBase {
DeclarationBuilder get declarationBuilder => classBuilder;

/// The this type of [classBuilder].
@override
InterfaceType get thisType {
return _thisType ??= _coreTypes.thisInterfaceType(
classBuilder.cls, declarationBuilder.libraryBuilder.nonNullable);
}

@override
InterfaceType _asInstanceOfClass(Class cls) {
return hierarchy.getTypeAsInstanceOf(thisType, cls,
isNonNullableByDefault:
declarationBuilder.libraryBuilder.isNonNullableByDefault);
}

/// Returns `true` if the canonical member is declared in
/// [declarationBuilder].
@override
Expand Down Expand Up @@ -824,19 +821,13 @@ class CombinedExtensionTypeMemberSignature extends CombinedMemberSignatureBase {
DeclarationBuilder get declarationBuilder => extensionTypeDeclarationBuilder;

/// The this type of [extensionTypeDeclarationBuilder].
@override
ExtensionType get thisType {
return _thisType ??= _coreTypes.thisExtensionType(
extensionTypeDeclarationBuilder.extensionTypeDeclaration,
declarationBuilder.libraryBuilder.nonNullable);
}

@override
InterfaceType _asInstanceOfClass(Class cls) {
return hierarchy.getExtensionTypeAsInstanceOfClass(thisType, cls,
isNonNullableByDefault:
declarationBuilder.libraryBuilder.isNonNullableByDefault)!;
}

@override
bool get isCanonicalMemberDeclared => false;
}
26 changes: 14 additions & 12 deletions pkg/front_end/lib/src/fasta/kernel/exhaustiveness.dart
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,8 @@ class CfeTypeOperations implements TypeOperations<DartType> {
Class declaringClass = member.enclosingClass!;
if (declaringClass.typeParameters.isNotEmpty) {
Substitution substitution = substitutions[declaringClass] ??=
Substitution.fromInterfaceType(
_classHierarchy.getTypeAsInstanceOf(type, declaringClass,
Substitution.fromInterfaceType(_classHierarchy
.getInterfaceTypeAsInstanceOfClass(type, declaringClass,
isNonNullableByDefault: true)!);
fieldType = substitution.substituteType(fieldType);
}
Expand Down Expand Up @@ -188,9 +188,10 @@ class CfeTypeOperations implements TypeOperations<DartType> {
DartType? getListElementType(DartType type) {
type = type.resolveTypeParameterType;
if (type is InterfaceType) {
InterfaceType? listType = _classHierarchy.getTypeAsInstanceOf(
type, _typeEnvironment.coreTypes.listClass,
isNonNullableByDefault: true);
InterfaceType? listType =
_classHierarchy.getInterfaceTypeAsInstanceOfClass(
type, _typeEnvironment.coreTypes.listClass,
isNonNullableByDefault: true);
if (listType != null) {
return listType.typeArguments[0];
}
Expand All @@ -202,7 +203,7 @@ class CfeTypeOperations implements TypeOperations<DartType> {
DartType? getListType(DartType type) {
type = type.resolveTypeParameterType;
if (type is InterfaceType) {
return _classHierarchy.getTypeAsInstanceOf(
return _classHierarchy.getInterfaceTypeAsInstanceOfClass(
type, _typeEnvironment.coreTypes.listClass,
isNonNullableByDefault: true);
}
Expand All @@ -213,9 +214,10 @@ class CfeTypeOperations implements TypeOperations<DartType> {
DartType? getMapValueType(DartType type) {
type = type.resolveTypeParameterType;
if (type is InterfaceType) {
InterfaceType? mapType = _classHierarchy.getTypeAsInstanceOf(
type, _typeEnvironment.coreTypes.mapClass,
isNonNullableByDefault: true);
InterfaceType? mapType =
_classHierarchy.getInterfaceTypeAsInstanceOfClass(
type, _typeEnvironment.coreTypes.mapClass,
isNonNullableByDefault: true);
if (mapType != null) {
return mapType.typeArguments[1];
}
Expand Down Expand Up @@ -394,9 +396,9 @@ class CfeSealedClassOperations
Class subClass, covariant InterfaceType sealedClassType) {
InterfaceType thisType = subClass.getThisType(
_typeEnvironment.coreTypes, Nullability.nonNullable);
InterfaceType asSealedType = _typeEnvironment.hierarchy.getTypeAsInstanceOf(
thisType, sealedClassType.classNode,
isNonNullableByDefault: true)!;
InterfaceType asSealedType = _typeEnvironment.hierarchy
.getInterfaceTypeAsInstanceOfClass(thisType, sealedClassType.classNode,
isNonNullableByDefault: true)!;
if (thisType.typeArguments.isEmpty) {
return thisType;
}
Expand Down
12 changes: 11 additions & 1 deletion pkg/front_end/lib/src/fasta/kernel/hierarchy/class_member.dart
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,17 @@ abstract class ClassMember {
String get fullName;
String get fullNameForErrors;
DeclarationBuilder get declarationBuilder;
//ClassBuilder get classBuilder;

/// Returns `true` if this class member is declared in Object from dart:core.
bool isObjectMember(ClassBuilder objectClass);

/// If this member is declared in an extension type declaration.
///
/// This includes explicit extension type members, static or instance, and
/// the representation field, but _not_ non-extension type members inherited
/// into the extension type declaration.
bool get isExtensionTypeMember;

Uri get fileUri;
int get charOffset;

Expand Down Expand Up @@ -196,6 +203,9 @@ abstract class SynthesizedMember extends ClassMember {

@override
void registerOverrideDependency(Set<ClassMember> overriddenMembers) {}

@override
bool get isExtensionTypeMember => false;
}

/// Class member for a set of interface members.
Expand Down
Loading

0 comments on commit b9d7251

Please sign in to comment.