Handle ConstantExpression in ssa and kernel impact

The ssa builder now also fails if we have any unhandled nodes.

Change-Id: Ieaaa6a86edcc3ead0a46c70c2e513c1fe581aee8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97102
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
diff --git a/pkg/compiler/lib/src/kernel/kernel_impact.dart b/pkg/compiler/lib/src/kernel/kernel_impact.dart
index 7fe6670..2b2499e 100644
--- a/pkg/compiler/lib/src/kernel/kernel_impact.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_impact.dart
@@ -785,9 +785,8 @@
 
   @override
   void registerConstant(ir.ConstantExpression node) {
-    // ignore: unused_local_variable
     ConstantValue value = elementMap.getConstantValue(node);
-    // TODO(johnniwinther,fishythefish): Register the constant.
+    impactBuilder.registerConstantUse(new ConstantUse.literal(value));
   }
 
   @override
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 242fd7a..8047624 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -1436,29 +1436,8 @@
   }
 
   @override
-  void defaultExpression(ir.Expression expression) {
-    // TODO(johnniwinther): We should make this an internal error.
-    _trap('Unhandled ir.${expression.runtimeType}  $expression');
-  }
-
-  @override
-  void defaultStatement(ir.Statement statement) {
-    // TODO(johnniwinther): We should make this an internal error.
-    _trap('Unhandled ir.${statement.runtimeType}  $statement');
-    pop();
-  }
-
-  void _trap(String message) {
-    HInstruction nullValue = graph.addConstantNull(closedWorld);
-    HInstruction errorMessage = graph.addConstantString(message, closedWorld);
-    HInstruction trap = new HForeignCode(
-        js.js.parseForeignJS("#.#"),
-        abstractValueDomain.dynamicType,
-        <HInstruction>[nullValue, errorMessage]);
-    trap.sideEffects
-      ..setAllSideEffects()
-      ..setDependsOnSomething();
-    push(trap);
+  void defaultNode(ir.Node node) {
+    throw new UnsupportedError("Unhandled node $node (${node.runtimeType})");
   }
 
   /// Returns the current source element. This is used by the type builder.
@@ -1545,6 +1524,12 @@
     }
   }
 
+  @override
+  void visitConstantExpression(ir.ConstantExpression node) {
+    stack.add(
+        graph.addConstant(_elementMap.getConstantValue(node), closedWorld));
+  }
+
   /// Returns true if the [type] is a valid return type for an asynchronous
   /// function.
   ///