Chromium Code Reviews| Index: src/stub-cache.cc |
| diff --git a/src/stub-cache.cc b/src/stub-cache.cc |
| index ac94fffebd0553b34a3fdf315d1220506178b833..bda659048142d9275d1ff1f10cd61bafe1f52518 100644 |
| --- a/src/stub-cache.cc |
| +++ b/src/stub-cache.cc |
| @@ -233,6 +233,27 @@ Handle<Code> StubCache::ComputeLoadField(Handle<Name> name, |
| } |
| +Handle<Code> StubCache::ComputeLoadArrayLength(Handle<Name> name, |
|
danno
2013/03/12 11:16:16
Instead of adding these, how about just make Compi
|
| + Handle<JSObject> receiver, |
| + Handle<JSObject> holder) { |
| + ASSERT(name->Equals(isolate_->heap()->length_string())); |
| + if (receiver.is_identical_to(holder)) { |
| + FastArrayLengthStub stub(LoadStubCompiler::receiver()); |
| + return stub.GetCode(isolate_); |
| + } |
| + |
| + Handle<JSObject> stub_holder = StubHolder(receiver, holder); |
| + Handle<Code> stub = FindStub( |
| + name, stub_holder, Code::LOAD_IC, Code::CALLBACKS); |
| + if (!stub.is_null()) return stub; |
| + |
| + LoadStubCompiler ic_compiler(isolate_); |
| + Handle<Code> ic = ic_compiler.CompileArrayLength(receiver, holder, name); |
| + JSObject::UpdateMapCodeCache(stub_holder, name, ic); |
| + return ic; |
| +} |
| + |
| + |
| Handle<Code> StubCache::ComputeLoadCallback( |
| Handle<Name> name, |
| Handle<JSObject> receiver, |
| @@ -1462,6 +1483,23 @@ Handle<Code> BaseLoadStubCompiler::CompileLoadField(Handle<JSObject> object, |
| } |
| +Handle<Code> BaseLoadStubCompiler::CompileArrayLength(Handle<JSObject> object, |
| + Handle<JSObject> holder, |
| + Handle<Name> name) { |
| + ASSERT(name->Equals(isolate()->heap()->length_string())); |
| + Label miss; |
| + |
| + Register reg = HandlerFrontendHeader(object, receiver(), holder, name, &miss); |
| + FastArrayLengthStub stub(reg); |
| + GenerateTailCall(stub.GetCode(isolate())); |
| + |
| + __ bind(&miss); |
| + GenerateLoadMiss(masm(), kind()); |
| + |
| + return GetCode(kind(), Code::CALLBACKS, name); |
| +} |
| + |
| + |
| Handle<Code> BaseLoadStubCompiler::CompileLoadConstant( |
| Handle<JSObject> object, |
| Handle<JSObject> holder, |