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

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

Issue 2894343002: Add statement hooks to TypeInferenceListener. (Closed)
Patch Set: Created 3 years, 7 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
« no previous file with comments | « no previous file | pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 d959c7e4ed10ba9370ee392a740c7d0b73ded450..962392eb9364ce30f6a4d667f0fdd7b73200bb33 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
@@ -90,9 +90,11 @@ class KernelBlock extends Block implements KernelStatement {
@override
void _inferStatement(KernelTypeInferrer inferrer) {
+ inferrer.listener.blockEnter(this);
for (var statement in statements) {
inferrer.inferStatement(statement);
}
+ inferrer.listener.blockExit(this);
}
}
@@ -259,7 +261,9 @@ class KernelExpressionStatement extends ExpressionStatement
@override
void _inferStatement(KernelTypeInferrer inferrer) {
+ inferrer.listener.expressionStatementEnter(this);
inferrer.inferExpression(expression, null, false);
+ inferrer.listener.expressionStatementExit(this);
}
}
@@ -304,10 +308,12 @@ class KernelFunctionDeclaration extends FunctionDeclaration
@override
void _inferStatement(KernelTypeInferrer inferrer) {
+ inferrer.listener.functionDeclarationEnter(this);
var oldClosureContext = inferrer.closureContext;
inferrer.closureContext = null;
inferrer.inferStatement(function.body);
inferrer.closureContext = oldClosureContext;
+ inferrer.listener.functionDeclarationExit(this);
}
}
@@ -489,10 +495,12 @@ class KernelIfStatement extends IfStatement implements KernelStatement {
@override
void _inferStatement(KernelTypeInferrer inferrer) {
+ inferrer.listener.ifStatementEnter(this);
inferrer.inferExpression(
condition, inferrer.coreTypes.boolClass.rawType, false);
inferrer.inferStatement(then);
if (otherwise != null) inferrer.inferStatement(otherwise);
+ inferrer.listener.ifStatementExit(this);
}
}
@@ -762,6 +770,7 @@ class KernelReturnStatement extends ReturnStatement implements KernelStatement {
@override
void _inferStatement(KernelTypeInferrer inferrer) {
+ inferrer.listener.returnStatementEnter(this);
var closureContext = inferrer.closureContext;
var typeContext = closureContext != null && !closureContext.isGenerator
? closureContext.returnContext
@@ -770,13 +779,13 @@ class KernelReturnStatement extends ReturnStatement implements KernelStatement {
? inferrer.inferExpression(
expression, typeContext, closureContext != null)
: const VoidType();
- if (expression == null) {
- // Analyzer treats bare `return` statements as having no effect on the
- // inferred type of the closure. TODO(paulberry): is this what we want
- // for Fasta?
- return;
+ // Analyzer treats bare `return` statements as having no effect on the
+ // inferred type of the closure. TODO(paulberry): is this what we want
+ // for Fasta?
+ if (expression != null) {
+ closureContext?.updateInferredReturnType(inferrer, inferredType);
}
- closureContext?.updateInferredReturnType(inferrer, inferredType);
+ inferrer.listener.returnStatementExit(this);
}
}
@@ -1229,15 +1238,18 @@ class KernelVariableDeclaration extends VariableDeclaration
@override
void _inferStatement(KernelTypeInferrer inferrer) {
+ inferrer.listener.variableDeclarationEnter(this);
var declaredType = _implicitlyTyped ? null : type;
- if (initializer == null) return;
- var inferredType = inferrer.inferDeclarationType(
- inferrer.inferExpression(initializer, declaredType, _implicitlyTyped));
- if (inferrer.strongMode && _implicitlyTyped) {
- inferrer.instrumentation?.record(Uri.parse(inferrer.uri), fileOffset,
- 'type', new InstrumentationValueForType(inferredType));
- type = inferredType;
+ if (initializer != null) {
+ var inferredType = inferrer.inferDeclarationType(inferrer.inferExpression(
+ initializer, declaredType, _implicitlyTyped));
+ if (inferrer.strongMode && _implicitlyTyped) {
+ inferrer.instrumentation?.record(Uri.parse(inferrer.uri), fileOffset,
+ 'type', new InstrumentationValueForType(inferredType));
+ type = inferredType;
+ }
}
+ inferrer.listener.variableDeclarationExit(this);
}
/// Determine whether the given [KernelVariableDeclaration] had an implicit
« no previous file with comments | « no previous file | pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698