diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index 4c4e74d..0d2f50f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -811,7 +811,7 @@
   }
 }
 
-class ConstantEvaluator extends RecursiveResultVisitor<Constant> {
+class ConstantEvaluator extends ExpressionVisitor<Constant> {
   final ConstantsBackend backend;
   final NumberSemantics numberSemantics;
   ConstantIntFolder intFolder;
@@ -1157,7 +1157,7 @@
   }
 
   @override
-  Constant defaultTreeNode(Node node) {
+  Constant defaultExpression(Expression node) {
     // Only a subset of the expression language is valid for constant
     // evaluation.
     return createInvalidExpressionConstant(
@@ -2738,20 +2738,21 @@
         if (value is AbortConstant) return value;
         env.addVariableValue(parameter, value);
       }
-      return function.body.accept(this);
+      Statement body = function.body;
+      if (body is ReturnStatement) {
+        if (!enableConstFunctions) {
+          return createInvalidExpressionConstant(
+              node, "Return statements are not supported.");
+        }
+        return body.expression.accept(this);
+      } else {
+        return createInvalidExpressionConstant(
+            node, "Unsupported statement: ${body.runtimeType}.");
+      }
     });
   }
 
   @override
-  Constant visitReturnStatement(ReturnStatement node) {
-    if (!enableConstFunctions) {
-      return createInvalidExpressionConstant(
-          node, "Return statements are not supported.");
-    }
-    return node.expression.accept(this);
-  }
-
-  @override
   Constant visitAsExpression(AsExpression node) {
     final Constant constant = _evaluateSubexpression(node.operand);
     if (constant is AbortConstant) return constant;
