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

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

Issue 1011383003: Use an explicit 'this' parameter instead of 'This' nodes. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 9 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
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 8017ba65f47139a2866f32c6084ffe7b5592055c..841da5537dd12b301610f92198d15efeb9210c96 100644
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
@@ -67,6 +67,7 @@ class Builder implements cps_ir.Visitor<Node> {
List<cps_ir.Continuation> safeForInlining = <cps_ir.Continuation>[];
ExecutableElement currentElement;
+ cps_ir.Parameter thisParameter;
cps_ir.Continuation returnContinuation;
Builder parent;
@@ -120,7 +121,10 @@ class Builder implements cps_ir.Visitor<Node> {
/// referred to by [reference].
/// This increments the reference count for the given variable, so the
/// returned expression must be used in the tree.
- VariableUse getVariableUse(cps_ir.Reference<cps_ir.Primitive> reference) {
+ Expression getVariableUse(cps_ir.Reference<cps_ir.Primitive> reference) {
+ if (reference.definition == thisParameter) {
+ return new This();
+ }
Variable variable = getVariable(reference.definition);
if (variable == null) {
// Note: this may fail because you forgot to implement a visit-function
@@ -170,6 +174,7 @@ class Builder implements cps_ir.Visitor<Node> {
FunctionDefinition buildFunction(cps_ir.FunctionDefinition node) {
currentElement = node.element;
+ thisParameter = node.thisParameter;
List<Variable> parameters =
node.parameters.map(addFunctionParameter).toList();
Statement body;
@@ -185,6 +190,7 @@ class Builder implements cps_ir.Visitor<Node> {
ConstructorDefinition buildConstructor(cps_ir.ConstructorDefinition node) {
currentElement = node.element;
+ thisParameter = node.thisParameter;
List<Variable> parameters =
node.parameters.map(addFunctionParameter).toList();
List<Initializer> initializers;
@@ -575,10 +581,6 @@ class Builder implements cps_ir.Visitor<Node> {
return new Constant(node.expression);
}
- Expression visitThis(cps_ir.This node) {
- return new This();
- }
-
Expression visitReifyTypeVar(cps_ir.ReifyTypeVar node) {
return new ReifyTypeVar(node.typeVariable);
}

Powered by Google App Engine
This is Rietveld 408576698