Chromium Code Reviews| Index: sdk/lib/_internal/compiler/implementation/js/nodes.dart |
| diff --git a/sdk/lib/_internal/compiler/implementation/js/nodes.dart b/sdk/lib/_internal/compiler/implementation/js/nodes.dart |
| index b48c4aeb4ebebc023b14aa3a59a0d2041ab7d0d8..7549e6f8a7568cc65ebd11c5fe602bd988fe63ab 100644 |
| --- a/sdk/lib/_internal/compiler/implementation/js/nodes.dart |
| +++ b/sdk/lib/_internal/compiler/implementation/js/nodes.dart |
| @@ -64,8 +64,10 @@ abstract class NodeVisitor<T> { |
| T visitComment(Comment node); |
| T visitInterpolatedExpression(InterpolatedExpression node); |
| + T visitInterpolatedLiteral(InterpolatedLiteral node); |
| + T visitInterpolatedParameter(InterpolatedParameter node); |
| + T visitInterpolatedSelector(InterpolatedSelector node); |
| T visitInterpolatedStatement(InterpolatedStatement node); |
| - T visitJSExpression(JSExpression node); |
| } |
| class BaseVisitor<T> implements NodeVisitor<T> { |
| @@ -150,11 +152,18 @@ class BaseVisitor<T> implements NodeVisitor<T> { |
| T visitProperty(Property node) => visitNode(node); |
| T visitRegExpLiteral(RegExpLiteral node) => visitExpression(node); |
| + T visitInterpolatedNode(InterpolatedNode node) => visitNode(node); |
| + |
| T visitInterpolatedExpression(InterpolatedExpression node) |
| - => visitExpression(node); |
| + => visitInterpolatedNode(node); |
| + T visitInterpolatedLiteral(InterpolatedLiteral node) |
| + => visitInterpolatedNode(node); |
| + T visitInterpolatedParameter(InterpolatedParameter node) |
| + => visitInterpolatedNode(node); |
| + T visitInterpolatedSelector(InterpolatedSelector node) |
| + => visitInterpolatedNode(node); |
| T visitInterpolatedStatement(InterpolatedStatement node) |
| - => visitStatement(node); |
| - T visitJSExpression(JSExpression node) => visitExpression(node); |
| + => visitInterpolatedNode(node); |
| // Ignore comments by default. |
| T visitComment(Comment node) => null; |
| @@ -454,59 +463,33 @@ class LiteralStatement extends Statement { |
| abstract class Expression extends Node { |
| int get precedenceLevel; |
| - Call callWith(List<Expression> arguments) => new Call(this, arguments); |
| - |
| - PropertyAccess operator [](expression) { |
| - if (expression is Expression) { |
| - return new PropertyAccess(this, expression); |
| - } else if (expression is int) { |
| - return new PropertyAccess.indexed(this, expression); |
| - } else if (expression is String) { |
| - return new PropertyAccess.field(this, expression); |
| - } else { |
| - throw new ArgumentError('Expected an int, String, or Expression'); |
| - } |
| - } |
| + //PropertyAccess operator [](expression) { |
| + // // DEPRECATED. |
|
floitsch
2014/04/22 16:11:18
dead?
sra1
2014/04/23 02:33:50
Done.
|
| + // if (expression is Expression) { |
| + // return new PropertyAccess(this, expression); |
| + // } else if (expression is int) { |
| + // return new PropertyAccess.indexed(this, expression); |
| + // } else if (expression is String) { |
| + // return new PropertyAccess.field(this, expression); |
| + // } else { |
| + // throw new ArgumentError('Expected an int, String, or Expression'); |
| + // } |
| + //} |
| Statement toStatement() => new ExpressionStatement(this); |
| - Call call([expression]) { |
| - List<Expression> arguments; |
| - if (expression == null) { |
| - arguments = <Expression>[]; |
| - } else if (expression is List) { |
| - arguments = expression.map(js.toExpression).toList(); |
| - } else { |
| - arguments = <Expression>[js.toExpression(expression)]; |
| - } |
| - return callWith(arguments); |
| - } |
| - |
| - Expression operator +(expression) => binary('+', expression); |
| - |
| - Expression operator -(expression) => binary('-', expression); |
| - |
| - Expression operator &(expression) => binary('&', expression); |
| - |
| - Expression operator <(expression) => binary('<', expression); |
| - |
| - Expression operator >(expression) => binary('>', expression); |
| - |
| - Expression operator >=(expression) => binary('>=', expression); |
| - |
| - Expression binary(String operator, expression) { |
| - return new Binary(operator, this, js.toExpression(expression)); |
| - } |
| - |
| - Expression update(String operator, expression) { |
| - return new Assignment.compound(this, operator, js.toExpression(expression)); |
| - } |
| - |
| - Expression get plusPlus => new Postfix('++', this); |
| - |
| - Prefix get typeof => new Prefix('typeof', this); |
| - |
| - Prefix get not => new Prefix('!', this); |
| + //Call call([expression]) { |
|
floitsch
2014/04/22 16:11:18
dead?
sra1
2014/04/23 02:33:50
Done.
|
| + // // DEPRECATED. |
| + // List<Expression> arguments; |
| + // if (expression == null) { |
| + // arguments = <Expression>[]; |
| + // } else if (expression is List) { |
| + // arguments = expression.map(js.toExpression).toList(); |
| + // } else { |
| + // arguments = <Expression>[js.toExpression(expression)]; |
| + // } |
| + // return new Call(this, arguments); |
| + //} |
| } |
| /// Wrap a CodeBuffer as an expression. |
| @@ -953,64 +936,61 @@ class Property extends Node { |
| } |
| /// Tag class for all interpolated positions. |
| -abstract class InterpolatedNode implements Node {} |
| +abstract class InterpolatedNode implements Node { |
| + get name; // 'int' for positional interpolated nodes, 'String' for named. |
| +} |
| class InterpolatedExpression extends Expression implements InterpolatedNode { |
| - Expression value; |
| + final name; |
| - InterpolatedExpression(this.value); |
| - |
| - void assign(Expression newValue) { |
| - value = newValue; |
| - } |
| + InterpolatedExpression(this.name); |
| accept(NodeVisitor visitor) => visitor.visitInterpolatedExpression(this); |
| + void visitChildren(NodeVisitor visitor) {} |
| - void visitChildren(NodeVisitor visitor) { |
| - if (value != null) value.accept(visitor); |
| - } |
| - |
| - int get precedenceLevel => value.precedenceLevel; |
| + int get precedenceLevel => PRIMARY; |
| } |
| -class InterpolatedStatement extends Statement implements InterpolatedNode { |
| - Statement value; |
| +class InterpolatedLiteral extends Literal implements InterpolatedNode { |
| + final name; |
| - InterpolatedStatement(this.value); |
| + InterpolatedLiteral(this.name); |
| - void assign(Node newValue) { |
| - if (newValue is Expression) |
| - value = new ExpressionStatement(newValue); |
| - else |
| - value = newValue; |
| - } |
| + accept(NodeVisitor visitor) => visitor.visitInterpolatedLiteral(this); |
| + void visitChildren(NodeVisitor visitor) {} |
| +} |
| - accept(NodeVisitor visitor) => visitor.visitInterpolatedStatement(this); |
| +class InterpolatedParameter extends Expression |
| + implements Parameter, InterpolatedNode { |
| + final name; |
| - void visitChildren(NodeVisitor visitor) { |
| - if (value != null) value.accept(visitor); |
| - } |
| -} |
| + InterpolatedParameter(this.name); |
| -class JSExpression extends Expression { |
| - Expression value; |
| - List<InterpolatedNode> interpolatedNodes; |
| + accept(NodeVisitor visitor) => visitor.visitInterpolatedParameter(this); |
| + void visitChildren(NodeVisitor visitor) {} |
| - JSExpression(this.value, this.interpolatedNodes); |
| + int get precedenceLevel => PRIMARY; |
| +} |
| - accept(NodeVisitor visitor) => visitor.visitJSExpression(this); |
| +class InterpolatedSelector extends Expression implements InterpolatedNode { |
| + final name; |
| - void visitChildren(NodeVisitor visitor) { |
| - value.accept(visitor); |
| - for (InterpolatedNode node in interpolatedNodes) { |
| - node.accept(visitor); |
| - } |
| - } |
| + InterpolatedSelector(this.name); |
| + |
| + accept(NodeVisitor visitor) => visitor.visitInterpolatedSelector(this); |
| + void visitChildren(NodeVisitor visitor) {} |
| - int get precedenceLevel => value.precedenceLevel; |
| + int get precedenceLevel => PRIMARY; |
| } |
| -// TODO(sra): JSStatement like JSExpression. |
| +class InterpolatedStatement extends Statement implements InterpolatedNode { |
| + final name; |
| + |
| + InterpolatedStatement(this.name); |
| + |
| + accept(NodeVisitor visitor) => visitor.visitInterpolatedStatement(this); |
| + void visitChildren(NodeVisitor visitor) {} |
| +} |
| /** |
| * [RegExpLiteral]s, despite being called "Literal", do not inherit from |