Index: pkg/compiler/lib/src/ssa/optimize.dart |
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart |
index 8f7819b8398c9d699fafa83c062ff04cbc8e5e84..151b7457179b4056e51d18122e636481455070f8 100644 |
--- a/pkg/compiler/lib/src/ssa/optimize.dart |
+++ b/pkg/compiler/lib/src/ssa/optimize.dart |
@@ -145,6 +145,8 @@ class SsaInstructionSimplifier extends HBaseVisitor |
this.optimizer, |
this.work); |
+ CoreClasses get coreClasses => compiler.coreClasses; |
+ |
void visitGraph(HGraph visitee) { |
graph = visitee; |
visitDominatorTree(visitee); |
@@ -675,22 +677,22 @@ class SsaInstructionSimplifier extends HBaseVisitor |
return node; |
} else if (type.isTypedef) { |
return node; |
- } else if (element == compiler.functionClass) { |
+ } else if (element == coreClasses.functionClass) { |
return node; |
} |
- if (element == compiler.objectClass || type.treatAsDynamic) { |
+ if (type.isObject || type.treatAsDynamic) { |
return graph.addConstantBool(true, compiler); |
} |
ClassWorld classWorld = compiler.world; |
HInstruction expression = node.expression; |
if (expression.isInteger(compiler)) { |
- if (identical(element, compiler.intClass) |
- || identical(element, compiler.numClass) |
- || Elements.isNumberOrStringSupertype(element, compiler)) { |
+ if (element == coreClasses.intClass || |
+ element == coreClasses.numClass || |
+ Elements.isNumberOrStringSupertype(element, compiler)) { |
return graph.addConstantBool(true, compiler); |
- } else if (identical(element, compiler.doubleClass)) { |
+ } else if (element == coreClasses.doubleClass) { |
// We let the JS semantics decide for that check. Currently |
// the code we emit will always return true. |
return node; |
@@ -698,11 +700,11 @@ class SsaInstructionSimplifier extends HBaseVisitor |
return graph.addConstantBool(false, compiler); |
} |
} else if (expression.isDouble(compiler)) { |
- if (identical(element, compiler.doubleClass) |
- || identical(element, compiler.numClass) |
- || Elements.isNumberOrStringSupertype(element, compiler)) { |
+ if (element == coreClasses.doubleClass || |
+ element == coreClasses.numClass || |
+ Elements.isNumberOrStringSupertype(element, compiler)) { |
return graph.addConstantBool(true, compiler); |
- } else if (identical(element, compiler.intClass)) { |
+ } else if (element == coreClasses.intClass) { |
// We let the JS semantics decide for that check. Currently |
// the code we emit will return true for a double that can be |
// represented as a 31-bit integer and for -0.0. |
@@ -711,14 +713,14 @@ class SsaInstructionSimplifier extends HBaseVisitor |
return graph.addConstantBool(false, compiler); |
} |
} else if (expression.isNumber(compiler)) { |
- if (identical(element, compiler.numClass)) { |
+ if (element == coreClasses.numClass) { |
return graph.addConstantBool(true, compiler); |
} else { |
// We cannot just return false, because the expression may be of |
// type int or double. |
} |
- } else if (expression.canBePrimitiveNumber(compiler) |
- && identical(element, compiler.intClass)) { |
+ } else if (expression.canBePrimitiveNumber(compiler) && |
+ element == coreClasses.intClass) { |
// We let the JS semantics decide for that check. |
return node; |
// We need the [:hasTypeArguments:] check because we don't have |
@@ -728,7 +730,7 @@ class SsaInstructionSimplifier extends HBaseVisitor |
} else if (!RuntimeTypes.hasTypeArguments(type)) { |
TypeMask expressionMask = expression.instructionType; |
assert(TypeMask.assertIsNormalized(expressionMask, classWorld)); |
- TypeMask typeMask = (element == compiler.nullClass) |
+ TypeMask typeMask = (element == coreClasses.nullClass) |
? new TypeMask.subtype(element, classWorld) |
: new TypeMask.nonNullSubtype(element, classWorld); |
if (expressionMask.union(typeMask, classWorld) == typeMask) { |