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

Unified Diff: pkg/compiler/lib/src/js_backend/codegen/task.dart

Issue 737353002: cps-ir: Implement boolean conversion in and use it to implement '&&', '||', and '?:'. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Rebase to new test infrastructure. Created 6 years, 1 month 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 | « pkg/compiler/lib/src/js_backend/codegen/glue.dart ('k') | pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/js_backend/codegen/task.dart
diff --git a/pkg/compiler/lib/src/js_backend/codegen/task.dart b/pkg/compiler/lib/src/js_backend/codegen/task.dart
index 5b6e303edb87f7d3457e3484267b304a40abc370..f311eb3ff85472fcc2ae1c33dcca14d1082dd952 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/task.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/task.dart
@@ -27,6 +27,42 @@ import '../../tracer.dart';
import '../../js_backend/codegen/codegen.dart';
import '../../ssa/ssa.dart' as ssa;
import '../../tree_ir/optimization/optimization.dart';
+import '../../common.dart' show SelectorKind;
+import '../../constants/expressions.dart';
+import '../../constants/values.dart';
+
+class JsBackendTreeBuilder extends tree_builder.Builder {
+ JsBackendTreeBuilder(Compiler compiler) : super(compiler);
+
+ Selector get identicalSelector {
+ return new Selector( SelectorKind.CALL, 'identical', null, 2);
+ }
+
+ /// TOOD(karlklose): cache this?
+ tree_ir.Constant get constantTrue {
+ ConstantExpression trueValue =
+ new PrimitiveConstantExpression(new TrueConstantValue());
+ return new tree_ir.Constant(trueValue);
+ }
+
+ /**
+ * 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)
+ */
+ tree_ir.Expression visitIsTrue(cps.IsTrue node) {
+ tree_ir.Expression value = getVariableReference(node.value);
+ /// TODO(karlklose): implement the assert(v != null) check.
+ return new tree_ir.InvokeStatic(
+ compiler.identicalFunction,
+ identicalSelector,
+ <tree_ir.Expression>[value, constantTrue]);
+ }
+
+}
class CspFunctionCompiler implements FunctionCompiler {
final IrBuilderTask irBuilderTask;
@@ -121,7 +157,7 @@ class CspFunctionCompiler implements FunctionCompiler {
}
tree_ir.FunctionDefinition compileToTreeIR(cps.FunctionDefinition cpsNode) {
- tree_builder.Builder builder = new tree_builder.Builder(compiler);
+ tree_builder.Builder builder = new JsBackendTreeBuilder(compiler);
tree_ir.FunctionDefinition treeNode = builder.build(cpsNode);
assert(treeNode != null);
traceGraph('Tree builder', treeNode);
« no previous file with comments | « pkg/compiler/lib/src/js_backend/codegen/glue.dart ('k') | pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698