Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(564)

Unified Diff: pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart

Issue 2941093002: Only attempt to do type inference on fields that lack a declared type. (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
index ee90588e0fec5d36b0c47bda0f3bdb4b057a0b46..c6f206933384f2afa355c9da30b58ad13d0ce9ef 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
@@ -34,16 +34,22 @@ class KernelFieldBuilder extends FieldBuilder<Expression> {
final Field field;
final List<MetadataBuilder> metadata;
final KernelTypeBuilder type;
- final Token initializerToken;
-
- KernelFieldBuilder(this.metadata, this.type, String name, int modifiers,
- Builder compilationUnit, int charOffset, this.initializerToken)
+ final Token initializerTokenForInference;
+ final bool hasInitializer;
+
+ KernelFieldBuilder(
+ this.metadata,
+ this.type,
+ String name,
+ int modifiers,
+ Builder compilationUnit,
+ int charOffset,
+ this.initializerTokenForInference,
+ this.hasInitializer)
: field = new KernelField(null, fileUri: compilationUnit?.relativeFileUri)
..fileOffset = charOffset,
super(name, modifiers, compilationUnit, charOffset);
- bool get hasInitializer => initializerToken != null;
-
void set initializer(Expression value) {
if (!hasInitializer && value is! NullLiteral && !isConst && !isFinal) {
internalError("Attempt to set initializer on field without initializer.");
@@ -63,7 +69,9 @@ class KernelFieldBuilder extends FieldBuilder<Expression> {
..hasImplicitGetter = isInstanceMember
..hasImplicitSetter = isInstanceMember && !isConst && !isFinal
..isStatic = !isInstanceMember;
- if (initializerToken != null && !initializerToken.isEof) {
+ if (initializerTokenForInference != null &&
+ !initializerTokenForInference.isEof) {
+ assert(type == null);
library.loader.typeInferenceEngine.recordField(field);
}
return field;
@@ -74,7 +82,8 @@ class KernelFieldBuilder extends FieldBuilder<Expression> {
@override
void prepareInitializerInference(
SourceLibraryBuilder library, ClassBuilder currentClass) {
- if (initializerToken != null && !initializerToken.isEof) {
+ if (initializerTokenForInference != null &&
+ !initializerTokenForInference.isEof) {
var memberScope =
currentClass == null ? library.scope : currentClass.scope;
// TODO(paulberry): Is it correct to pass library.uri into BodyBuilder, or
@@ -95,7 +104,7 @@ class KernelFieldBuilder extends FieldBuilder<Expression> {
library.uri,
typeInferrer);
Parser parser = new Parser(bodyBuilder);
- Token token = parser.parseExpression(initializerToken);
+ Token token = parser.parseExpression(initializerTokenForInference);
Expression expression = bodyBuilder.popForValue();
bodyBuilder.checkEmpty(token.charOffset);
initializer = expression;

Powered by Google App Engine
This is Rietveld 408576698