Index: src/ic.cc |
=================================================================== |
--- src/ic.cc (revision 10216) |
+++ src/ic.cc (working copy) |
@@ -2320,7 +2320,6 @@ |
case SMIS: return "SMIS"; |
case HEAP_NUMBERS: return "HEAP_NUMBERS"; |
case OBJECTS: return "OBJECTS"; |
- case KNOWN_OBJECTS: return "OBJECTS"; |
case SYMBOLS: return "SYMBOLS"; |
case STRINGS: return "STRINGS"; |
case GENERIC: return "GENERIC"; |
@@ -2335,37 +2334,20 @@ |
bool has_inlined_smi_code, |
Handle<Object> x, |
Handle<Object> y) { |
- switch (state) { |
- case UNINITIALIZED: |
- if (x->IsSmi() && y->IsSmi()) return SMIS; |
- if (x->IsNumber() && y->IsNumber()) return HEAP_NUMBERS; |
- if (!Token::IsEqualityOp(op_)) return GENERIC; |
- if (x->IsSymbol() && y->IsSymbol()) return SYMBOLS; |
- if (x->IsString() && y->IsString()) return STRINGS; |
- if (x->IsJSObject() && y->IsJSObject()) { |
- if (Handle<JSObject>::cast(x)->map() == |
- Handle<JSObject>::cast(y)->map() && |
- Token::IsEqualityOp(op_)) { |
- return KNOWN_OBJECTS; |
- } else { |
- return OBJECTS; |
- } |
- } |
- return GENERIC; |
- case SMIS: |
- return has_inlined_smi_code && x->IsNumber() && y->IsNumber() |
- ? HEAP_NUMBERS |
- : GENERIC; |
- case SYMBOLS: |
- ASSERT(Token::IsEqualityOp(op_)); |
- return x->IsString() && y->IsString() ? STRINGS : GENERIC; |
- case HEAP_NUMBERS: |
- case STRINGS: |
- case OBJECTS: |
- case KNOWN_OBJECTS: |
- case GENERIC: |
- return GENERIC; |
+ if (!has_inlined_smi_code && state != UNINITIALIZED && state != SYMBOLS) { |
+ return GENERIC; |
} |
+ if (state == UNINITIALIZED && x->IsSmi() && y->IsSmi()) return SMIS; |
+ if ((state == UNINITIALIZED || (state == SMIS && has_inlined_smi_code)) && |
+ x->IsNumber() && y->IsNumber()) return HEAP_NUMBERS; |
+ if (op_ != Token::EQ && op_ != Token::EQ_STRICT) return GENERIC; |
+ if (state == UNINITIALIZED && |
+ x->IsSymbol() && y->IsSymbol()) return SYMBOLS; |
+ if ((state == UNINITIALIZED || state == SYMBOLS) && |
+ x->IsString() && y->IsString()) return STRINGS; |
+ if (state == UNINITIALIZED && |
+ x->IsJSObject() && y->IsJSObject()) return OBJECTS; |
+ return GENERIC; |
} |