| Index: pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart
|
| diff --git a/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart b/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart
|
| index bc49dc750fd47f5d27e7d8f210fd3d9f9ac60764..4f0be4ad41428b4d8f3bb5a075004aaa377178a1 100644
|
| --- a/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart
|
| +++ b/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart
|
| @@ -335,8 +335,13 @@ class LogicalRewriter extends RecursiveTransformer
|
| return isTrue(e) ||
|
| isFalse(e) ||
|
| e is Not ||
|
| - e is LogicalOperator ||
|
| - e is ApplyBuiltinOperator && operatorReturnsBool(e.operator);
|
| + e is LogicalOperator && isBooleanValuedLogicalOperator(e) ||
|
| + e is ApplyBuiltinOperator && operatorReturnsBool(e.operator) ||
|
| + e is TypeOperator && isBooleanValuedTypeOperator(e);
|
| + }
|
| +
|
| + bool isBooleanValuedLogicalOperator(LogicalOperator e) {
|
| + return isBooleanValued(e.left) && isBooleanValued(e.right);
|
| }
|
|
|
| /// True if the given operator always returns `true` or `false`.
|
| @@ -361,6 +366,10 @@ class LogicalRewriter extends RecursiveTransformer
|
| }
|
| }
|
|
|
| + bool isBooleanValuedTypeOperator(TypeOperator e) {
|
| + return e.isTypeTest;
|
| + }
|
| +
|
| BuiltinOperator negateBuiltin(BuiltinOperator operator) {
|
| switch (operator) {
|
| case BuiltinOperator.StrictEq: return BuiltinOperator.StrictNeq;
|
| @@ -552,4 +561,3 @@ class LogicalRewriter extends RecursiveTransformer
|
| --node.variable.readCount;
|
| }
|
| }
|
| -
|
|
|