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

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

Issue 1686953005: Split Parameter and TypeParameter out of Identifier Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 10 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
« no previous file with comments | « lib/src/js/nodes.dart ('k') | lib/src/js/template.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/js/printer.dart
diff --git a/lib/src/js/printer.dart b/lib/src/js/printer.dart
index cc347255cb69d824453503dc5aeac5ba30f5cda4..c8eca7aaf988647380fd2cd9eeebbf7789291f14 100644
--- a/lib/src/js/printer.dart
+++ b/lib/src/js/printer.dart
@@ -213,9 +213,15 @@ class Printer extends TypeScriptTypePrinter implements NodeVisitor {
out(",");
spaceOut();
}
- visitNestedExpression(nodes[i], hasRequiredType,
- newInForInit: newInForInit,
- newAtStatementBegin: newAtStatementBegin);
+ var node = nodes[i];
+ if (node is Expression) {
+ visitNestedExpression(node, hasRequiredType,
+ newInForInit: newInForInit,
+ newAtStatementBegin: newAtStatementBegin);
+ } else {
+ // TODO(ochafik): Precedence of Parameters?
+ visit(node);
+ }
}
}
@@ -878,12 +884,20 @@ class Printer extends TypeScriptTypePrinter implements NodeVisitor {
visitIdentifier(Identifier node) {
out(localNamer.getName(node));
+ }
+
+ visitParameter(Parameter node) {
+ if (node.isRest) out('...');
+ visit(node.binding);
outTypeAnnotation(node.type);
}
- visitRestParameter(RestParameter node) {
- out('...');
- visitIdentifier(node.parameter);
+ visitTypeParameter(TypeParameter node) {
+ visit(node.name);
+ if (node.bound != null && options.shouldEmitTypes) {
+ out(" extends ");
+ visit(node.bound);
+ }
}
bool isDigit(int charCode) {
@@ -944,10 +958,11 @@ class Printer extends TypeScriptTypePrinter implements NodeVisitor {
visitArrowFun(ArrowFun fun) {
localNamer.enterScope(fun);
- if (fun.params.length == 1 &&
+ if (fun.params.length == 1 && fun.params.single.binding is Expression &&
(fun.params.single.type == null || !options.shouldEmitTypes)) {
- visitNestedExpression(fun.params.single, SPREAD,
- newInForInit: false, newAtStatementBegin: false);
+ visit(fun.params.single.binding);
+ // visitNestedExpression(fun.params.single, SPREAD,
+ // newInForInit: false, newAtStatementBegin: false);
} else {
out("(");
visitCommaSeparated(fun.params, SPREAD,
@@ -1093,7 +1108,7 @@ class Printer extends TypeScriptTypePrinter implements NodeVisitor {
lineOut();
}
- void outTypeParams(Iterable<Identifier> typeParams) {
+ void outTypeParams(Iterable<TypeParameter> typeParams) {
if (typeParams != null && options.shouldEmitTypes && typeParams.isNotEmpty) {
out("<");
var first = true;
@@ -1391,7 +1406,18 @@ class VarCollector extends BaseVisitor {
nested = true;
if (fun.params != null) {
for (var param in fun.params) {
- params.add(param.name);
+ collectBinding(Node node) {
+ if (node is Identifier) {
+ // TODO(ochafik): collect destructured
+ params.add(node.name);
+ } else if (node is DestructuredVariable) {
+ collectBinding(node.name);
+ collectBinding(node.structure);
+ } else if (node is BindingPattern) {
+ node.variables.forEach(collectBinding);
+ }
+ }
+ collectBinding(param.binding);
}
}
fun.body.accept(this);
@@ -1644,12 +1670,13 @@ abstract class VariableDeclarationVisitor<T> extends BaseVisitor<T> {
_scanVariableBinding(VariableBinding d) {
if (d is Identifier) declare(d);
+ else if (d is Parameter) _scanVariableBinding(d.binding);
else d.accept(this);
}
- visitRestParameter(RestParameter node) {
- _scanVariableBinding(node.parameter);
- super.visitRestParameter(node);
+ visitParameter(Parameter node) {
+ _scanVariableBinding(node.binding);
+ super.visitParameter(node);
}
visitDestructuredVariable(DestructuredVariable node) {
« no previous file with comments | « lib/src/js/nodes.dart ('k') | lib/src/js/template.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698