| Index: pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
|
| diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
|
| index 9f0b7a0cb543960c497a6feb3676b51a733983b9..000a8523307644e2daff297f2b58a100c5970a17 100644
|
| --- a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
|
| +++ b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
|
| @@ -214,7 +214,7 @@ abstract class InteriorNode extends Node {
|
| void set body(Expression body);
|
| }
|
|
|
| -/// Invoke a static function or static field getter/setter.
|
| +/// Invoke a static function or static getter/setter.
|
| class InvokeStatic extends Expression implements Invoke {
|
| /// [FunctionElement] or [FieldElement].
|
| final Entity target;
|
| @@ -624,6 +624,34 @@ class GetField extends Primitive implements JsSpecificNode {
|
| accept(Visitor visitor) => visitor.visitGetField(this);
|
| }
|
|
|
| +/// Reads the value of a static field or tears off a static method.
|
| +class GetStatic extends Primitive {
|
| + final Element element;
|
| + final SourceInformation sourceInformation;
|
| +
|
| + GetStatic(this.element, this.sourceInformation);
|
| +
|
| + accept(Visitor visitor) => visitor.visitGetStatic(this);
|
| +}
|
| +
|
| +/// Sets the value of a static field.
|
| +class SetStatic extends Expression implements InteriorNode {
|
| + final Element element;
|
| + final Reference<Primitive> value;
|
| + Expression body;
|
| + final SourceInformation sourceInformation;
|
| +
|
| + SetStatic(this.element, Primitive value, this.sourceInformation)
|
| + : this.value = new Reference<Primitive>(value);
|
| +
|
| + Expression plug(Expression expr) {
|
| + assert(body == null);
|
| + return body = expr;
|
| + }
|
| +
|
| + accept(Visitor visitor) => visitor.visitSetStatic(this);
|
| +}
|
| +
|
| /// Creates an object for holding boxed variables captured by a closure.
|
| class CreateBox extends Primitive implements JsSpecificNode {
|
| accept(Visitor visitor) => visitor.visitCreateBox(this);
|
| @@ -1005,6 +1033,7 @@ abstract class Visitor<T> {
|
| T visitTypeOperator(TypeOperator node);
|
| T visitSetMutableVariable(SetMutableVariable node);
|
| T visitDeclareFunction(DeclareFunction node);
|
| + T visitSetStatic(SetStatic node);
|
|
|
| // Definitions.
|
| T visitLiteralList(LiteralList node);
|
| @@ -1017,6 +1046,7 @@ abstract class Visitor<T> {
|
| T visitContinuation(Continuation node);
|
| T visitMutableVariable(MutableVariable node);
|
| T visitNonTailThrow(NonTailThrow node);
|
| + T visitGetStatic(GetStatic node);
|
|
|
| // JavaScript specific nodes.
|
|
|
| @@ -1313,6 +1343,18 @@ class RecursiveVisitor implements Visitor {
|
| processReference(node.object);
|
| }
|
|
|
| + processGetStatic(GetStatic node) {}
|
| + visitGetStatic(GetStatic node) {
|
| + processGetStatic(node);
|
| + }
|
| +
|
| + processSetStatic(SetStatic node) {}
|
| + visitSetStatic(SetStatic node) {
|
| + processSetStatic(node);
|
| + processReference(node.value);
|
| + visit(node.body);
|
| + }
|
| +
|
| processCreateBox(CreateBox node) {}
|
| visitCreateBox(CreateBox node) {
|
| processCreateBox(node);
|
|
|