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

Unified Diff: pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart

Issue 1311353008: dart2js cps: Use a strictness flag on Branch instead of rewriting. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 months 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/unsugar.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 5e19e040e3863b33a309af61b8bd50c9f9b7cef7..89b8b19442ed51fe84804df812469c90df474c32 100644
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
@@ -11,6 +11,7 @@ import '../diagnostics/spannable.dart' show
import '../elements/elements.dart';
import '../cps_ir/cps_ir_nodes.dart' as cps_ir;
import 'tree_ir_nodes.dart';
+import '../constants/values.dart';
typedef Statement NodeCallback(Statement next);
@@ -277,12 +278,6 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
return prim.accept(this);
}
- /// Translates a condition to a tree expression.
- Expression translateCondition(cps_ir.Condition condition) {
- cps_ir.IsTrue isTrue = condition;
- return getVariableUse(isTrue.value);
- }
-
/************************ INTERIOR EXPRESSIONS ************************/
//
// Visit methods for interior expressions must return a function:
@@ -500,8 +495,20 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
}
}
+ /// Translates a branch condition to a tree expression.
+ Expression translateCondition(cps_ir.Branch branch) {
+ Expression value = getVariableUse(branch.condition);
+ if (branch.isStrictCheck) {
+ return new ApplyBuiltinOperator(
+ BuiltinOperator.StrictEq,
+ <Expression>[value, new Constant(new TrueConstantValue())]);
+ } else {
+ return value;
+ }
+ }
+
Statement visitBranch(cps_ir.Branch node) {
- Expression condition = translateCondition(node.condition);
+ Expression condition = translateCondition(node);
Statement thenStatement, elseStatement;
cps_ir.Continuation cont = node.trueContinuation.definition;
assert(cont.parameters.isEmpty);
@@ -680,6 +687,5 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
visitParameter(cps_ir.Parameter node) => unexpectedNode(node);
visitContinuation(cps_ir.Continuation node) => unexpectedNode(node);
visitMutableVariable(cps_ir.MutableVariable node) => unexpectedNode(node);
- visitIsTrue(cps_ir.IsTrue node) => unexpectedNode(node);
}
« no previous file with comments | « pkg/compiler/lib/src/js_backend/codegen/unsugar.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698