Chromium Code Reviews| Index: pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
| diff --git a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
| index d97abb45d0812d06cdc18b90137c920ec581bbec..0755833ef5afd14e3d92b05b3256744f195182b4 100644 |
| --- a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
| +++ b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
| @@ -134,8 +134,28 @@ class CodeGenerator extends tree_ir.Visitor<dynamic, js.Expression> { |
| @override |
| js.Expression visitConcatenateStrings(tree_ir.ConcatenateStrings node) { |
| - return giveup(node); |
| - // TODO: implement visitConcatenateStrings |
| + js.Expression addStrings(js.Expression left, js.Expression right) { |
| + return new js.Binary('+', left, right); |
| + } |
| + |
| + js.Expression toString(tree_ir.Expression input) { |
| + bool useDirectly = input is tree_ir.Constant && |
| + (input.expression.value.isString || |
| + input.expression.value.isInt || |
| + input.expression.value.isBool); |
| + js.Expression value = visit(input); |
| + if (useDirectly) { |
| + return value; |
| + } else { |
| + Element convertToString = glue.getStringConversion(); |
| + registry.registerStaticUse(convertToString); |
| + js.Expression access = glue.staticFunctionAccess(convertToString); |
| + return (new js.Call(access, <js.Expression>[value])); |
| + } |
| + } |
| + |
| + Iterable<js.Expression> parts = node.arguments.map(toString); |
| + return parts.skip(1).fold(parts.first, addStrings); |
|
asgerf
2015/02/06 10:37:25
Could be: parts.reduce(addStrings)
|
| } |
| @override |