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

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

Issue 238633007: Redo "Add more MiniJsParser functionality." (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: 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 46d421b916f328cb9da10ac9bb06126449ad9b6f..b48c4aeb4ebebc023b14aa3a59a0d2041ab7d0d8 100644
--- a/sdk/lib/_internal/compiler/implementation/js/nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/js/nodes.dart
@@ -64,6 +64,7 @@ abstract class NodeVisitor<T> {
T visitComment(Comment node);
T visitInterpolatedExpression(InterpolatedExpression node);
+ T visitInterpolatedStatement(InterpolatedStatement node);
T visitJSExpression(JSExpression node);
}
@@ -151,6 +152,8 @@ class BaseVisitor<T> implements NodeVisitor<T> {
T visitInterpolatedExpression(InterpolatedExpression node)
=> visitExpression(node);
+ T visitInterpolatedStatement(InterpolatedStatement node)
+ => visitStatement(node);
T visitJSExpression(JSExpression node) => visitExpression(node);
// Ignore comments by default.
@@ -949,11 +952,18 @@ class Property extends Node {
}
}
-class InterpolatedExpression extends Expression {
+/// Tag class for all interpolated positions.
+abstract class InterpolatedNode implements Node {}
+
+class InterpolatedExpression extends Expression implements InterpolatedNode {
Expression value;
InterpolatedExpression(this.value);
+ void assign(Expression newValue) {
+ value = newValue;
+ }
+
accept(NodeVisitor visitor) => visitor.visitInterpolatedExpression(this);
void visitChildren(NodeVisitor visitor) {
@@ -963,24 +973,45 @@ class InterpolatedExpression extends Expression {
int get precedenceLevel => value.precedenceLevel;
}
+class InterpolatedStatement extends Statement implements InterpolatedNode {
+ Statement value;
+
+ InterpolatedStatement(this.value);
+
+ void assign(Node newValue) {
+ if (newValue is Expression)
+ value = new ExpressionStatement(newValue);
+ else
+ value = newValue;
+ }
+
+ accept(NodeVisitor visitor) => visitor.visitInterpolatedStatement(this);
+
+ void visitChildren(NodeVisitor visitor) {
+ if (value != null) value.accept(visitor);
+ }
+}
+
class JSExpression extends Expression {
Expression value;
- List<InterpolatedExpression> interpolatedExpressions;
+ List<InterpolatedNode> interpolatedNodes;
- JSExpression(this.value, this.interpolatedExpressions);
+ JSExpression(this.value, this.interpolatedNodes);
accept(NodeVisitor visitor) => visitor.visitJSExpression(this);
void visitChildren(NodeVisitor visitor) {
value.accept(visitor);
- for (InterpolatedExpression expression in interpolatedExpressions) {
- expression.accept(visitor);
+ for (InterpolatedNode node in interpolatedNodes) {
+ node.accept(visitor);
}
}
int get precedenceLevel => value.precedenceLevel;
}
+// TODO(sra): JSStatement like JSExpression.
+
/**
* [RegExpLiteral]s, despite being called "Literal", do not inherit from
* [Literal]. Indeed, regular expressions in JavaScript have a side-effect and
« no previous file with comments | « sdk/lib/_internal/compiler/implementation/js/builder.dart ('k') | sdk/lib/_internal/compiler/implementation/js/printer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698