| Index: src/ic.cc
|
| diff --git a/src/ic.cc b/src/ic.cc
|
| index a8d35272440a31892b76f883a37166d3add6ebe5..afce4f78a8f7fdd8462fe37884daad75dae65e80 100644
|
| --- a/src/ic.cc
|
| +++ b/src/ic.cc
|
| @@ -1719,7 +1719,8 @@ MaybeObject* StoreIC::Store(State state,
|
| // Strict mode doesn't allow setting non-existent global property.
|
| return ReferenceError("not_defined", name);
|
| } else if (FLAG_use_ic &&
|
| - (lookup.IsNormal() ||
|
| + (!name->IsCacheable(isolate()) ||
|
| + lookup.IsNormal() ||
|
| (lookup.IsField() && lookup.CanHoldValue(value)))) {
|
| Handle<Code> stub = strict_mode == kStrictMode
|
| ? generic_stub_strict() : generic_stub();
|
| @@ -2581,7 +2582,7 @@ static BinaryOpIC::TypeInfo TypeInfoFromValue(Handle<Object> value,
|
| v8::internal::TypeInfo type = v8::internal::TypeInfo::FromValue(value);
|
| if (type.IsSmi()) return BinaryOpIC::SMI;
|
| if (type.IsInteger32()) {
|
| - if (kSmiValueSize == 32) return BinaryOpIC::SMI;
|
| + if (SmiValuesAre32Bits()) return BinaryOpIC::SMI;
|
| return BinaryOpIC::INT32;
|
| }
|
| if (type.IsNumber()) return BinaryOpIC::NUMBER;
|
| @@ -2593,7 +2594,7 @@ static BinaryOpIC::TypeInfo TypeInfoFromValue(Handle<Object> value,
|
| op == Token::SAR ||
|
| op == Token::SHL ||
|
| op == Token::SHR) {
|
| - if (kSmiValueSize == 32) return BinaryOpIC::SMI;
|
| + if (SmiValuesAre32Bits()) return BinaryOpIC::SMI;
|
| return BinaryOpIC::INT32;
|
| }
|
| return BinaryOpIC::ODDBALL;
|
| @@ -2671,7 +2672,7 @@ RUNTIME_FUNCTION(MaybeObject*, BinaryOp_Patch) {
|
| if (op == Token::DIV ||
|
| op == Token::MUL ||
|
| op == Token::SHR ||
|
| - kSmiValueSize == 32) {
|
| + SmiValuesAre32Bits()) {
|
| // Arithmetic on two Smi inputs has yielded a heap number.
|
| // That is the only way to get here from the Smi stub.
|
| // With 32-bit Smis, all overflows give heap numbers, but with
|
|
|