Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1150)

Unified Diff: pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart

Issue 979693003: Streamline the CPS IR Visitor interface. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Signal an error in visit methods that should not be called. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/compiler/lib/src/js_backend/codegen/task.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
index 78ce88caf7e2ac9beba3dcee3d1e38ff0ea3b162..24255022ee55661d1ccd5e8f767b72ff6fa704fd 100644
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
@@ -43,7 +43,7 @@ import 'tree_ir_nodes.dart';
* particular, intermediate values and blocks used for local control flow are
* still all named.
*/
-class Builder extends cps_ir.Visitor<Node> {
+class Builder implements cps_ir.Visitor<Node> {
final dart2js.InternalErrorFunction internalError;
/// Maps variable/parameter elements to the Tree variables that represent it.
@@ -324,12 +324,30 @@ class Builder extends cps_ir.Visitor<Node> {
return first;
}
- visitNode(cps_ir.Node node) {
- if (node is cps_ir.JsSpecificNode) {
- throw "Cannot handle JS specific IR nodes in this visitor";
- } else {
- throw "Unhandled node: $node";
- }
+ visit(cps_ir.Node node) => node.accept(this);
+
+ unexpectedNode(cps_ir.Node node) {
+ internalError(CURRENT_ELEMENT_SPANNABLE, 'Unexpected IR node: $node');
+ }
+
+ // JS-specific nodes are handled by a subclass.
+ visitSetField(cps_ir.SetField node) => unexpectedNode(node);
+ visitIdentical(cps_ir.Identical node) => unexpectedNode(node);
+ visitInterceptor(cps_ir.Interceptor node) => unexpectedNode(node);
+ visitCreateInstance(cps_ir.CreateInstance node) => unexpectedNode(node);
+ visitGetField(cps_ir.GetField node) => unexpectedNode(node);
+ visitCreateBox(cps_ir.CreateBox node) => unexpectedNode(node);
+
+ // Executable definitions are not visited directly. They have 'build'
+ // functions as entry points.
+ visitFieldDefinition(cps_ir.FieldDefinition node) {
+ return unexpectedNode(node);
+ }
+ visitFunctionDefinition(cps_ir.FunctionDefinition node) {
+ return unexpectedNode(node);
+ }
+ visitConstructorDefinition(cps_ir.ConstructorDefinition node) {
+ return unexpectedNode(node);
}
Initializer visitFieldInitializer(cps_ir.FieldInitializer node) {
@@ -595,18 +613,22 @@ class Builder extends cps_ir.Visitor<Node> {
}
}
- Expression visitParameter(cps_ir.Parameter node) {
+ visitParameter(cps_ir.Parameter node) {
// Continuation parameters are not visited (continuations themselves are
// not visited yet).
- internalError(CURRENT_ELEMENT_SPANNABLE, 'Unexpected IR node: $node');
- return null;
+ unexpectedNode(node);
}
- Expression visitContinuation(cps_ir.Continuation node) {
+ visitContinuation(cps_ir.Continuation node) {
// Until continuations with multiple uses are supported, they are not
// visited.
- internalError(CURRENT_ELEMENT_SPANNABLE, 'Unexpected IR node: $node.');
- return null;
+ unexpectedNode(node);
+ }
+
+ visitMutableVariable(cps_ir.MutableVariable node) {
+ // These occur as parameters or bound by LetMutable. They are not visited
+ // directly.
+ unexpectedNode(node);
}
Expression visitIsTrue(cps_ir.IsTrue node) {
« no previous file with comments | « pkg/compiler/lib/src/js_backend/codegen/task.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698