| 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);
|
|
|