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.
///