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 ecb416250fc483fdcc6a842fb2ffb9c80171a58c..c5cc8830d0cd558822ce80dfc0f98493acdb9d1a 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 |
@@ -1520,15 +1520,15 @@ class KernelSymbolLiteral extends SymbolLiteral implements KernelExpression { |
class KernelThisExpression extends ThisExpression implements KernelExpression { |
@override |
void _collectDependencies(KernelDependencyCollector collector) { |
- // TODO(paulberry): figure out the right thing to do here. |
- throw 'TODO(paulberry)'; |
+ // Field initializers are not allowed to refer to [this]. But if it |
+ // happens, we can still proceed; no additional type inference dependencies |
+ // are introduced. |
} |
@override |
DartType _inferExpression( |
KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { |
- // TODO(scheglov): implement. |
- return typeNeeded ? const DynamicType() : null; |
+ return typeNeeded ? (inferrer.thisType ?? const DynamicType()) : null; |
} |
} |
@@ -1569,15 +1569,16 @@ class KernelTypeInferenceEngine extends TypeInferenceEngineImpl { |
@override |
KernelTypeInferrer createLocalTypeInferrer( |
- Uri uri, TypeInferenceListener listener) { |
- return new KernelTypeInferrer._(this, uri.toString(), listener, false); |
+ Uri uri, TypeInferenceListener listener, InterfaceType thisType) { |
+ return new KernelTypeInferrer._( |
+ this, uri.toString(), listener, false, thisType); |
} |
@override |
- KernelTypeInferrer createTopLevelTypeInferrer( |
- KernelField field, TypeInferenceListener listener) { |
+ KernelTypeInferrer createTopLevelTypeInferrer(TypeInferenceListener listener, |
+ InterfaceType thisType, KernelField field) { |
return field._typeInferrer = |
- new KernelTypeInferrer._(this, field.fileUri, listener, true); |
+ new KernelTypeInferrer._(this, field.fileUri, listener, true, thisType); |
} |
@override |
@@ -1618,8 +1619,8 @@ class KernelTypeInferrer extends TypeInferrerImpl { |
final typePromoter = new KernelTypePromoter(); |
KernelTypeInferrer._(KernelTypeInferenceEngine engine, String uri, |
- TypeInferenceListener listener, bool topLevel) |
- : super(engine, uri, listener, topLevel); |
+ TypeInferenceListener listener, bool topLevel, InterfaceType thisType) |
+ : super(engine, uri, listener, topLevel, thisType); |
@override |
Expression getFieldInitializer(KernelField field) { |