Index: src/ast.cc |
=================================================================== |
--- src/ast.cc (revision 6216) |
+++ src/ast.cc (working copy) |
@@ -649,11 +649,19 @@ |
} |
+void BinaryOperation::RecordTypeFeedback(TypeFeedbackOracle* oracle) { |
+ TypeInfo left = oracle->BinaryType(this, TypeFeedbackOracle::LEFT); |
+ TypeInfo right = oracle->BinaryType(this, TypeFeedbackOracle::RIGHT); |
+ is_smi_only_ = left.IsSmi() && right.IsSmi(); |
+} |
+ |
+ |
void CompareOperation::RecordTypeFeedback(TypeFeedbackOracle* oracle) { |
- TypeInfo info = oracle->CompareType(this); |
- if (info.IsSmi()) { |
+ TypeInfo left = oracle->CompareType(this, TypeFeedbackOracle::LEFT); |
+ TypeInfo right = oracle->CompareType(this, TypeFeedbackOracle::RIGHT); |
+ if (left.IsSmi() && right.IsSmi()) { |
compare_type_ = SMI_ONLY; |
- } else if (info.IsNonPrimitive()) { |
+ } else if (left.IsNonPrimitive() && right.IsNonPrimitive()) { |
compare_type_ = OBJECT_ONLY; |
} else { |
ASSERT(compare_type_ == NONE); |