Chromium Code Reviews| Index: src/ic.cc |
| diff --git a/src/ic.cc b/src/ic.cc |
| index 968b45d0b61f4ac27c102cdc8dae927cc8c51ff2..446511191aa6c9d0277016804d810ef3f8339516 100644 |
| --- a/src/ic.cc |
| +++ b/src/ic.cc |
| @@ -458,14 +458,11 @@ MaybeObject* CallICBase::LoadFunction(State state, |
| return TypeError("non_object_property_call", object, name); |
| } |
| - if (object->IsString() || object->IsNumber() || object->IsBoolean()) { |
| - ReceiverToObject(object); |
| - } |
| - |
| // Check if the name is trivially convertible to an index and get |
| // the element if so. |
| uint32_t index; |
| - if (name->AsArrayIndex(&index)) { |
| + // TODO(mmaly): One cannot hang number-indexed functions off of values, right? |
|
Martin Maly
2011/02/16 04:56:17
I couldn't come up with a way where value could ac
Mads Ager (chromium)
2011/02/16 10:43:54
I think that is because we have a bug here. I thin
Martin Maly
2011/02/17 05:25:55
Done.
|
| + if (object->IsJSObject() && name->AsArrayIndex(&index)) { |
| Object* result; |
| { MaybeObject* maybe_result = object->GetElement(index); |
| if (!maybe_result->ToObject(&result)) return maybe_result; |
| @@ -490,6 +487,7 @@ MaybeObject* CallICBase::LoadFunction(State state, |
| if (IsContextual(object)) { |
| return ReferenceError("not_defined", name); |
| } |
| + // TODO(mmaly): Should we do ToObject here? |
|
Mads Ager (chromium)
2011/02/16 10:43:54
Nope, there is no change to this code and it makes
Martin Maly
2011/02/17 05:25:55
Done.
|
| return TypeError("undefined_method", object, name); |
| } |
| @@ -505,6 +503,14 @@ MaybeObject* CallICBase::LoadFunction(State state, |
| object->GetProperty(*object, &lookup, *name, &attr); |
| if (!maybe_result->ToObject(&result)) return maybe_result; |
| } |
| + |
| + // For non-strict mode functions, make receiver an object. |
| + if ((!result->IsJSFunction() || |
| + !JSFunction::cast(result)->shared()->strict_mode()) && |
| + (object->IsString() || object->IsNumber() || object->IsBoolean())) { |
| + ReceiverToObject(object); |
|
Vitaly Repeshko
2011/02/16 11:52:12
1. Since this is now done after UpdateCaches, plea
Martin Maly
2011/02/17 05:25:55
Done and done. for the builtin change I ran full t
|
| + } |
| + |
| if (lookup.type() == INTERCEPTOR) { |
| // If the object does not have the requested property, check which |
| // exception we need to throw. |