Convert ShadowReturnStatement to ReturnJudgment.
R=brianwilkerson@google.com, paulberry@google.com
Change-Id: Ifccbda5a6f5e4f3be20640f018932b79a8b6d27d
Reviewed-on: https://dart-review.googlesource.com/61140
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index a43afde..0e3a1ba 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -792,8 +792,8 @@
.withLocation(uri, eof.charOffset, eof.length));
}
- ShadowReturnStatement fakeReturn =
- new ShadowReturnStatement(toKernelExpression(expression));
+ ReturnJudgment fakeReturn =
+ new ReturnJudgment(toKernelExpression(expression));
_typeInferrer.inferFunctionBody(
this, factory, const DynamicType(), AsyncMarker.Sync, fakeReturn);
diff --git a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
index 1fc12ca..ebb58a9 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
@@ -94,7 +94,7 @@
ShadowMapLiteral,
ShadowNot,
ShadowRethrow,
- ShadowReturnStatement,
+ ReturnJudgment,
ShadowStringConcatenation,
ShadowStringLiteral,
ShadowSymbolLiteral,
@@ -457,7 +457,7 @@
@override
Statement returnStatement(
Token returnKeyword, Expression expression, Token semicolon) {
- return new ShadowReturnStatement(expression)
+ return new ReturnJudgment(expression)
..fileOffset = returnKeyword.charOffset;
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
index b86cf428..31b90f4 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
@@ -93,7 +93,7 @@
ShadowPropertyAssign,
PropertyGetJudgment,
ShadowRedirectingInitializer,
- ShadowReturnStatement,
+ ReturnJudgment,
ShadowStaticAssignment,
StaticGetJudgment,
ShadowStaticInvocation,
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 72b5165..86604a3 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
@@ -2002,25 +2002,31 @@
}
/// Concrete shadow object representing a return statement in kernel form.
-class ShadowReturnStatement extends ReturnStatement
- implements StatementJudgment {
- ShadowReturnStatement([Expression expression]) : super(expression);
+class ReturnJudgment extends ReturnStatement implements StatementJudgment {
+ ReturnJudgment([Expression expression]) : super(expression);
+
+ ExpressionJudgment get judgment => expression;
@override
void infer<Expression, Statement, Initializer, Type>(
ShadowTypeInferrer inferrer,
Factory<Expression, Statement, Initializer, Type> factory) {
+ var judgment = this.judgment;
var closureContext = inferrer.closureContext;
var typeContext = !closureContext.isGenerator
? closureContext.returnOrYieldContext
: const UnknownType();
- var inferredType = expression != null
- ? inferrer.inferExpression(factory, expression, typeContext, true)
- : const VoidType();
+ DartType inferredType;
+ if (expression != null) {
+ inferrer.inferExpression(factory, judgment, typeContext, true);
+ inferredType = judgment.inferredType;
+ } else {
+ inferredType = const VoidType();
+ }
// 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) {
+ if (judgment != null) {
closureContext.handleReturn(
inferrer, inferredType, expression, fileOffset);
}