Skip to content

Commit

Permalink
[cfe] Introduce FieldBuilder, FunctionBuilder, and ProcedureBuilder a…
Browse files Browse the repository at this point in the history
…s interfaces

+ reduce ModifierBuilder interface
+ introduce ConstructorScope(Builder) and AmbiguousMemberBuilder
+ reduce use of Builder.target by using the more ligthweight MemberBuilder interface

Change-Id: I6366559f7c85bbd3224ef906505a67a379092686
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121063
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
  • Loading branch information
johnniwinther authored and commit-bot@chromium.org committed Oct 11, 2019
1 parent 17702e4 commit 377409f
Show file tree
Hide file tree
Showing 27 changed files with 1,256 additions and 919 deletions.
17 changes: 0 additions & 17 deletions pkg/front_end/lib/src/fasta/builder/builder.dart
Expand Up @@ -195,12 +195,6 @@ abstract class Builder {

bool get isTypeVariable;

bool get isMixinApplication;

bool get isNamedMixinApplication;

bool get isAnonymousMixinApplication;

/// Applies [patch] to this declaration.
void applyPatch(Builder patch);

Expand Down Expand Up @@ -296,17 +290,6 @@ abstract class BuilderImpl implements Builder {
@override
bool get isTypeVariable => false;

@override
bool get isMixinApplication => false;

@override
bool get isNamedMixinApplication => false;

@override
bool get isAnonymousMixinApplication {
return isMixinApplication && !isNamedMixinApplication;
}

@override
void applyPatch(Builder patch) {
unsupported("${runtimeType}.applyPatch", charOffset, fileUri);
Expand Down
43 changes: 34 additions & 9 deletions pkg/front_end/lib/src/fasta/builder/class_builder.dart
Expand Up @@ -102,6 +102,8 @@ import '../kernel/kernel_target.dart' show KernelTarget;

import '../kernel/types.dart' show Types;

import '../modifier.dart';

import '../names.dart' show noSuchMethodName;

import '../problems.dart'
Expand All @@ -122,6 +124,7 @@ import 'member_builder.dart';
import 'metadata_builder.dart';
import 'named_type_builder.dart';
import 'nullability_builder.dart';
import 'procedure_builder.dart';
import 'type_builder.dart';
import 'type_variable_builder.dart';

Expand All @@ -141,16 +144,26 @@ abstract class ClassBuilder implements DeclarationBuilder {
/// The types in the `on` clause of an extension or mixin declaration.
List<TypeBuilder> onTypes;

Scope get constructors;
ConstructorScope get constructors;

ScopeBuilder get constructorScopeBuilder;
ConstructorScopeBuilder get constructorScopeBuilder;

Map<String, ConstructorRedirection> redirectingConstructors;

ClassBuilder actualOrigin;

ClassBuilder patchForTesting;

bool get isAbstract;

bool get hasConstConstructor;

bool get isMixin;

bool get isMixinApplication;

bool get isAnonymousMixinApplication;

TypeBuilder get mixedInType;

void set mixedInType(TypeBuilder mixin);
Expand All @@ -163,7 +176,7 @@ abstract class ClassBuilder implements DeclarationBuilder {
/// this redirection gives rise to a cycle that has not been reported before.
bool checkConstructorCyclic(String source, String target);

Builder findConstructorOrFactory(
MemberBuilder findConstructorOrFactory(
String name, int charOffset, Uri uri, LibraryBuilder accessingLibrary);

void forEach(void f(String name, Builder builder));
Expand Down Expand Up @@ -348,10 +361,10 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
List<TypeBuilder> onTypes;

@override
final Scope constructors;
final ConstructorScope constructors;

@override
final ScopeBuilder constructorScopeBuilder;
final ConstructorScopeBuilder constructorScopeBuilder;

@override
Map<String, ConstructorRedirection> redirectingConstructors;
Expand All @@ -374,20 +387,32 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
this.constructors,
LibraryBuilder parent,
int charOffset)
: constructorScopeBuilder = new ScopeBuilder(constructors),
: constructorScopeBuilder = new ConstructorScopeBuilder(constructors),
super(metadata, modifiers, name, parent, charOffset, scope);

@override
String get debugName => "ClassBuilder";

@override
bool get isAbstract => (modifiers & abstractMask) != 0;

bool get isMixin => (modifiers & mixinDeclarationMask) != 0;

@override
bool get isMixinApplication => mixedInType != null;

@override
bool get isNamedMixinApplication {
return isMixinApplication && super.isNamedMixinApplication;
return isMixinApplication && (modifiers & namedMixinApplicationMask) != 0;
}

@override
bool get isAnonymousMixinApplication {
return isMixinApplication && !isNamedMixinApplication;
}

bool get hasConstConstructor => (modifiers & hasConstConstructorMask) != 0;

@override
List<ConstructorReferenceBuilder> get constructorReferences => null;

Expand Down Expand Up @@ -527,12 +552,12 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
}

@override
Builder findConstructorOrFactory(
MemberBuilder findConstructorOrFactory(
String name, int charOffset, Uri uri, LibraryBuilder accessingLibrary) {
if (accessingLibrary.origin != library.origin && name.startsWith("_")) {
return null;
}
Builder declaration = constructors.lookup(name, charOffset, uri);
MemberBuilder declaration = constructors.lookup(name, charOffset, uri);
if (declaration == null && isPatch) {
return origin.findConstructorOrFactory(
name, charOffset, uri, accessingLibrary);
Expand Down

0 comments on commit 377409f

Please sign in to comment.