| Index: pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
|
| diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
|
| index 947df50a4220bf5619614bf11cbb0a8c0ecc70a5..4aaacef222f0d783fac20ba811662315463165f5 100644
|
| --- a/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
|
| +++ b/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
|
| @@ -12,6 +12,7 @@ import '../elements/elements.dart';
|
| import '../universe/universe.dart';
|
| import '../universe/universe.dart' show Selector;
|
| import 'optimization/optimization.dart';
|
| +import '../closure.dart' show ClosureClassElement;
|
|
|
| // The Tree language is the target of translation out of the CPS-based IR.
|
| //
|
| @@ -650,6 +651,47 @@ class ConstructorDefinition extends FunctionDefinition {
|
| applyPass(Pass pass) => pass.rewriteConstructorDefinition(this);
|
| }
|
|
|
| +abstract class JsSpecificNode implements Node {}
|
| +
|
| +class CreateBox extends Expression implements JsSpecificNode {
|
| + accept(ExpressionVisitor visitor) => visitor.visitCreateBox(this);
|
| + accept1(ExpressionVisitor1 visitor, arg) => visitor.visitCreateBox(this, arg);
|
| +}
|
| +
|
| +class CreateClosureClass extends Expression implements JsSpecificNode {
|
| + ClosureClassElement classElement;
|
| + List<Expression> arguments;
|
| +
|
| + CreateClosureClass(this.classElement, this.arguments);
|
| +
|
| + accept(ExpressionVisitor visitor) => visitor.visitCreateClosureClass(this);
|
| + accept1(ExpressionVisitor1 visitor, arg) {
|
| + return visitor.visitCreateClosureClass(this, arg);
|
| + }
|
| +}
|
| +
|
| +class GetField extends Expression implements JsSpecificNode {
|
| + Expression object;
|
| + Element field;
|
| +
|
| + GetField(this.object, this.field);
|
| +
|
| + accept(ExpressionVisitor visitor) => visitor.visitGetField(this);
|
| + accept1(ExpressionVisitor1 visitor, arg) => visitor.visitGetField(this, arg);
|
| +}
|
| +
|
| +class SetField extends Statement implements JsSpecificNode {
|
| + Expression object;
|
| + Element field;
|
| + Expression value;
|
| + Statement next;
|
| +
|
| + SetField(this.object, this.field, this.value, this.next);
|
| +
|
| + accept(StatementVisitor visitor) => visitor.visitSetField(this);
|
| + accept1(StatementVisitor1 visitor, arg) => visitor.visitSetField(this, arg);
|
| +}
|
| +
|
| abstract class ExpressionVisitor<E> {
|
| E visitExpression(Expression e) => e.accept(this);
|
| E visitVariable(Variable node);
|
| @@ -670,6 +712,9 @@ abstract class ExpressionVisitor<E> {
|
| E visitFunctionExpression(FunctionExpression node);
|
| E visitFieldInitializer(FieldInitializer node);
|
| E visitSuperInitializer(SuperInitializer node);
|
| + E visitGetField(GetField node);
|
| + E visitCreateBox(CreateBox node);
|
| + E visitCreateClosureClass(CreateClosureClass node);
|
| }
|
|
|
| abstract class ExpressionVisitor1<E, A> {
|
| @@ -692,6 +737,9 @@ abstract class ExpressionVisitor1<E, A> {
|
| E visitFunctionExpression(FunctionExpression node, A arg);
|
| E visitFieldInitializer(FieldInitializer node, A arg);
|
| E visitSuperInitializer(SuperInitializer node, A arg);
|
| + E visitGetField(GetField node, A arg);
|
| + E visitCreateBox(CreateBox node, A arg);
|
| + E visitCreateClosureClass(CreateClosureClass node, A arg);
|
| }
|
|
|
| abstract class StatementVisitor<S> {
|
| @@ -706,6 +754,7 @@ abstract class StatementVisitor<S> {
|
| S visitWhileCondition(WhileCondition node);
|
| S visitFunctionDeclaration(FunctionDeclaration node);
|
| S visitExpressionStatement(ExpressionStatement node);
|
| + S visitSetField(SetField node);
|
| }
|
|
|
| abstract class StatementVisitor1<S, A> {
|
| @@ -720,6 +769,7 @@ abstract class StatementVisitor1<S, A> {
|
| S visitWhileCondition(WhileCondition node, A arg);
|
| S visitFunctionDeclaration(FunctionDeclaration node, A arg);
|
| S visitExpressionStatement(ExpressionStatement node, A arg);
|
| + S visitSetField(SetField node, A arg);
|
| }
|
|
|
| abstract class Visitor<S, E> implements ExpressionVisitor<E>,
|
| @@ -854,4 +904,21 @@ class RecursiveVisitor extends Visitor {
|
| visitSuperInitializer(SuperInitializer node) {
|
| node.arguments.forEach(visitStatement);
|
| }
|
| +
|
| + visitGetField(GetField node) {
|
| + visitExpression(node.object);
|
| + }
|
| +
|
| + visitSetField(SetField node) {
|
| + visitExpression(node.object);
|
| + visitExpression(node.value);
|
| + visitStatement(node.next);
|
| + }
|
| +
|
| + visitCreateBox(CreateBox node) {
|
| + }
|
| +
|
| + visitCreateClosureClass(CreateClosureClass node) {
|
| + node.arguments.forEach(visitExpression);
|
| + }
|
| }
|
|
|