Convert ShadowWhileStatement to WhileJudgment.

R=brianwilkerson@google.com, paulberry@google.com

Change-Id: Ifc107f6577ef80739b78a67cc7015c13c28b498b
Reviewed-on: https://dart-review.googlesource.com/61302
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
index 4b627b4..0c4014e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
@@ -102,7 +102,7 @@
         ShadowSyntheticExpression,
         TryCatchJudgment,
         ShadowTryFinally,
-        ShadowWhileStatement,
+        WhileJudgment,
         YieldJudgment,
         ThisJudgment,
         ThrowJudgment,
@@ -526,7 +526,7 @@
   @override
   Statement whileStatement(
       Token whileKeyword, Expression condition, Statement body) {
-    return new ShadowWhileStatement(condition, body)
+    return new WhileJudgment(condition, body)
       ..fileOffset = whileKeyword.charOffset;
   }
 
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 9d5e571..b532032 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
@@ -3087,21 +3087,25 @@
 }
 
 /// Concrete shadow object representing a while loop in kernel form.
-class ShadowWhileStatement extends WhileStatement implements StatementJudgment {
-  ShadowWhileStatement(Expression condition, Statement body)
-      : super(condition, body);
+class WhileJudgment extends WhileStatement implements StatementJudgment {
+  WhileJudgment(Expression condition, Statement body) : super(condition, body);
+
+  ExpressionJudgment get conditionJudgment => condition;
+
+  StatementJudgment get bodyJudgment => body;
 
   @override
   void infer<Expression, Statement, Initializer, Type>(
       ShadowTypeInferrer inferrer,
       Factory<Expression, Statement, Initializer, Type> factory) {
     inferrer.listener.whileStatementEnter(fileOffset);
+    var conditionJudgment = this.conditionJudgment;
     var expectedType = inferrer.coreTypes.boolClass.rawType;
-    var actualType = inferrer.inferExpression(
-        factory, condition, expectedType, !inferrer.isTopLevel);
-    inferrer.ensureAssignable(
-        expectedType, actualType, condition, condition.fileOffset);
-    inferrer.inferStatement(factory, body);
+    inferrer.inferExpression(
+        factory, conditionJudgment, expectedType, !inferrer.isTopLevel);
+    inferrer.ensureAssignable(expectedType, conditionJudgment.inferredType,
+        condition, condition.fileOffset);
+    inferrer.inferStatement(factory, bodyJudgment);
     inferrer.listener.whileStatementExit(fileOffset);
   }
 }