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

Unified Diff: lib/src/js/template.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/printer.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/js/template.dart
diff --git a/lib/src/js/template.dart b/lib/src/js/template.dart
index eb55252a95903d41d2029c076ae9324af6c96e29..9eec2c59b858645013490531bbae1df5b1872abc 100644
--- a/lib/src/js/template.dart
+++ b/lib/src/js/template.dart
@@ -206,8 +206,9 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
Expression toExpression(item) {
if (item is Expression) return item;
if (item is String) return new Identifier(item);
+ if (item is Parameter) return item.binding;
return error('Interpolated value #$nameOrPosition is not '
- 'an Expression or List of Expressions: $value');
+ 'an Expression or List of Expressions: $value: ${value is Iterable ? value.map((v) => v.runtimeType) : value.runtimeType}');
}
if (value is Iterable) return value.map(toExpression);
return toExpression(value);
@@ -227,17 +228,18 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
Instantiator visitInterpolatedParameter(InterpolatedParameter node) {
var nameOrPosition = node.nameOrPosition;
+ var isRest = node.isRest;
return (arguments) {
var value = arguments[nameOrPosition];
- Parameter toIdentifier(item) {
- if (item is Parameter) return item;
- if (item is String) return new Identifier(item);
- return error('Interpolated value #$nameOrPosition is not an Identifier'
- ' or List of Identifiers: $value');
+ Parameter toParameter(item, {bool isRest: false}) {
+ if (item is Identifier) return new Parameter(item, isRest: isRest);
+ if (item is String) return new Parameter(new Identifier(item), isRest: isRest);
+ return error('Interpolated value #$nameOrPosition is not an Parameter'
+ ' or List of Parameters: $value: ${value.runtimeType}');
}
- if (value is Iterable) return value.map(toIdentifier);
- return toIdentifier(value);
+ if (value is Iterable) return value.map(toParameter);
+ return toParameter(value, isRest: isRest);
};
}
@@ -627,6 +629,21 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
Instantiator visitThis(This node) => (arguments) => new This();
Instantiator visitSuper(Super node) => (arguments) => new Super();
+ Instantiator visitParameter(Parameter node) {
+ Instantiator makeBinding = visit(node.binding);
+ Instantiator makeType = visit(node.type);
+ var isRest = node.isRest;
+ return (arguments) => new Parameter(
+ makeBinding(arguments), type: makeType(arguments), isRest: isRest);
+ }
+
+ Instantiator visitTypeParameter(TypeParameter node) {
+ Instantiator makeName = visit(node.name);
+ Instantiator makeBound = visit(node.bound);
+ return (arguments) =>
+ new TypeParameter(makeName(arguments), bound: makeBound(arguments));
+ }
+
Instantiator visitIdentifier(Identifier node) =>
(arguments) => new Identifier(node.name);
@@ -637,9 +654,6 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
(args) => new Yield(node.value != null ? visit(node.value)(args) : null,
star: node.star);
- Instantiator visitRestParameter(RestParameter node) =>
- (args) => new RestParameter(visit(node.parameter)(args));
-
Instantiator visitAccess(PropertyAccess node) {
Instantiator makeReceiver = visit(node.receiver);
Instantiator makeSelector = visit(node.selector);
« no previous file with comments | « lib/src/js/printer.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698