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

Unified Diff: sdk/lib/_internal/compiler/implementation/js/nodes.dart

Issue 237583014: JS templates (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: cleanup Created 6 years, 8 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: 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

Powered by Google App Engine
This is Rietveld 408576698