Skip to content

Commit 13713c2

Browse files
chloestefantsovaCommit Bot
authored and
Commit Bot
committed
[cfe] Make _Enum type pre-created similarly to built-in types
Part of #47453 Change-Id: I046fc14b76513b6b1b3f3606b4c1bd299abca50a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/229963 Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Chloe Stefantsova <[email protected]>
1 parent d2105a9 commit 13713c2

File tree

6 files changed

+23
-23
lines changed

6 files changed

+23
-23
lines changed

pkg/_fe_analyzer_shared/test/inheritance/data/object_opt_in/core.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ class Object {
2727
/*class: Enum:Enum,Object*/
2828
abstract class Enum {}
2929

30+
/*class: _Enum:Enum,Object,_Enum*/
31+
abstract class _Enum implements Enum {}
32+
3033
/*class: Null:Null,Object*/
3134
class Null {
3235
factory Null._uninstantiable() {

pkg/_fe_analyzer_shared/test/inheritance/data/object_opt_out/core.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ class Object {
2929
/*class: Enum:Enum,Object*/
3030
abstract class Enum {}
3131

32+
/*class: _Enum:Enum,Object,_Enum*/
33+
abstract class _Enum implements Enum {}
34+
3235
/*class: Null:Null,Object*/
3336
class Null {
3437
factory Null._uninstantiable() {

pkg/front_end/lib/src/fasta/kernel/kernel_target.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,14 @@ class KernelTarget extends TargetImplementation {
145145
/* charOffset = */ null,
146146
instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
147147

148+
final NamedTypeBuilder underscoreEnumType = new NamedTypeBuilder(
149+
"_Enum",
150+
const NullabilityBuilder.omitted(),
151+
/* arguments = */ null,
152+
/* fileUri = */ null,
153+
/* charOffset = */ null,
154+
instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
155+
148156
final bool excludeSource = !CompilerContext.current.options.embedSourceText;
149157

150158
final Map<String, String>? environmentDefines =
@@ -988,6 +996,8 @@ class KernelTarget extends TargetImplementation {
988996
.lookupLocalMember("Never", required: true) as TypeDeclarationBuilder);
989997
enumType.bind(loader.coreLibrary.lookupLocalMember("Enum", required: true)
990998
as TypeDeclarationBuilder);
999+
underscoreEnumType.bind(loader.coreLibrary
1000+
.lookupLocalMember("_Enum", required: true) as TypeDeclarationBuilder);
9911001
}
9921002

9931003
void computeCoreTypes() {

pkg/front_end/lib/src/fasta/source/outline_builder.dart

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3230,16 +3230,10 @@ class OutlineBuilder extends StackListenerImpl {
32303230
if (mixins is ParserRecovery) {
32313231
push(new ParserRecovery(withKeyword.charOffset));
32323232
} else {
3233-
NamedTypeBuilder enumType = new NamedTypeBuilder(
3234-
"_Enum",
3235-
const NullabilityBuilder.omitted(),
3236-
/* arguments = */ null,
3237-
/* fileUri = */ null,
3238-
/* charOffset = */ null,
3239-
instanceTypeVariableAccess:
3240-
InstanceTypeVariableAccessState.Unexpected);
32413233
push(libraryBuilder.addMixinApplication(
3242-
enumType, mixins as List<TypeBuilder>, withKeyword.charOffset));
3234+
libraryBuilder.loader.target.underscoreEnumType,
3235+
mixins as List<TypeBuilder>,
3236+
withKeyword.charOffset));
32433237
}
32443238
}
32453239

pkg/front_end/lib/src/fasta/source/source_class_builder.dart

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,6 @@ class SourceClassBuilder extends ClassBuilderImpl
105105

106106
SourceClassBuilder? _patchBuilder;
107107

108-
final bool isEnumMixin;
109-
110108
SourceClassBuilder(
111109
List<MetadataBuilder>? metadata,
112110
int modifiers,
@@ -126,8 +124,7 @@ class SourceClassBuilder extends ClassBuilderImpl
126124
{Class? cls,
127125
this.mixedInTypeBuilder,
128126
this.isMixinDeclaration = false,
129-
this.isMacro: false,
130-
this.isEnumMixin: false})
127+
this.isMacro: false})
131128
: actualCls = initializeClass(cls, typeVariables, name, parent,
132129
startCharOffset, nameOffset, charEndOffset, referencesFromIndexed),
133130
super(metadata, modifiers, name, typeVariables, supertype, interfaces,
@@ -200,11 +197,6 @@ class SourceClassBuilder extends ClassBuilderImpl
200197

201198
scope.forEach(buildBuilders);
202199
constructors.forEach(buildBuilders);
203-
if (isEnumMixin) {
204-
assert(supertypeBuilder?.name == "_Enum");
205-
supertypeBuilder?.resolveIn(coreLibrary.scope,
206-
supertypeBuilder?.charOffset ?? charOffset, fileUri, library);
207-
}
208200
if (supertypeBuilder != null) {
209201
supertypeBuilder = _checkSupertype(supertypeBuilder!);
210202
}

pkg/front_end/lib/src/fasta/source/source_library_builder.dart

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2103,8 +2103,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
21032103
List<TypeVariableBuilder>? typeVariables,
21042104
int modifiers: 0,
21052105
List<TypeBuilder>? interfaces,
2106-
required bool isMacro,
2107-
bool isEnumMixin: false}) {
2106+
required bool isMacro}) {
21082107
if (name == null) {
21092108
// The following parameters should only be used when building a named
21102109
// mixin application.
@@ -2323,8 +2322,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
23232322
charEndOffset,
23242323
referencesFromIndexedClass,
23252324
mixedInTypeBuilder: isMixinDeclaration ? null : mixin,
2326-
isMacro: isNamedMixinApplication && isMacro,
2327-
isEnumMixin: isEnumMixin && i == 0);
2325+
isMacro: isNamedMixinApplication && isMacro);
23282326
// TODO(ahe, kmillikin): Should always be true?
23292327
// pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart can't
23302328
// handle that :(
@@ -2818,7 +2816,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
28182816
typeVariables,
28192817
applyMixins(supertypeBuilder, startCharOffset, charOffset,
28202818
charEndOffset, name, /* isMixinDeclaration = */ false,
2821-
typeVariables: typeVariables, isMacro: false, isEnumMixin: true),
2819+
typeVariables: typeVariables, isMacro: false),
28222820
interfaceBuilders,
28232821
enumConstantInfos,
28242822
this,

0 commit comments

Comments
 (0)