Chromium Code Reviews| Index: pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart |
| diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart |
| index d4ba56ed2a1dd962075aa5193b503d4d0a18cce1..b4680b0657c3c1df25141cc18f4172797f510465 100644 |
| --- a/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart |
| +++ b/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart |
| @@ -4,11 +4,15 @@ |
| library tree_ir_builder; |
| -import '../dart2jslib.dart' as dart2js; |
| import '../dart_types.dart'; |
| import '../elements/elements.dart'; |
| import '../cps_ir/cps_ir_nodes.dart' as cps_ir; |
| import 'tree_ir_nodes.dart'; |
| +import 'package:compiler/src/js_backend/codegen/unsugar.dart' |
| + as js_cps_ir show Boolify; |
|
sigurdm
2014/11/20 12:47:28
package import
|
| +import 'package:compiler/src/constants/expressions.dart'; |
| +import 'package:compiler/src/constants/values.dart'; |
| +import 'package:compiler/src/common.dart' as dart2js; |
| /** |
| * Builder translates from CPS-based IR to direct-style Tree. |
| @@ -473,5 +477,38 @@ class Builder extends cps_ir.Visitor<Node> { |
| Expression visitIsTrue(cps_ir.IsTrue node) { |
| return getVariableReference(node.value); |
| } |
| + |
| + /** |
| + * Boolean conversion maps any object o into a boolean. Boolean conversion is |
| + * defined by the function application |
| + * (bool v){ |
| + * assert(v != null); |
| + * return identical(v, true); |
| + * }(o) |
| + */ |
| + Expression visitBoolify(js_cps_ir.Boolify node) { |
| + /// TODO(karlklose): implement the assert(v != null) check. |
| + return new InvokeStatic( |
| + compiler.identicalFunction, |
| + identicalSelector, |
| + <Expression>[visitIsTrue(node), constantTrue]); |
| + } |
| + |
| + // Helpers. |
| + |
| + dart2js.Selector get identicalSelector { |
| + return new dart2js.Selector( |
| + dart2js.SelectorKind.CALL, |
| + 'identical', |
| + null, |
| + 2); |
| + } |
| + |
| + /// TOOD(karlklose): cache this? |
| + Constant get constantTrue { |
| + ConstantExpression trueValue = |
| + new PrimitiveConstantExpression(new TrueConstantValue()); |
| + return new Constant(trueValue); |
| + } |
| } |