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

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

Issue 795933005: Create a Tree IR builder for JavaScript specific nodes. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Move identicalFunction. Created 6 years 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 a0fb7601ff86fdcbbf624f26a1111e1227e1b3d6..b6a1fd5d30170b183ad88a2887eca5f8b5b1f97e 100644
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
@@ -10,7 +10,6 @@ import '../elements/elements.dart';
import '../cps_ir/cps_ir_nodes.dart' as cps_ir;
import '../util/util.dart' show CURRENT_ELEMENT_SPANNABLE;
import 'tree_ir_nodes.dart';
-import '../js_backend/codegen/glue.dart';
/**
* Builder translates from CPS-based IR to direct-style Tree.
@@ -46,8 +45,6 @@ import '../js_backend/codegen/glue.dart';
*/
class Builder extends cps_ir.Visitor<Node> {
final dart2js.InternalErrorFunction internalError;
- final Element identicalFunction;
- final Glue glue;
/// Maps variable/parameter elements to the Tree variables that represent it.
final Map<Element, List<Variable>> element2variables =
@@ -66,13 +63,11 @@ class Builder extends cps_ir.Visitor<Node> {
Builder parent;
- Builder(this.glue, this.internalError, this.identicalFunction);
+ Builder(this.internalError, [this.parent]);
- Builder.inner(Builder parent)
- : this.parent = parent,
- this.glue = parent.glue,
- this.internalError = parent.internalError,
- this.identicalFunction = parent.identicalFunction;
+ Builder createInnerBuilder() {
+ return new Builder(internalError, this);
+ }
/// Variable used in [buildPhiAssignments] as a temporary when swapping
/// variables.
@@ -118,10 +113,14 @@ class Builder extends cps_ir.Visitor<Node> {
ExecutableDefinition build(cps_ir.ExecutableDefinition node) {
if (node is cps_ir.FieldDefinition) {
return buildField(node);
- } else if (node is cps_ir.FunctionDefinition) {
+ } else {
+ assert(dart2js.invariant(
+ currentElement,
+ node is cps_ir.FunctionDefinition,
+ message: 'expected FunctionDefinition or FieldDefinition, '
+ ' found $node'));
return buildFunction(node);
}
- assert(false);
}
FieldDefinition buildField(cps_ir.FieldDefinition node) {
@@ -276,7 +275,13 @@ class Builder extends cps_ir.Visitor<Node> {
return first;
}
- visitNode(cps_ir.Node node) => throw "Unhandled node: $node";
+ 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";
+ }
+ }
Statement visitLetPrim(cps_ir.LetPrim node) {
Variable variable = getVariable(node.primitive);
@@ -468,7 +473,7 @@ class Builder extends cps_ir.Visitor<Node> {
}
FunctionDefinition makeSubFunction(cps_ir.FunctionDefinition function) {
- return new Builder.inner(this).buildFunction(function);
+ return createInnerBuilder().buildFunction(function);
}
Node visitCreateFunction(cps_ir.CreateFunction node) {
@@ -501,26 +506,5 @@ class Builder extends cps_ir.Visitor<Node> {
Expression visitIsTrue(cps_ir.IsTrue node) {
return getVariableReference(node.value);
}
-
- dart2js.Selector get identicalSelector {
- return new dart2js.Selector.call('identical', null, 2);
- }
-
- Expression visitIdentical(cps_ir.Identical node) {
- return new InvokeStatic(
- identicalFunction,
- identicalSelector,
- <Expression>[getVariableReference(node.left),
- getVariableReference(node.right)]);
- }
-
- Expression visitInterceptor(cps_ir.Interceptor node) {
- Element getInterceptor = glue.getInterceptorMethod;
- glue.registerUseInterceptorInCodegen();
- return new InvokeStatic(
- getInterceptor,
- new dart2js.Selector.fromElement(getInterceptor),
- <Expression>[getVariableReference(node.input)]);
- }
}
« 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