Chromium Code Reviews| Index: src/ic.cc |
| diff --git a/src/ic.cc b/src/ic.cc |
| index da2211b7b686abc9f28a586fcaba986f4b90eaec..1d3ef63656e5ec3521dba7ce4057678c79d76201 100644 |
| --- a/src/ic.cc |
| +++ b/src/ic.cc |
| @@ -855,28 +855,6 @@ MaybeObject* LoadIC::Load(State state, |
| return Smi::FromInt(String::cast(*string)->length()); |
| } |
| - // Use specialized code for getting the length of arrays. |
| - if (object->IsJSArray() && |
| - name->Equals(isolate()->heap()->length_string())) { |
| - Handle<Code> stub; |
| - if (state == UNINITIALIZED) { |
| - stub = pre_monomorphic_stub(); |
| - } else if (state == PREMONOMORPHIC) { |
| - ArrayLengthStub array_length_stub(kind()); |
| - stub = array_length_stub.GetCode(isolate()); |
| - } else if (state != MEGAMORPHIC) { |
| - ASSERT(state != GENERIC); |
| - stub = megamorphic_stub(); |
| - } |
| - if (!stub.is_null()) { |
| - set_target(*stub); |
| -#ifdef DEBUG |
| - if (FLAG_trace_ic) PrintF("[LoadIC : +#length /array]\n"); |
| -#endif |
| - } |
| - return JSArray::cast(*object)->length(); |
| - } |
| - |
| // Use specialized code for getting prototype of functions. |
| if (object->IsJSFunction() && |
| name->Equals(isolate()->heap()->prototype_string()) && |
| @@ -941,6 +919,10 @@ MaybeObject* LoadIC::Load(State state, |
| return *result; |
| } |
| + if (object->IsJSArray() && |
|
danno
2013/03/12 11:16:16
Doesn't GetProperty already handle this (it should
|
| + name->Equals(isolate()->heap()->length_string())) { |
| + return JSArray::cast(*object)->length(); |
| + } |
| // Get the property. |
| return object->GetProperty(*object, &lookup, *name, &attr); |
| } |
| @@ -1223,6 +1205,10 @@ Handle<Code> LoadIC::ComputeLoadHandler(LookupResult* lookup, |
| if (!holder->HasFastProperties()) break; |
| return isolate()->stub_cache()->ComputeLoadViaGetter( |
| name, receiver, holder, Handle<JSFunction>::cast(getter)); |
| + } else if (receiver->IsJSArray() && |
| + name->Equals(isolate()->heap()->length_string())) { |
| + return isolate()->stub_cache()->ComputeLoadArrayLength( |
|
danno
2013/03/12 11:16:16
why not just:
Property index =
PropertyIndex::
|
| + name, receiver, holder); |
| } |
| // TODO(dcarney): Handle correctly. |
| if (callback->IsDeclaredAccessorInfo()) break; |