| Index: pkg/js_ast/lib/src/template.dart
|
| diff --git a/pkg/js_ast/lib/src/template.dart b/pkg/js_ast/lib/src/template.dart
|
| index 34ad9721aa587c41e446f77a47f8a5f5b5f02743..d7946cd0db60f06f1def646662d685c4baa1fe7b 100644
|
| --- a/pkg/js_ast/lib/src/template.dart
|
| +++ b/pkg/js_ast/lib/src/template.dart
|
| @@ -10,7 +10,6 @@ class TemplateManager {
|
|
|
| TemplateManager();
|
|
|
| -
|
| Template lookupExpressionTemplate(String source) {
|
| return expressionTemplates[source];
|
| }
|
| @@ -55,13 +54,15 @@ class Template {
|
| bool get isPositional => holeNames == null;
|
|
|
| Template(this.source, this.ast,
|
| - {this.isExpression: true, this.forceCopy: false}) {
|
| + {this.isExpression: true, this.forceCopy: false}) {
|
| assert(this.isExpression ? ast is Expression : ast is Statement);
|
| _compile();
|
| }
|
|
|
| Template.withExpressionResult(this.ast)
|
| - : source = null, isExpression = true, forceCopy = false {
|
| + : source = null,
|
| + isExpression = true,
|
| + forceCopy = false {
|
| assert(ast is Expression);
|
| assert(_checkNoPlaceholders());
|
| positionalArgumentCount = 0;
|
| @@ -69,7 +70,9 @@ class Template {
|
| }
|
|
|
| Template.withStatementResult(this.ast)
|
| - : source = null, isExpression = false, forceCopy = false {
|
| + : source = null,
|
| + isExpression = false,
|
| + forceCopy = false {
|
| assert(ast is Statement);
|
| assert(_checkNoPlaceholders());
|
| positionalArgumentCount = 0;
|
| @@ -89,7 +92,7 @@ class Template {
|
| instantiator = generator.compile(ast);
|
| positionalArgumentCount = generator.analysis.count;
|
| Set<String> names = generator.analysis.holeNames;
|
| - holeNames = names.toList(growable:false);
|
| + holeNames = names.toList(growable: false);
|
| }
|
|
|
| /// Instantiates the template with the given [arguments].
|
| @@ -128,14 +131,12 @@ class Template {
|
| */
|
| typedef Node Instantiator(var arguments);
|
|
|
| -
|
| /**
|
| * InstantiatorGeneratorVisitor compiles a template. This class compiles a tree
|
| * containing [InterpolatedNode]s into a function that will create a copy of the
|
| * tree with the interpolated nodes substituted with provided values.
|
| */
|
| class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
| -
|
| final bool forceCopy;
|
|
|
| InterpolatedNodeAnalysis analysis = new InterpolatedNodeAnalysis();
|
| @@ -222,6 +223,7 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
| return error('Interpolated value #$nameOrPosition is not '
|
| 'an Expression or List of Expressions: $value');
|
| }
|
| +
|
| if (value is Iterable) return value.map(toExpression);
|
| return toExpression(value);
|
| };
|
| @@ -247,8 +249,9 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
| if (item is Parameter) return item;
|
| if (item is String) return new Parameter(item);
|
| return error('Interpolated value #$nameOrPosition is not a Parameter or'
|
| - ' List of Parameters: $value');
|
| + ' List of Parameters: $value');
|
| }
|
| +
|
| if (value is Iterable) return value.map(toParameter);
|
| return toParameter(value);
|
| };
|
| @@ -283,10 +286,12 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
| var value = arguments[nameOrPosition];
|
| Statement toStatement(item) {
|
| if (item is Statement) return item;
|
| - if (item is Expression) return item.toStatement();;
|
| + if (item is Expression) return item.toStatement();
|
| + ;
|
| return error('Interpolated value #$nameOrPosition is not '
|
| - 'a Statement or List of Statements: $value');
|
| + 'a Statement or List of Statements: $value');
|
| }
|
| +
|
| if (value is Iterable) return value.map(toStatement);
|
| return toStatement(value);
|
| };
|
| @@ -306,6 +311,7 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
| statements.add(node.toStatement());
|
| }
|
| }
|
| +
|
| for (Instantiator instantiator in instantiators) {
|
| add(instantiator(arguments));
|
| }
|
| @@ -327,6 +333,7 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
| statements.add(node.toStatement());
|
| }
|
| }
|
| +
|
| for (Instantiator instantiator in instantiators) {
|
| add(instantiator(arguments));
|
| }
|
| @@ -360,11 +367,13 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
| var value = arguments[nameOrPosition];
|
| if (value is bool) return value;
|
| if (value is Expression) return value;
|
| - if (value is String) return convertStringToVariableUse(value);;
|
| + if (value is String) return convertStringToVariableUse(value);
|
| + ;
|
| error('Interpolated value #$nameOrPosition '
|
| - 'is not an Expression: $value');
|
| + 'is not an Expression: $value');
|
| };
|
| }
|
| +
|
| var makeCondition = compileCondition(node.condition);
|
| Instantiator makeThen = visit(node.then);
|
| Instantiator makeOtherwise = visit(node.otherwise);
|
| @@ -377,10 +386,7 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
| return makeOtherwise(arguments);
|
| }
|
| }
|
| - return new If(
|
| - condition,
|
| - makeThen(arguments),
|
| - makeOtherwise(arguments));
|
| + return new If(condition, makeThen(arguments), makeOtherwise(arguments));
|
| };
|
| }
|
|
|
| @@ -389,9 +395,7 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
| Instantiator makeThen = visit(node.then);
|
| Instantiator makeOtherwise = visit(node.otherwise);
|
| return (arguments) {
|
| - return new If(
|
| - makeCondition(arguments),
|
| - makeThen(arguments),
|
| + return new If(makeCondition(arguments), makeThen(arguments),
|
| makeOtherwise(arguments));
|
| };
|
| }
|
| @@ -402,9 +406,8 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
| Instantiator makeUpdate = visitNullable(node.update);
|
| Instantiator makeBody = visit(node.body);
|
| return (arguments) {
|
| - return new For(
|
| - makeInit(arguments), makeCondition(arguments), makeUpdate(arguments),
|
| - makeBody(arguments));
|
| + return new For(makeInit(arguments), makeCondition(arguments),
|
| + makeUpdate(arguments), makeBody(arguments));
|
| };
|
| }
|
|
|
| @@ -413,9 +416,7 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
| Instantiator makeObject = visit(node.object);
|
| Instantiator makeBody = visit(node.body);
|
| return (arguments) {
|
| - return new ForIn(
|
| - makeLeftHandSide(arguments),
|
| - makeObject(arguments),
|
| + return new ForIn(makeLeftHandSide(arguments), makeObject(arguments),
|
| makeBody(arguments));
|
| };
|
| }
|
| @@ -453,7 +454,8 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
|
|
| Instantiator visitDartYield(DartYield node) {
|
| Instantiator makeExpression = visit(node.expression);
|
| - return (arguments) => new DartYield(makeExpression(arguments), node.hasStar);
|
| + return (arguments) =>
|
| + new DartYield(makeExpression(arguments), node.hasStar);
|
| }
|
|
|
| Instantiator visitThrow(Throw node) {
|
| @@ -472,17 +474,19 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
| Instantiator visitCatch(Catch node) {
|
| Instantiator makeDeclaration = visit(node.declaration);
|
| Instantiator makeBody = visit(node.body);
|
| - return (arguments) => new Catch(
|
| - makeDeclaration(arguments), makeBody(arguments));
|
| + return (arguments) =>
|
| + new Catch(makeDeclaration(arguments), makeBody(arguments));
|
| }
|
|
|
| Instantiator visitSwitch(Switch node) {
|
| Instantiator makeKey = visit(node.key);
|
| Iterable<Instantiator> makeCases = node.cases.map(visit);
|
| return (arguments) {
|
| - return new Switch(makeKey(arguments),
|
| - makeCases.map((Instantiator makeCase) => makeCase(arguments))
|
| - .toList());
|
| + return new Switch(
|
| + makeKey(arguments),
|
| + makeCases
|
| + .map((Instantiator makeCase) => makeCase(arguments))
|
| + .toList());
|
| };
|
| }
|
|
|
| @@ -537,9 +541,7 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
| Instantiator makeValue = visitNullable(node.value);
|
| return (arguments) {
|
| return new Assignment.compound(
|
| - makeLeftHandSide(arguments),
|
| - op,
|
| - makeValue(arguments));
|
| + makeLeftHandSide(arguments), op, makeValue(arguments));
|
| };
|
| }
|
|
|
| @@ -556,10 +558,8 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
| Instantiator makeCondition = visit(cond.condition);
|
| Instantiator makeThen = visit(cond.then);
|
| Instantiator makeOtherwise = visit(cond.otherwise);
|
| - return (arguments) => new Conditional(
|
| - makeCondition(arguments),
|
| - makeThen(arguments),
|
| - makeOtherwise(arguments));
|
| + return (arguments) => new Conditional(makeCondition(arguments),
|
| + makeThen(arguments), makeOtherwise(arguments));
|
| }
|
|
|
| Instantiator visitNew(New node) =>
|
| @@ -658,8 +658,7 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
|
|
| Instantiator visitDeferredNumber(DeferredNumber node) => same(node);
|
|
|
| - Instantiator visitDeferredString(DeferredString node) =>
|
| - (arguments) => node;
|
| + Instantiator visitDeferredString(DeferredString node) => (arguments) => node;
|
|
|
| Instantiator visitLiteralBool(LiteralBool node) =>
|
| (arguments) => new LiteralBool(node.value);
|
| @@ -674,9 +673,8 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
| (arguments) => new LiteralNull();
|
|
|
| Instantiator visitStringConcatenation(StringConcatenation node) {
|
| - List<Instantiator> partMakers = node.parts
|
| - .map(visit)
|
| - .toList(growable: false);
|
| + List<Instantiator> partMakers =
|
| + node.parts.map(visit).toList(growable: false);
|
| return (arguments) {
|
| List<Literal> parts = partMakers
|
| .map((Instantiator instantiator) => instantiator(arguments))
|
| @@ -689,9 +687,8 @@ class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
|
|
|
| Instantiator visitArrayInitializer(ArrayInitializer node) {
|
| // TODO(sra): Implement splicing?
|
| - List<Instantiator> elementMakers = node.elements
|
| - .map(visit)
|
| - .toList(growable: false);
|
| + List<Instantiator> elementMakers =
|
| + node.elements.map(visit).toList(growable: false);
|
| return (arguments) {
|
| List<Expression> elements = elementMakers
|
| .map((Instantiator instantiator) => instantiator(arguments))
|
|
|