Skip to content

Commit 94c9dff

Browse files
johnniwintherCommit Queue
authored andcommitted
[cfe] Add isInternalImplementation to Extension(Type)MemberDescriptor
This adds a flag to the member descriptors that allow us to skip these when building the name space for extensions and extension types from dill. The late lowering of fields in dart2js is fixed to support lookup from dill. Change-Id: Iacbd6451ac234767036dfe8f818c3ecbb693ced8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/427720 Reviewed-by: Chloe Stefantsova <[email protected]> Reviewed-by: Mayank Patke <[email protected]> Commit-Queue: Johnni Winther <[email protected]>
1 parent d127486 commit 94c9dff

File tree

69 files changed

+736
-210
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+736
-210
lines changed

pkg/compiler/lib/src/kernel/transformations/modular/late_lowering.dart

Lines changed: 74 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import 'package:kernel/ast.dart';
66
import 'package:kernel/core_types.dart';
7+
import 'package:kernel/extension_table.dart';
78
import 'package:kernel/type_algebra.dart';
89

910
import '../../../options.dart';
@@ -73,6 +74,8 @@ class LateLowering {
7374

7475
Member? _contextMember;
7576

77+
final ExtensionTable _extensionTable = ExtensionTable();
78+
7679
LateLowering(this._coreTypes, CompilerOptions? _options)
7780
: _omitLateNames = _options?.omitLateNames ?? false,
7881
_readLocal = _Reader(_coreTypes.cellReadLocal),
@@ -363,6 +366,17 @@ class LateLowering {
363366
// We need to unbind the canonical name since we reuse the reference but
364367
// change the name.
365368
field.fieldReference.canonicalName?.unbind();
369+
ExtensionMemberInfo? extensionMemberInfo;
370+
if (field.isExtensionMember) {
371+
extensionMemberInfo = _extensionTable.getExtensionMemberInfo(field);
372+
}
373+
ExtensionTypeMemberInfo? extensionTypeMemberInfo;
374+
if (field.isExtensionTypeMember) {
375+
extensionTypeMemberInfo = _extensionTable.getExtensionTypeMemberInfo(
376+
field,
377+
);
378+
}
379+
366380
Field fieldCell =
367381
Field.immutable(
368382
_mangleFieldCellName(field),
@@ -396,6 +410,8 @@ class LateLowering {
396410
isStatic: true,
397411
fileUri: fileUri,
398412
reference: field.getterReference,
413+
isExtensionMember: field.isExtensionMember,
414+
isExtensionTypeMember: field.isExtensionTypeMember,
399415
)..fileOffset = fileOffset;
400416

401417
VariableDeclaration setterValue = VariableDeclaration(
@@ -426,17 +442,67 @@ class LateLowering {
426442
isStatic: true,
427443
fileUri: fileUri,
428444
reference: field.setterReference,
445+
isExtensionMember: field.isExtensionMember,
446+
isExtensionTypeMember: field.isExtensionTypeMember,
429447
)..fileOffset = fileOffset;
430448

431-
TreeNode parent = field.parent!;
432-
if (parent is Class) {
433-
parent.addProcedure(getter);
434-
parent.addProcedure(setter);
435-
} else if (parent is Library) {
436-
parent.addProcedure(getter);
437-
parent.addProcedure(setter);
449+
if (extensionMemberInfo != null) {
450+
extensionMemberInfo.descriptor.isInternalImplementation = true;
451+
extensionMemberInfo.extension.memberDescriptors.add(
452+
ExtensionMemberDescriptor(
453+
name: extensionMemberInfo.descriptor.name,
454+
kind: ExtensionMemberKind.Getter,
455+
isStatic: extensionMemberInfo.descriptor.isStatic,
456+
memberReference: getter.reference,
457+
tearOffReference: null,
458+
),
459+
);
460+
extensionMemberInfo.extension.memberDescriptors.add(
461+
ExtensionMemberDescriptor(
462+
name: extensionMemberInfo.descriptor.name,
463+
kind: ExtensionMemberKind.Setter,
464+
isStatic: extensionMemberInfo.descriptor.isStatic,
465+
memberReference: setter.reference,
466+
tearOffReference: null,
467+
),
468+
);
469+
field.enclosingLibrary.addProcedure(getter);
470+
field.enclosingLibrary.addProcedure(setter);
471+
} else if (extensionTypeMemberInfo != null) {
472+
extensionTypeMemberInfo.descriptor.isInternalImplementation = true;
473+
extensionTypeMemberInfo.extensionTypeDeclaration.memberDescriptors.add(
474+
ExtensionTypeMemberDescriptor(
475+
name: extensionTypeMemberInfo.descriptor.name,
476+
kind: ExtensionTypeMemberKind.Getter,
477+
isStatic: extensionTypeMemberInfo.descriptor.isStatic,
478+
memberReference: getter.reference,
479+
tearOffReference: null,
480+
),
481+
);
482+
extensionTypeMemberInfo.extensionTypeDeclaration.memberDescriptors.add(
483+
ExtensionTypeMemberDescriptor(
484+
name: extensionTypeMemberInfo.descriptor.name,
485+
kind: ExtensionTypeMemberKind.Setter,
486+
isStatic: extensionTypeMemberInfo.descriptor.isStatic,
487+
memberReference: setter.reference,
488+
tearOffReference: null,
489+
),
490+
);
491+
field.enclosingLibrary.addProcedure(getter);
492+
field.enclosingLibrary.addProcedure(setter);
493+
} else {
494+
switch (field.enclosingTypeDeclaration) {
495+
case null:
496+
field.enclosingLibrary.addProcedure(getter);
497+
field.enclosingLibrary.addProcedure(setter);
498+
case Class cls:
499+
cls.addProcedure(getter);
500+
cls.addProcedure(setter);
501+
case ExtensionTypeDeclaration extensionTypeDeclaration:
502+
extensionTypeDeclaration.addProcedure(getter);
503+
extensionTypeDeclaration.addProcedure(setter);
504+
}
438505
}
439-
440506
return fieldCell;
441507
});
442508
}

pkg/front_end/lib/src/builder/library_builder.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,6 @@ abstract class LibraryBuilderImpl extends BuilderImpl
571571
exportNameSpace.addLocalMember(name, member, setter: isSetter);
572572
return true;
573573
} else if (existing != null) {
574-
exportNameSpace.lookupLocalMember(name);
575574
Builder result = _computeAmbiguousDeclarationForExport(
576575
name, existing, member,
577576
uriOffset: uriOffset);

pkg/front_end/lib/src/dill/dill_extension_builder.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ class DillExtensionBuilder extends ExtensionBuilderImpl
2828
DillExtensionBuilder(this.extension, this.libraryBuilder)
2929
: _nameSpace = new DeclarationNameSpaceImpl() {
3030
for (ExtensionMemberDescriptor descriptor in extension.memberDescriptors) {
31+
if (descriptor.isInternalImplementation) continue;
32+
3133
Name name = descriptor.name;
3234
switch (descriptor.kind) {
3335
case ExtensionMemberKind.Method:

pkg/front_end/lib/src/dill/dill_extension_type_declaration_builder.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ class DillExtensionTypeDeclarationBuilder
6565
}
6666
for (ExtensionTypeMemberDescriptor descriptor
6767
in _extensionTypeDeclaration.memberDescriptors) {
68+
if (descriptor.isInternalImplementation) continue;
69+
6870
Name name = descriptor.name;
6971
switch (descriptor.kind) {
7072
case ExtensionTypeMemberKind.Method:

pkg/front_end/lib/src/dill/dill_library_builder.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,6 @@ class DillLibraryBuilder extends LibraryBuilderImpl {
183183
}
184184
}
185185
nonTearOffs.forEach(_addMember);
186-
library.procedures.forEach(_addMember);
187186
for (Typedef typedef in library.typedefs) {
188187
addTypedef(typedef, tearOffs[typedef.name]);
189188
}

pkg/front_end/lib/src/dill/dill_member_builder.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,15 @@ abstract class DillMemberBuilder extends MemberBuilderImpl {
5959
final Member member = this.member;
6060
return member is Constructor && member.isSynthetic;
6161
}
62+
63+
@override
64+
String toString() {
65+
String fullName = member.name.text;
66+
if (member.enclosingTypeDeclaration != null) {
67+
fullName = '${member.enclosingTypeDeclaration?.name}.$fullName';
68+
}
69+
return '${runtimeType}($fullName)';
70+
}
6271
}
6372

6473
class DillFieldBuilder extends DillMemberBuilder

pkg/front_end/lib/src/fragment/field/encoding.dart

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -613,12 +613,7 @@ abstract class AbstractLateFieldEncoding implements FieldEncoding {
613613

614614
@override
615615
void registerMembers(BuildNodesCallback f) {
616-
f(
617-
member: _field!,
618-
kind: _fragment.builder.isExtensionMember ||
619-
_fragment.builder.isExtensionTypeMember
620-
? BuiltMemberKind.ExtensionField
621-
: BuiltMemberKind.Field);
616+
f(member: _field!, kind: BuiltMemberKind.LateBackingField);
622617
if (_lateIsSetField != null) {
623618
_forceIncludeIsSetField = true;
624619
f(member: _lateIsSetField!, kind: BuiltMemberKind.LateIsSetField);

pkg/front_end/lib/src/source/source_extension_builder.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ class SourceExtensionBuilder extends ExtensionBuilderImpl
209209
Reference? tearOffReference) {
210210
String name = memberBuilder.name;
211211
ExtensionMemberKind kind;
212+
bool isInternalImplementation = false;
212213
switch (memberKind) {
213214
case BuiltMemberKind.Constructor:
214215
case BuiltMemberKind.RedirectingFactory:
@@ -230,7 +231,11 @@ class SourceExtensionBuilder extends ExtensionBuilderImpl
230231
memberBuilder.fileOffset,
231232
memberBuilder.fileUri);
232233
case BuiltMemberKind.ExtensionField:
234+
kind = ExtensionMemberKind.Field;
235+
break;
236+
case BuiltMemberKind.LateBackingField:
233237
case BuiltMemberKind.LateIsSetField:
238+
isInternalImplementation = true;
234239
kind = ExtensionMemberKind.Field;
235240
break;
236241
case BuiltMemberKind.ExtensionMethod:
@@ -253,6 +258,7 @@ class SourceExtensionBuilder extends ExtensionBuilderImpl
253258
memberReference: memberReference,
254259
tearOffReference: tearOffReference,
255260
isStatic: memberBuilder.isStatic,
261+
isInternalImplementation: isInternalImplementation,
256262
kind: kind));
257263
}
258264
}

pkg/front_end/lib/src/source/source_extension_type_declaration_builder.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,7 @@ class SourceExtensionTypeDeclarationBuilder
748748
case BuiltMemberKind.ExtensionSetter:
749749
case BuiltMemberKind.ExtensionOperator:
750750
case BuiltMemberKind.ExtensionField:
751+
case BuiltMemberKind.LateBackingField:
751752
case BuiltMemberKind.LateIsSetField:
752753
case BuiltMemberKind.ExtensionTypeConstructor:
753754
case BuiltMemberKind.ExtensionTypeFactory:
@@ -778,6 +779,7 @@ class SourceExtensionTypeDeclarationBuilder
778779
Reference? tearOffReference) {
779780
String name = memberBuilder.name;
780781
ExtensionTypeMemberKind kind;
782+
bool isInternalImplementation = false;
781783
switch (memberKind) {
782784
case BuiltMemberKind.Constructor:
783785
case BuiltMemberKind.RedirectingFactory:
@@ -793,7 +795,11 @@ class SourceExtensionTypeDeclarationBuilder
793795
unhandled("$memberBuilder(${memberBuilder.runtimeType}):${memberKind}",
794796
"buildMembers", memberBuilder.fileOffset, memberBuilder.fileUri);
795797
case BuiltMemberKind.ExtensionField:
798+
kind = ExtensionTypeMemberKind.Field;
799+
break;
800+
case BuiltMemberKind.LateBackingField:
796801
case BuiltMemberKind.LateIsSetField:
802+
isInternalImplementation = true;
797803
kind = ExtensionTypeMemberKind.Field;
798804
break;
799805
case BuiltMemberKind.ExtensionTypeConstructor:
@@ -826,6 +832,7 @@ class SourceExtensionTypeDeclarationBuilder
826832
memberReference: memberReference,
827833
tearOffReference: tearOffReference,
828834
isStatic: memberBuilder.isStatic,
835+
isInternalImplementation: isInternalImplementation,
829836
kind: kind));
830837
}
831838

pkg/front_end/lib/src/source/source_member_builder.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ enum BuiltMemberKind {
145145
ExtensionTypeFactory,
146146
ExtensionTypeRedirectingFactory,
147147
ExtensionTypeRepresentationField,
148+
LateBackingField,
148149
LateIsSetField,
149150
LateGetter,
150151
LateSetter,

0 commit comments

Comments
 (0)