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

Unified Diff: lib/src/js/nodes.dart

Issue 1484263002: Use destructuring assignments for named parameters (#180) (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Destructure function params directly (no more opts in most cases) Created 5 years, 1 month 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: lib/src/js/nodes.dart
diff --git a/lib/src/js/nodes.dart b/lib/src/js/nodes.dart
index 2f32feb0cfd8faa544e98ce718c8b92ea127956e..457caf98cdf4b2e2c27026ba041f778acbb479ef 100644
--- a/lib/src/js/nodes.dart
+++ b/lib/src/js/nodes.dart
@@ -82,6 +82,10 @@ abstract class NodeVisitor<T> {
T visitInterpolatedStatement(InterpolatedStatement node);
T visitInterpolatedMethod(InterpolatedMethod node);
T visitInterpolatedIdentifier(InterpolatedIdentifier node);
+
+ T visitArrayDestructuring(ArrayDestructuring node);
+ T visitObjectDestructuring(ObjectDestructuring node);
+ T visitDestructuredVariable(DestructuredVariable node);
}
class BaseVisitor<T> implements NodeVisitor<T> {
@@ -197,6 +201,13 @@ class BaseVisitor<T> implements NodeVisitor<T> {
T visitAwait(Await node) => visitExpression(node);
T visitDartYield(DartYield node) => visitStatement(node);
+
+ T visitDestructuring(Destructuring node) => visitNode(node);
+ T visitArrayDestructuring(ArrayDestructuring node)
+ => visitDestructuring(node);
+ T visitObjectDestructuring(ObjectDestructuring node)
+ => visitDestructuring(node);
+ T visitDestructuredVariable(DestructuredVariable node) => visitNode(node);
}
abstract class Node {
@@ -217,7 +228,7 @@ abstract class Node {
withClosureAnnotation(ClosureAnnotation closureAnnotation) {
if (this.closureAnnotation == closureAnnotation) return this;
-
+
return _clone()
..sourceInformation = sourceInformation
.._closureAnnotation = closureAnnotation;
@@ -738,10 +749,10 @@ class Assignment extends Expression {
class VariableInitialization extends Assignment {
/** [value] may be null. */
- VariableInitialization(Identifier declaration, Expression value)
+ VariableInitialization(Declarator declaration, Expression value)
: super(declaration, value);
- Identifier get declaration => leftHandSide;
+ Declarator get declaration => leftHandSide;
accept(NodeVisitor visitor) => visitor.visitVariableInitialization(this);
@@ -749,6 +760,55 @@ class VariableInitialization extends Assignment {
new VariableInitialization(declaration, value);
}
+abstract class Declarator extends Expression {
Jennifer Messerly 2015/12/01 02:10:27 The ES6 spec calls this a "Binding", as in Binding
ochafik 2015/12/02 20:05:46 Done (thank you so much for all these links, I fee
+}
+
+class DestructuredVariable extends Expression implements Parameter {
+ final Identifier name;
+ final Destructuring structure;
+ final Expression defaultValue;
+ DestructuredVariable({this.name, this.structure, this.defaultValue});
+
+ accept(NodeVisitor visitor) => visitor.visitDestructuredVariable(this);
+ void visitChildren(NodeVisitor visitor) {
+ name?.accept(visitor);
+ structure?.accept(visitor);
+ defaultValue?.accept(visitor);
+ }
+
+ @override int get precedenceLevel => DESTRUCTURING;
+ @override Node _clone() =>
+ new DestructuredVariable(
+ name: name, structure: structure, defaultValue: defaultValue);
+}
+
+abstract class Destructuring extends Expression implements Declarator {
+ final List<DestructuredVariable> variables;
+ Destructuring(this.variables);
+
+ void visitChildren(NodeVisitor visitor) {
+ for (DestructuredVariable v in variables) v.accept(visitor);
+ }
+}
+
+class ObjectDestructuring extends Destructuring {
+ ObjectDestructuring(List<DestructuredVariable> variables)
+ : super(variables);
+ accept(NodeVisitor visitor) => visitor.visitObjectDestructuring(this);
+
+ @override int get precedenceLevel => DESTRUCTURING;
+ @override Node _clone() => new ObjectDestructuring(variables);
+}
+
+class ArrayDestructuring extends Destructuring {
+ ArrayDestructuring(List<DestructuredVariable> variables)
+ : super(variables);
+ accept(NodeVisitor visitor) => visitor.visitArrayDestructuring(this);
+
+ @override int get precedenceLevel => DESTRUCTURING;
+ @override Node _clone() => new ObjectDestructuring(variables);
+}
+
class Conditional extends Expression {
final Expression condition;
final Expression then;
@@ -944,9 +1004,9 @@ class Postfix extends Expression {
int get precedenceLevel => UNARY;
}
-abstract class Parameter implements Expression {}
+abstract class Parameter implements Expression, Declarator {}
-class Identifier extends Expression implements Parameter {
+class Identifier extends Expression implements Parameter, Declarator {
final String name;
final bool allowRename;

Powered by Google App Engine
This is Rietveld 408576698