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 |