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

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

Issue 2830313002: Split up TypeInferrer class. (Closed)
Patch Set: Created 3 years, 8 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_shadow_ast.dart
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index a761ab2e67ea6b541ba4dbcc4e0dcaecbc6595df..0b6af073e67b018e7e24b006aecd0719b9b6f6ef 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -18,6 +18,7 @@
/// kernel class, because multiple constructs in Dart may desugar to a tree
/// with the same kind of root node.
import 'package:front_end/src/base/instrumentation.dart';
+import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart';
import 'package:front_end/src/fasta/type_inference/type_inferrer.dart';
import 'package:kernel/ast.dart';
@@ -50,6 +51,8 @@ class KernelField extends Field {
bool _isInferred = false;
+ KernelTypeInferrer _typeInferrer;
+
KernelField(Name name, {String fileUri}) : super(name, fileUri: fileUri) {}
@override
@@ -150,11 +153,10 @@ class KernelStaticGet extends StaticGet implements KernelExpression {
}
}
-/// Concrete implementation of [TypeInferrer] specialized to work with kernel
-/// objects.
-class KernelTypeInferrer extends TypeInferrer<Statement, Expression,
- KernelVariableDeclaration, KernelField> {
- KernelTypeInferrer(Instrumentation instrumentation, bool strongMode)
+/// Concrete implementation of [TypeInferenceEngine] specialized to work with
+/// kernel objects.
+class KernelTypeInferenceEngine extends TypeInferenceEngineImpl<KernelField> {
+ KernelTypeInferenceEngine(Instrumentation instrumentation, bool strongMode)
: super(instrumentation, strongMode);
@override
@@ -170,6 +172,22 @@ class KernelTypeInferrer extends TypeInferrer<Statement, Expression,
}
@override
+ KernelTypeInferrer createLocalTypeInferrer(Uri uri) {
+ return new KernelTypeInferrer._(this, uri.toString());
+ }
+
+ @override
+ KernelTypeInferrer createTopLevelTypeInferrer(KernelField field) {
+ return field._typeInferrer =
+ new KernelTypeInferrer._(this, getFieldUri(field));
+ }
+
+ @override
+ bool fieldHasInitializer(KernelField field) {
+ return field.initializer != null;
+ }
+
+ @override
DartType getFieldDeclaredType(KernelField field) {
return field._implicitlyTyped ? null : field.type;
}
@@ -180,6 +198,39 @@ class KernelTypeInferrer extends TypeInferrer<Statement, Expression,
}
@override
+ int getFieldOffset(KernelField field) {
+ return field.fileOffset;
+ }
+
+ @override
+ KernelTypeInferrer getFieldTypeInferrer(KernelField field) {
+ return field._typeInferrer;
+ }
+
+ @override
+ String getFieldUri(KernelField field) {
+ return field._fileUri;
+ }
+
+ @override
+ bool isFieldInferred(KernelField field) {
+ return field._isInferred;
+ }
+
+ @override
+ void setFieldInferredType(KernelField field, DartType inferredType) {
+ field._setInferredType(inferredType);
+ }
+}
+
+/// Concrete implementation of [TypeInferrer] specialized to work with kernel
+/// objects.
+class KernelTypeInferrer extends TypeInferrerImpl<Statement, Expression,
+ KernelVariableDeclaration, KernelField> {
+ KernelTypeInferrer._(KernelTypeInferenceEngine engine, String uri)
+ : super(engine, uri);
+
+ @override
Expression getFieldInitializer(KernelField field) {
return field.initializer;
}
@@ -194,16 +245,6 @@ class KernelTypeInferrer extends TypeInferrer<Statement, Expression,
}
@override
- int getFieldOffset(KernelField field) {
- return field.fileOffset;
- }
-
- @override
- String getFieldUri(KernelField field) {
- return field._fileUri;
- }
-
- @override
DartType inferExpression(
Expression expression, DartType typeContext, bool typeNeeded) {
if (expression is KernelExpression) {
@@ -223,6 +264,12 @@ class KernelTypeInferrer extends TypeInferrer<Statement, Expression,
}
@override
+ DartType inferFieldInitializer(
+ KernelField field, DartType type, bool typeNeeded) {
+ return inferExpression(field.initializer, type, typeNeeded);
+ }
+
+ @override
void inferStatement(Statement statement) {
if (statement is KernelStatement) {
// Use polymorphic dispatch on [KernelStatement] to perform whatever kind
@@ -238,16 +285,6 @@ class KernelTypeInferrer extends TypeInferrer<Statement, Expression,
// everything, this case should no longer be needed.
}
}
-
- @override
- bool isFieldInferred(KernelField field) {
- return field._isInferred;
- }
-
- @override
- void setFieldInferredType(KernelField field, DartType inferredType) {
- field._setInferredType(inferredType);
- }
}
/// Concrete shadow object representing a variable declaration in kernel form.
« no previous file with comments | « pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart ('k') | pkg/front_end/lib/src/fasta/kernel/kernel_target.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698