| 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.
|
|
|