mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 01:21:07 +00:00
[cfe] Merge KernelBodyBuilder into BodyBuilder
Change-Id: Ica7d23a54659606ef8d01c647dc8d89f10796bb3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/109712 Reviewed-by: Dan Rubel <danrubel@google.com> Commit-Queue: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
parent
05b5883813
commit
0177076f2f
|
@ -104,6 +104,8 @@ import 'expression_generator.dart'
|
|||
|
||||
import 'expression_generator_helper.dart' show ExpressionGeneratorHelper;
|
||||
|
||||
import 'fangorn.dart' show Fangorn;
|
||||
|
||||
import 'forest.dart' show Forest;
|
||||
|
||||
import 'implicit_type_argument.dart' show ImplicitTypeArgument;
|
||||
|
@ -134,8 +136,10 @@ const noLocation = null;
|
|||
// has been enabled by default.
|
||||
const invalidCollectionElement = const Object();
|
||||
|
||||
abstract class BodyBuilder extends ScopeListener<JumpTarget>
|
||||
class BodyBuilder extends ScopeListener<JumpTarget>
|
||||
implements ExpressionGeneratorHelper, EnsureLoaded {
|
||||
final Forest forest;
|
||||
|
||||
// TODO(ahe): Rename [library] to 'part'.
|
||||
@override
|
||||
final KernelLibraryBuilder library;
|
||||
|
@ -277,7 +281,8 @@ abstract class BodyBuilder extends ScopeListener<JumpTarget>
|
|||
this.isInstanceMember,
|
||||
this.uri,
|
||||
this.typeInferrer)
|
||||
: enableNative =
|
||||
: forest = const Fangorn(),
|
||||
enableNative =
|
||||
library.loader.target.backendTarget.enableNative(library.uri),
|
||||
stringExpectedAfterNative =
|
||||
library.loader.target.backendTarget.nativeExtensionExpectsString,
|
||||
|
@ -312,6 +317,25 @@ abstract class BodyBuilder extends ScopeListener<JumpTarget>
|
|||
field.parent is KernelClassBuilder ? field.parent : null,
|
||||
typeInferrer);
|
||||
|
||||
BodyBuilder.forOutlineExpression(
|
||||
KernelLibraryBuilder library,
|
||||
KernelClassBuilder classBuilder,
|
||||
ModifierBuilder member,
|
||||
Scope scope,
|
||||
Uri fileUri)
|
||||
: this(
|
||||
library,
|
||||
member,
|
||||
scope,
|
||||
null,
|
||||
library.loader.hierarchy,
|
||||
library.loader.coreTypes,
|
||||
classBuilder,
|
||||
member?.isInstanceMember ?? false,
|
||||
fileUri,
|
||||
library.loader.typeInferenceEngine?.createLocalTypeInferrer(
|
||||
fileUri, classBuilder?.target?.thisType, library));
|
||||
|
||||
bool get inConstructor {
|
||||
return functionNestingLevel == 0 && member is KernelConstructorBuilder;
|
||||
}
|
||||
|
@ -5358,9 +5382,11 @@ abstract class BodyBuilder extends ScopeListener<JumpTarget>
|
|||
return new DeferredCheckJudgment(check, expression);
|
||||
}
|
||||
|
||||
/// TODO(ahe): This method is temporarily implemented by subclasses. Once type
|
||||
/// promotion is independent of shadow nodes, remove this method.
|
||||
void enterThenForTypePromotion(Expression condition);
|
||||
/// TODO(ahe): This method is temporarily implemented. Once type promotion is
|
||||
/// independent of shadow nodes, remove this method.
|
||||
void enterThenForTypePromotion(Expression condition) {
|
||||
typePromoter?.enterThen(condition);
|
||||
}
|
||||
|
||||
bool isErroneousNode(TreeNode node) {
|
||||
return library.loader.handledErrors.isNotEmpty &&
|
||||
|
|
|
@ -1,69 +0,0 @@
|
|||
// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
library fasta.kernel_body_builder;
|
||||
|
||||
import 'package:kernel/ast.dart' show Expression;
|
||||
|
||||
import '../type_inference/type_inferrer.dart' show TypeInferrer;
|
||||
|
||||
import 'body_builder.dart' show BodyBuilder;
|
||||
|
||||
import 'fangorn.dart' show Fangorn;
|
||||
|
||||
import 'forest.dart' show Forest;
|
||||
|
||||
import 'kernel_api.dart' show ClassHierarchy, CoreTypes;
|
||||
|
||||
import 'kernel_builder.dart'
|
||||
show KernelClassBuilder, KernelLibraryBuilder, ModifierBuilder, Scope;
|
||||
|
||||
class KernelBodyBuilder extends BodyBuilder {
|
||||
@override
|
||||
final Forest forest;
|
||||
|
||||
KernelBodyBuilder(
|
||||
KernelLibraryBuilder library,
|
||||
ModifierBuilder member,
|
||||
Scope scope,
|
||||
Scope formalParameterScope,
|
||||
ClassHierarchy hierarchy,
|
||||
CoreTypes coreTypes,
|
||||
KernelClassBuilder classBuilder,
|
||||
bool isInstanceMember,
|
||||
Uri uri,
|
||||
TypeInferrer typeInferrer)
|
||||
: forest = const Fangorn(),
|
||||
super(library, member, scope, formalParameterScope, hierarchy,
|
||||
coreTypes, classBuilder, isInstanceMember, uri, typeInferrer);
|
||||
|
||||
KernelBodyBuilder.forField(ModifierBuilder member, TypeInferrer typeInferrer)
|
||||
: forest = const Fangorn(),
|
||||
super.forField(member, typeInferrer);
|
||||
|
||||
KernelBodyBuilder.forOutlineExpression(
|
||||
KernelLibraryBuilder library,
|
||||
KernelClassBuilder classBuilder,
|
||||
ModifierBuilder member,
|
||||
Scope scope,
|
||||
Uri fileUri)
|
||||
: forest = const Fangorn(),
|
||||
super(
|
||||
library,
|
||||
member,
|
||||
scope,
|
||||
null,
|
||||
library.loader.hierarchy,
|
||||
library.loader.coreTypes,
|
||||
classBuilder,
|
||||
member?.isInstanceMember ?? false,
|
||||
fileUri,
|
||||
library.loader.typeInferenceEngine?.createLocalTypeInferrer(
|
||||
fileUri, classBuilder?.target?.thisType, library));
|
||||
|
||||
@override
|
||||
void enterThenForTypePromotion(Expression condition) {
|
||||
typePromoter?.enterThen(condition);
|
||||
}
|
||||
}
|
|
@ -29,7 +29,7 @@ import '../type_inference/type_inferrer.dart' show TypeInferrerImpl;
|
|||
|
||||
import '../type_inference/type_schema.dart' show UnknownType;
|
||||
|
||||
import 'kernel_body_builder.dart' show KernelBodyBuilder;
|
||||
import 'body_builder.dart' show BodyBuilder;
|
||||
|
||||
import 'kernel_builder.dart'
|
||||
show
|
||||
|
@ -124,9 +124,8 @@ class KernelFieldBuilder extends FieldBuilder<Expression> {
|
|||
classBuilder.hasConstConstructor)) &&
|
||||
constInitializerToken != null) {
|
||||
Scope scope = classBuilder?.scope ?? library.scope;
|
||||
KernelBodyBuilder bodyBuilder =
|
||||
new KernelBodyBuilder.forOutlineExpression(
|
||||
library, classBuilder, this, scope, fileUri);
|
||||
BodyBuilder bodyBuilder = new BodyBuilder.forOutlineExpression(
|
||||
library, classBuilder, this, scope, fileUri);
|
||||
bodyBuilder.constantContext =
|
||||
isConst ? ConstantContext.inferred : ConstantContext.none;
|
||||
initializer = bodyBuilder.parseFieldInitializer(constInitializerToken)
|
||||
|
@ -172,8 +171,7 @@ class KernelFieldBuilder extends FieldBuilder<Expression> {
|
|||
TypeInferrerImpl typeInferrer = library.loader.typeInferenceEngine
|
||||
.createTopLevelTypeInferrer(
|
||||
fileUri, field.enclosingClass?.thisType, null);
|
||||
KernelBodyBuilder bodyBuilder =
|
||||
new KernelBodyBuilder.forField(this, typeInferrer);
|
||||
BodyBuilder bodyBuilder = new BodyBuilder.forField(this, typeInferrer);
|
||||
bodyBuilder.constantContext =
|
||||
isConst ? ConstantContext.inferred : ConstantContext.none;
|
||||
initializer = bodyBuilder.parseFieldInitializer(type.initializerToken);
|
||||
|
|
|
@ -16,7 +16,7 @@ import '../scope.dart' show Scope;
|
|||
|
||||
import '../source/source_loader.dart' show SourceLoader;
|
||||
|
||||
import 'kernel_body_builder.dart' show KernelBodyBuilder;
|
||||
import 'body_builder.dart' show BodyBuilder;
|
||||
|
||||
import 'kernel_builder.dart'
|
||||
show
|
||||
|
@ -109,9 +109,8 @@ class KernelFormalParameterBuilder extends FormalParameterBuilder<TypeBuilder> {
|
|||
initializerToken != null) {
|
||||
final ClassBuilder classBuilder = parent.parent;
|
||||
Scope scope = classBuilder.scope;
|
||||
KernelBodyBuilder bodyBuilder =
|
||||
new KernelBodyBuilder.forOutlineExpression(
|
||||
library, classBuilder, this, scope, fileUri);
|
||||
BodyBuilder bodyBuilder = new BodyBuilder.forOutlineExpression(
|
||||
library, classBuilder, this, scope, fileUri);
|
||||
bodyBuilder.constantContext = ConstantContext.required;
|
||||
target.initializer = bodyBuilder.parseFieldInitializer(initializerToken)
|
||||
..parent = target;
|
||||
|
|
|
@ -6,7 +6,7 @@ library fasta.kernel_metadata_builder;
|
|||
|
||||
import 'package:kernel/ast.dart' show Annotatable, Class, Library;
|
||||
|
||||
import 'kernel_body_builder.dart' show KernelBodyBuilder;
|
||||
import 'body_builder.dart' show BodyBuilder;
|
||||
|
||||
import 'kernel_builder.dart'
|
||||
show
|
||||
|
@ -37,7 +37,7 @@ class KernelMetadataBuilder extends MetadataBuilder {
|
|||
Scope scope = parent is Library || parent is Class || classBuilder == null
|
||||
? library.scope
|
||||
: classBuilder.scope;
|
||||
KernelBodyBuilder bodyBuilder = new KernelBodyBuilder.forOutlineExpression(
|
||||
BodyBuilder bodyBuilder = new BodyBuilder.forOutlineExpression(
|
||||
library, classBuilder, member, scope, fileUri);
|
||||
for (int i = 0; i < metadata.length; ++i) {
|
||||
KernelMetadataBuilder annotationBuilder = metadata[i];
|
||||
|
|
|
@ -62,7 +62,7 @@ import '../source/source_loader.dart' show SourceLoader;
|
|||
import '../type_inference/type_inference_engine.dart'
|
||||
show IncludesTypeParametersNonCovariantly, Variance;
|
||||
|
||||
import 'kernel_body_builder.dart' show KernelBodyBuilder;
|
||||
import 'body_builder.dart' show BodyBuilder;
|
||||
|
||||
import 'kernel_builder.dart'
|
||||
show
|
||||
|
@ -520,9 +520,8 @@ class KernelConstructorBuilder extends KernelFunctionBuilder {
|
|||
// for const constructors into the outline.
|
||||
if (isConst && beginInitializers != null) {
|
||||
ClassBuilder classBuilder = parent;
|
||||
KernelBodyBuilder bodyBuilder =
|
||||
new KernelBodyBuilder.forOutlineExpression(
|
||||
library, classBuilder, this, classBuilder.scope, fileUri);
|
||||
BodyBuilder bodyBuilder = new BodyBuilder.forOutlineExpression(
|
||||
library, classBuilder, this, classBuilder.scope, fileUri);
|
||||
bodyBuilder.constantContext = ConstantContext.inferred;
|
||||
bodyBuilder.parseInitializers(beginInitializers);
|
||||
if (library.loader is SourceLoader) {
|
||||
|
|
|
@ -37,7 +37,7 @@ import '../fasta_codes.dart'
|
|||
|
||||
import '../ignored_parser_errors.dart' show isIgnoredParserError;
|
||||
|
||||
import '../kernel/kernel_body_builder.dart' show KernelBodyBuilder;
|
||||
import '../kernel/body_builder.dart' show BodyBuilder;
|
||||
|
||||
import '../kernel/kernel_builder.dart'
|
||||
show KernelFormalParameterBuilder, KernelTypeAliasBuilder, TypeBuilder;
|
||||
|
@ -619,17 +619,8 @@ class DietListener extends StackListener {
|
|||
ConstantContext constantContext = builder.isConstructor && builder.isConst
|
||||
? ConstantContext.inferred
|
||||
: ConstantContext.none;
|
||||
return new KernelBodyBuilder(
|
||||
library,
|
||||
builder,
|
||||
memberScope,
|
||||
formalParameterScope,
|
||||
hierarchy,
|
||||
coreTypes,
|
||||
currentClass,
|
||||
isInstanceMember,
|
||||
uri,
|
||||
typeInferrer)
|
||||
return new BodyBuilder(library, builder, memberScope, formalParameterScope,
|
||||
hierarchy, coreTypes, currentClass, isInstanceMember, uri, typeInferrer)
|
||||
..constantContext = constantContext;
|
||||
}
|
||||
|
||||
|
|
|
@ -45,12 +45,9 @@ import 'package:front_end/src/fasta/kernel/kernel_target.dart'
|
|||
import 'package:front_end/src/fasta/fasta_codes.dart'
|
||||
show Message, templateUnspecified;
|
||||
|
||||
import 'package:front_end/src/fasta/kernel/expression_generator.dart' /*
|
||||
show Generator*/
|
||||
;
|
||||
import 'package:front_end/src/fasta/kernel/expression_generator.dart';
|
||||
|
||||
import 'package:front_end/src/fasta/kernel/kernel_body_builder.dart'
|
||||
show KernelBodyBuilder;
|
||||
import 'package:front_end/src/fasta/kernel/body_builder.dart' show BodyBuilder;
|
||||
|
||||
import 'package:front_end/src/fasta/scanner.dart' show Token, scanString;
|
||||
|
||||
|
@ -98,7 +95,7 @@ main() {
|
|||
new TypeParameter("T"), libraryBuilder);
|
||||
VariableDeclaration variable = new VariableDeclaration(null);
|
||||
|
||||
KernelBodyBuilder helper = new KernelBodyBuilder(
|
||||
BodyBuilder helper = new BodyBuilder(
|
||||
libraryBuilder, null, null, null, null, null, null, false, uri, null);
|
||||
|
||||
Generator generator = new ThisAccessGenerator(helper, token, false, false);
|
||||
|
|
|
@ -21,8 +21,7 @@ import 'package:front_end/src/fasta/compiler_context.dart' show CompilerContext;
|
|||
|
||||
import 'package:front_end/src/fasta/dill/dill_target.dart' show DillTarget;
|
||||
|
||||
import 'package:front_end/src/fasta/kernel/kernel_body_builder.dart'
|
||||
show KernelBodyBuilder;
|
||||
import 'package:front_end/src/fasta/kernel/body_builder.dart' show BodyBuilder;
|
||||
|
||||
import 'package:front_end/src/fasta/kernel/kernel_builder.dart'
|
||||
show KernelLibraryBuilder, KernelProcedureBuilder;
|
||||
|
@ -61,7 +60,7 @@ class MockLibraryBuilder extends KernelLibraryBuilder {
|
|||
}
|
||||
}
|
||||
|
||||
class MockBodyBuilder extends KernelBodyBuilder {
|
||||
class MockBodyBuilder extends BodyBuilder {
|
||||
MockBodyBuilder.internal(
|
||||
MockLibraryBuilder libraryBuilder, String name, Scope scope)
|
||||
: super(libraryBuilder, libraryBuilder.mockProcedure(name), scope, scope,
|
||||
|
@ -72,7 +71,7 @@ class MockBodyBuilder extends KernelBodyBuilder {
|
|||
}
|
||||
|
||||
Expression compileExpression(String source) {
|
||||
KernelBodyBuilder listener = new MockBodyBuilder(
|
||||
BodyBuilder listener = new MockBodyBuilder(
|
||||
Uri.parse("org-dartlang-test:my_library.dart"),
|
||||
"<test>",
|
||||
new UnlinkedScope());
|
||||
|
|
Loading…
Reference in a new issue