| Index: src/stub-cache.cc
|
| diff --git a/src/stub-cache.cc b/src/stub-cache.cc
|
| index 4eb6241d87fd0225ef73274bdd469f60f97d98b1..67002a36b17abdba2a2a136ff226f00ed2237d5f 100644
|
| --- a/src/stub-cache.cc
|
| +++ b/src/stub-cache.cc
|
| @@ -119,24 +119,15 @@ Handle<Code> StubCache::FindIC(Handle<Name> name,
|
| }
|
|
|
|
|
| -Handle<Code> StubCache::FindLoadHandler(Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - Code::Kind kind) {
|
| - Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| - Code::HANDLER, Code::kNoExtraICState, Code::NORMAL, kind);
|
| - Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags),
|
| - isolate_);
|
| - if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| - return Handle<Code>::null();
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::FindStoreHandler(Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - Code::Kind kind,
|
| - StrictModeFlag strict_mode) {
|
| - Code::ExtraICState extra_ic_state = Code::ComputeExtraICState(
|
| - STANDARD_STORE, strict_mode);
|
| +Handle<Code> StubCache::FindHandler(Handle<Name> name,
|
| + Handle<JSObject> receiver,
|
| + Code::Kind kind,
|
| + StrictModeFlag strict_mode) {
|
| + Code::ExtraICState extra_ic_state = Code::kNoExtraICState;
|
| + if (kind == Code::STORE_IC || kind == Code::KEYED_STORE_IC) {
|
| + extra_ic_state = Code::ComputeExtraICState(
|
| + STANDARD_STORE, strict_mode);
|
| + }
|
| Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| Code::HANDLER, extra_ic_state, Code::NORMAL, kind);
|
| Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags),
|
| @@ -200,7 +191,7 @@ Handle<Code> StubCache::ComputeLoadNonexistent(Handle<Name> name,
|
|
|
| // Compile the stub that is either shared for all names or
|
| // name specific if there are global objects involved.
|
| - Handle<Code> handler = FindLoadHandler(cache_name, receiver, Code::LOAD_IC);
|
| + Handle<Code> handler = FindHandler(cache_name, receiver, Code::LOAD_IC);
|
| if (!handler.is_null()) return handler;
|
|
|
| LoadStubCompiler compiler(isolate_);
|
| @@ -211,112 +202,6 @@ Handle<Code> StubCache::ComputeLoadNonexistent(Handle<Name> name,
|
| }
|
|
|
|
|
| -Handle<Code> StubCache::ComputeLoadField(Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - Handle<JSObject> holder,
|
| - PropertyIndex field,
|
| - Representation representation) {
|
| - if (receiver.is_identical_to(holder)) {
|
| - LoadFieldStub stub(field.is_inobject(holder),
|
| - field.translate(holder),
|
| - representation);
|
| - return stub.GetCode(isolate());
|
| - }
|
| -
|
| - Handle<Code> stub = FindLoadHandler(name, receiver, Code::LOAD_IC);
|
| - if (!stub.is_null()) return stub;
|
| -
|
| - LoadStubCompiler compiler(isolate_);
|
| - Handle<Code> handler =
|
| - compiler.CompileLoadField(receiver, holder, name, field, representation);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::ComputeLoadCallback(
|
| - Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - Handle<JSObject> holder,
|
| - Handle<ExecutableAccessorInfo> callback) {
|
| - ASSERT(v8::ToCData<Address>(callback->getter()) != 0);
|
| - Handle<Code> stub = FindLoadHandler(name, receiver, Code::LOAD_IC);
|
| - if (!stub.is_null()) return stub;
|
| -
|
| - LoadStubCompiler compiler(isolate_);
|
| - Handle<Code> handler =
|
| - compiler.CompileLoadCallback(receiver, holder, name, callback);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::ComputeLoadCallback(
|
| - Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - Handle<JSObject> holder,
|
| - const CallOptimization& call_optimization) {
|
| - Handle<Code> stub = FindLoadHandler(name, receiver, Code::LOAD_IC);
|
| - if (!stub.is_null()) return stub;
|
| -
|
| - LoadStubCompiler compiler(isolate_);
|
| - Handle<Code> handler =
|
| - compiler.CompileLoadCallback(receiver, holder, name, call_optimization);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::ComputeLoadViaGetter(Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - Handle<JSObject> holder,
|
| - Handle<JSFunction> getter) {
|
| - Handle<Code> stub = FindLoadHandler(name, receiver, Code::LOAD_IC);
|
| - if (!stub.is_null()) return stub;
|
| -
|
| - LoadStubCompiler compiler(isolate_);
|
| - Handle<Code> handler =
|
| - compiler.CompileLoadViaGetter(receiver, holder, name, getter);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::ComputeLoadConstant(Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - Handle<JSObject> holder,
|
| - Handle<Object> value) {
|
| - Handle<Code> handler = FindLoadHandler(name, receiver, Code::LOAD_IC);
|
| - if (!handler.is_null()) return handler;
|
| -
|
| - LoadStubCompiler compiler(isolate_);
|
| - handler = compiler.CompileLoadConstant(receiver, holder, name, value);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| -
|
| - return handler;
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::ComputeLoadInterceptor(Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - Handle<JSObject> holder) {
|
| - Handle<Code> stub = FindLoadHandler(name, receiver, Code::LOAD_IC);
|
| - if (!stub.is_null()) return stub;
|
| -
|
| - LoadStubCompiler compiler(isolate_);
|
| - Handle<Code> handler =
|
| - compiler.CompileLoadInterceptor(receiver, holder, name);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::ComputeLoadNormal(Handle<Name> name,
|
| - Handle<JSObject> receiver) {
|
| - return isolate_->builtins()->LoadIC_Normal();
|
| -}
|
| -
|
| -
|
| Handle<Code> StubCache::ComputeLoadGlobal(Handle<Name> name,
|
| Handle<JSObject> receiver,
|
| Handle<GlobalObject> holder,
|
| @@ -333,122 +218,6 @@ Handle<Code> StubCache::ComputeLoadGlobal(Handle<Name> name,
|
| }
|
|
|
|
|
| -Handle<Code> StubCache::ComputeKeyedLoadField(Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - Handle<JSObject> holder,
|
| - PropertyIndex field,
|
| - Representation representation) {
|
| - if (receiver.is_identical_to(holder)) {
|
| - // TODO(titzer): this should use an HObjectAccess
|
| - KeyedLoadFieldStub stub(field.is_inobject(holder),
|
| - field.translate(holder),
|
| - representation);
|
| - return stub.GetCode(isolate());
|
| - }
|
| -
|
| - Handle<Code> stub = FindLoadHandler(name, receiver, Code::KEYED_LOAD_IC);
|
| - if (!stub.is_null()) return stub;
|
| -
|
| - KeyedLoadStubCompiler compiler(isolate_);
|
| - Handle<Code> handler =
|
| - compiler.CompileLoadField(receiver, holder, name, field, representation);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::ComputeKeyedLoadConstant(Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - Handle<JSObject> holder,
|
| - Handle<Object> value) {
|
| - Handle<Code> handler = FindLoadHandler(name, receiver, Code::KEYED_LOAD_IC);
|
| - if (!handler.is_null()) return handler;
|
| -
|
| - KeyedLoadStubCompiler compiler(isolate_);
|
| - handler = compiler.CompileLoadConstant(receiver, holder, name, value);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::ComputeKeyedLoadInterceptor(Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - Handle<JSObject> holder) {
|
| - Handle<Code> stub = FindLoadHandler(name, receiver, Code::KEYED_LOAD_IC);
|
| - if (!stub.is_null()) return stub;
|
| -
|
| - KeyedLoadStubCompiler compiler(isolate_);
|
| - Handle<Code> handler =
|
| - compiler.CompileLoadInterceptor(receiver, holder, name);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::ComputeKeyedLoadCallback(
|
| - Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - Handle<JSObject> holder,
|
| - Handle<ExecutableAccessorInfo> callback) {
|
| - Handle<Code> stub = FindLoadHandler(name, receiver, Code::KEYED_LOAD_IC);
|
| - if (!stub.is_null()) return stub;
|
| -
|
| - KeyedLoadStubCompiler compiler(isolate_);
|
| - Handle<Code> handler =
|
| - compiler.CompileLoadCallback(receiver, holder, name, callback);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::ComputeKeyedLoadCallback(
|
| - Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - Handle<JSObject> holder,
|
| - const CallOptimization& call_optimization) {
|
| - Handle<Code> stub = FindLoadHandler(name, receiver, Code::KEYED_LOAD_IC);
|
| - if (!stub.is_null()) return stub;
|
| -
|
| - KeyedLoadStubCompiler compiler(isolate_);
|
| - Handle<Code> handler =
|
| - compiler.CompileLoadCallback(receiver, holder, name, call_optimization);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::ComputeStoreField(Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - LookupResult* lookup,
|
| - StrictModeFlag strict_mode) {
|
| - Handle<Code> stub = FindStoreHandler(
|
| - name, receiver, Code::STORE_IC, strict_mode);
|
| - if (!stub.is_null()) return stub;
|
| -
|
| - StoreStubCompiler compiler(isolate_, strict_mode);
|
| - Handle<Code> handler = compiler.CompileStoreField(receiver, lookup, name);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::ComputeStoreTransition(Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - LookupResult* lookup,
|
| - Handle<Map> transition,
|
| - StrictModeFlag strict_mode) {
|
| - Handle<Code> stub = FindStoreHandler(
|
| - name, receiver, Code::STORE_IC, strict_mode);
|
| - if (!stub.is_null()) return stub;
|
| -
|
| - StoreStubCompiler compiler(isolate_, strict_mode);
|
| - Handle<Code> handler =
|
| - compiler.CompileStoreTransition(receiver, lookup, transition, name);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| Handle<Code> StubCache::ComputeKeyedLoadElement(Handle<Map> receiver_map) {
|
| Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC);
|
| Handle<Name> name =
|
| @@ -493,20 +262,12 @@ Handle<Code> StubCache::ComputeKeyedStoreElement(
|
| }
|
|
|
|
|
| -Handle<Code> StubCache::ComputeStoreNormal(StrictModeFlag strict_mode) {
|
| - return (strict_mode == kStrictMode)
|
| - ? isolate_->builtins()->Builtins::StoreIC_Normal_Strict()
|
| - : isolate_->builtins()->Builtins::StoreIC_Normal();
|
| -}
|
| -
|
| -
|
| Handle<Code> StubCache::ComputeStoreGlobal(Handle<Name> name,
|
| Handle<GlobalObject> receiver,
|
| Handle<PropertyCell> cell,
|
| Handle<Object> value,
|
| StrictModeFlag strict_mode) {
|
| - Isolate* isolate = cell->GetIsolate();
|
| - Handle<Type> union_type(PropertyCell::UpdateType(cell, value), isolate);
|
| + Handle<Type> union_type = PropertyCell::UpdatedType(cell, value);
|
| bool is_constant = union_type->IsConstant();
|
| StoreGlobalStub stub(strict_mode, is_constant);
|
|
|
| @@ -530,107 +291,6 @@ Handle<Code> StubCache::ComputeStoreGlobal(Handle<Name> name,
|
| }
|
|
|
|
|
| -Handle<Code> StubCache::ComputeStoreCallback(
|
| - Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - Handle<JSObject> holder,
|
| - Handle<ExecutableAccessorInfo> callback,
|
| - StrictModeFlag strict_mode) {
|
| - ASSERT(v8::ToCData<Address>(callback->setter()) != 0);
|
| - Handle<Code> stub = FindStoreHandler(
|
| - name, receiver, Code::STORE_IC, strict_mode);
|
| - if (!stub.is_null()) return stub;
|
| -
|
| - StoreStubCompiler compiler(isolate_, strict_mode);
|
| - Handle<Code> handler = compiler.CompileStoreCallback(
|
| - receiver, holder, name, callback);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::ComputeStoreCallback(
|
| - Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - Handle<JSObject> holder,
|
| - const CallOptimization& call_optimization,
|
| - StrictModeFlag strict_mode) {
|
| - Handle<Code> stub = FindStoreHandler(
|
| - name, receiver, Code::STORE_IC, strict_mode);
|
| - if (!stub.is_null()) return stub;
|
| -
|
| - StoreStubCompiler compiler(isolate_, strict_mode);
|
| - Handle<Code> handler = compiler.CompileStoreCallback(
|
| - receiver, holder, name, call_optimization);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::ComputeStoreViaSetter(Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - Handle<JSObject> holder,
|
| - Handle<JSFunction> setter,
|
| - StrictModeFlag strict_mode) {
|
| - Handle<Code> stub = FindStoreHandler(
|
| - name, receiver, Code::STORE_IC, strict_mode);
|
| - if (!stub.is_null()) return stub;
|
| -
|
| - StoreStubCompiler compiler(isolate_, strict_mode);
|
| - Handle<Code> handler = compiler.CompileStoreViaSetter(
|
| - receiver, holder, name, setter);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::ComputeStoreInterceptor(Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - StrictModeFlag strict_mode) {
|
| - Handle<Code> stub = FindStoreHandler(
|
| - name, receiver, Code::STORE_IC, strict_mode);
|
| - if (!stub.is_null()) return stub;
|
| -
|
| - StoreStubCompiler compiler(isolate_, strict_mode);
|
| - Handle<Code> handler = compiler.CompileStoreInterceptor(receiver, name);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::ComputeKeyedStoreField(Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - LookupResult* lookup,
|
| - StrictModeFlag strict_mode) {
|
| - Handle<Code> stub = FindStoreHandler(
|
| - name, receiver, Code::KEYED_STORE_IC, strict_mode);
|
| - if (!stub.is_null()) return stub;
|
| -
|
| - KeyedStoreStubCompiler compiler(isolate(), strict_mode, STANDARD_STORE);
|
| - Handle<Code> handler = compiler.CompileStoreField(receiver, lookup, name);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| -Handle<Code> StubCache::ComputeKeyedStoreTransition(
|
| - Handle<Name> name,
|
| - Handle<JSObject> receiver,
|
| - LookupResult* lookup,
|
| - Handle<Map> transition,
|
| - StrictModeFlag strict_mode) {
|
| - Handle<Code> stub = FindStoreHandler(
|
| - name, receiver, Code::KEYED_STORE_IC, strict_mode);
|
| - if (!stub.is_null()) return stub;
|
| -
|
| - KeyedStoreStubCompiler compiler(isolate(), strict_mode, STANDARD_STORE);
|
| - Handle<Code> handler =
|
| - compiler.CompileStoreTransition(receiver, lookup, transition, name);
|
| - HeapObject::UpdateMapCodeCache(receiver, name, handler);
|
| - return handler;
|
| -}
|
| -
|
| -
|
| #define CALL_LOGGER_TAG(kind, type) \
|
| (kind == Code::CALL_IC ? Logger::type : Logger::KEYED_##type)
|
|
|
| @@ -1223,8 +883,8 @@ static MaybeObject* ThrowReferenceError(Isolate* isolate, Name* name) {
|
| }
|
|
|
|
|
| -static MaybeObject* LoadWithInterceptor(Arguments* args,
|
| - PropertyAttributes* attrs) {
|
| +static Handle<Object> LoadWithInterceptor(Arguments* args,
|
| + PropertyAttributes* attrs) {
|
| ASSERT(args->length() == StubCache::kInterceptorArgsLength);
|
| Handle<Name> name_handle =
|
| args->at<Name>(StubCache::kInterceptorArgsNameIndex);
|
| @@ -1238,9 +898,10 @@ static MaybeObject* LoadWithInterceptor(Arguments* args,
|
| Isolate* isolate = receiver_handle->GetIsolate();
|
|
|
| // TODO(rossberg): Support symbols in the API.
|
| - if (name_handle->IsSymbol())
|
| - return holder_handle->GetPropertyPostInterceptor(
|
| - *receiver_handle, *name_handle, attrs);
|
| + if (name_handle->IsSymbol()) {
|
| + return JSObject::GetPropertyPostInterceptor(
|
| + holder_handle, receiver_handle, name_handle, attrs);
|
| + }
|
| Handle<String> name = Handle<String>::cast(name_handle);
|
|
|
| Address getter_address = v8::ToCData<Address>(interceptor_info->getter());
|
| @@ -1253,24 +914,21 @@ static MaybeObject* LoadWithInterceptor(Arguments* args,
|
| *receiver_handle,
|
| *holder_handle);
|
| {
|
| - // Use the interceptor getter.
|
| HandleScope scope(isolate);
|
| + // Use the interceptor getter.
|
| v8::Handle<v8::Value> r =
|
| callback_args.Call(getter, v8::Utils::ToLocal(name));
|
| - RETURN_IF_SCHEDULED_EXCEPTION(isolate);
|
| + RETURN_HANDLE_IF_SCHEDULED_EXCEPTION(isolate, Object);
|
| if (!r.IsEmpty()) {
|
| *attrs = NONE;
|
| Handle<Object> result = v8::Utils::OpenHandle(*r);
|
| result->VerifyApiCallResultType();
|
| - return *result;
|
| + return scope.CloseAndEscape(result);
|
| }
|
| }
|
|
|
| - MaybeObject* result = holder_handle->GetPropertyPostInterceptor(
|
| - *receiver_handle,
|
| - *name_handle,
|
| - attrs);
|
| - RETURN_IF_SCHEDULED_EXCEPTION(isolate);
|
| + Handle<Object> result = JSObject::GetPropertyPostInterceptor(
|
| + holder_handle, receiver_handle, name_handle, attrs);
|
| return result;
|
| }
|
|
|
| @@ -1281,25 +939,25 @@ static MaybeObject* LoadWithInterceptor(Arguments* args,
|
| */
|
| RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorForLoad) {
|
| PropertyAttributes attr = NONE;
|
| - Object* result;
|
| - { MaybeObject* maybe_result = LoadWithInterceptor(&args, &attr);
|
| - if (!maybe_result->ToObject(&result)) return maybe_result;
|
| - }
|
| + HandleScope scope(isolate);
|
| + Handle<Object> result = LoadWithInterceptor(&args, &attr);
|
| + RETURN_IF_EMPTY_HANDLE(isolate, result);
|
|
|
| // If the property is present, return it.
|
| - if (attr != ABSENT) return result;
|
| + if (attr != ABSENT) return *result;
|
| return ThrowReferenceError(isolate, Name::cast(args[0]));
|
| }
|
|
|
|
|
| RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorForCall) {
|
| PropertyAttributes attr;
|
| - MaybeObject* result = LoadWithInterceptor(&args, &attr);
|
| - RETURN_IF_SCHEDULED_EXCEPTION(isolate);
|
| + HandleScope scope(isolate);
|
| + Handle<Object> result = LoadWithInterceptor(&args, &attr);
|
| + RETURN_IF_EMPTY_HANDLE(isolate, result);
|
| // This is call IC. In this case, we simply return the undefined result which
|
| // will lead to an exception when trying to invoke the result as a
|
| // function.
|
| - return result;
|
| + return *result;
|
| }
|
|
|
|
|
| @@ -1510,7 +1168,7 @@ void StubCompiler::LookupPostInterceptor(Handle<JSObject> holder,
|
| #define __ ACCESS_MASM(masm())
|
|
|
|
|
| -Register BaseLoadStubCompiler::HandlerFrontendHeader(
|
| +Register LoadStubCompiler::HandlerFrontendHeader(
|
| Handle<JSObject> object,
|
| Register object_reg,
|
| Handle<JSObject> holder,
|
| @@ -1524,7 +1182,7 @@ Register BaseLoadStubCompiler::HandlerFrontendHeader(
|
|
|
| // HandlerFrontend for store uses the name register. It has to be restored
|
| // before a miss.
|
| -Register BaseStoreStubCompiler::HandlerFrontendHeader(
|
| +Register StoreStubCompiler::HandlerFrontendHeader(
|
| Handle<JSObject> object,
|
| Register object_reg,
|
| Handle<JSObject> holder,
|
| @@ -1550,7 +1208,7 @@ Register BaseLoadStoreStubCompiler::HandlerFrontend(Handle<JSObject> object,
|
| }
|
|
|
|
|
| -Handle<Code> BaseLoadStubCompiler::CompileLoadField(
|
| +Handle<Code> LoadStubCompiler::CompileLoadField(
|
| Handle<JSObject> object,
|
| Handle<JSObject> holder,
|
| Handle<Name> name,
|
| @@ -1570,7 +1228,7 @@ Handle<Code> BaseLoadStubCompiler::CompileLoadField(
|
| }
|
|
|
|
|
| -Handle<Code> BaseLoadStubCompiler::CompileLoadConstant(
|
| +Handle<Code> LoadStubCompiler::CompileLoadConstant(
|
| Handle<JSObject> object,
|
| Handle<JSObject> holder,
|
| Handle<Name> name,
|
| @@ -1585,7 +1243,7 @@ Handle<Code> BaseLoadStubCompiler::CompileLoadConstant(
|
| }
|
|
|
|
|
| -Handle<Code> BaseLoadStubCompiler::CompileLoadCallback(
|
| +Handle<Code> LoadStubCompiler::CompileLoadCallback(
|
| Handle<JSObject> object,
|
| Handle<JSObject> holder,
|
| Handle<Name> name,
|
| @@ -1602,7 +1260,7 @@ Handle<Code> BaseLoadStubCompiler::CompileLoadCallback(
|
| }
|
|
|
|
|
| -Handle<Code> BaseLoadStubCompiler::CompileLoadCallback(
|
| +Handle<Code> LoadStubCompiler::CompileLoadCallback(
|
| Handle<JSObject> object,
|
| Handle<JSObject> holder,
|
| Handle<Name> name,
|
| @@ -1621,7 +1279,7 @@ Handle<Code> BaseLoadStubCompiler::CompileLoadCallback(
|
| }
|
|
|
|
|
| -Handle<Code> BaseLoadStubCompiler::CompileLoadInterceptor(
|
| +Handle<Code> LoadStubCompiler::CompileLoadInterceptor(
|
| Handle<JSObject> object,
|
| Handle<JSObject> holder,
|
| Handle<Name> name) {
|
| @@ -1641,7 +1299,7 @@ Handle<Code> BaseLoadStubCompiler::CompileLoadInterceptor(
|
| }
|
|
|
|
|
| -void BaseLoadStubCompiler::GenerateLoadPostInterceptor(
|
| +void LoadStubCompiler::GenerateLoadPostInterceptor(
|
| Register interceptor_reg,
|
| Handle<JSObject> interceptor_holder,
|
| Handle<Name> name,
|
| @@ -1700,14 +1358,14 @@ Handle<Code> LoadStubCompiler::CompileLoadViaGetter(
|
| HandlerFrontend(object, receiver(), holder, name, &success);
|
|
|
| __ bind(&success);
|
| - GenerateLoadViaGetter(masm(), getter);
|
| + GenerateLoadViaGetter(masm(), receiver(), getter);
|
|
|
| // Return the generated code.
|
| return GetCode(kind(), Code::CALLBACKS, name);
|
| }
|
|
|
|
|
| -Handle<Code> BaseStoreStubCompiler::CompileStoreTransition(
|
| +Handle<Code> StoreStubCompiler::CompileStoreTransition(
|
| Handle<JSObject> object,
|
| LookupResult* lookup,
|
| Handle<Map> transition,
|
| @@ -1764,9 +1422,9 @@ Handle<Code> BaseStoreStubCompiler::CompileStoreTransition(
|
| }
|
|
|
|
|
| -Handle<Code> BaseStoreStubCompiler::CompileStoreField(Handle<JSObject> object,
|
| - LookupResult* lookup,
|
| - Handle<Name> name) {
|
| +Handle<Code> StoreStubCompiler::CompileStoreField(Handle<JSObject> object,
|
| + LookupResult* lookup,
|
| + Handle<Name> name) {
|
| Label miss;
|
|
|
| HandlerFrontendHeader(object, receiver(), object, name, &miss);
|
| @@ -1859,23 +1517,33 @@ void StubCompiler::TailCallBuiltin(MacroAssembler* masm, Builtins::Name name) {
|
| }
|
|
|
|
|
| -void LoadStubCompiler::JitEvent(Handle<Name> name, Handle<Code> code) {
|
| - GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code));
|
| -}
|
| -
|
| -
|
| -void KeyedLoadStubCompiler::JitEvent(Handle<Name> name, Handle<Code> code) {
|
| - GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, *name, *code));
|
| -}
|
| -
|
| -
|
| -void StoreStubCompiler::JitEvent(Handle<Name> name, Handle<Code> code) {
|
| - GDBJIT(AddCode(GDBJITInterface::STORE_IC, *name, *code));
|
| +void BaseLoadStoreStubCompiler::JitEvent(Handle<Name> name, Handle<Code> code) {
|
| +#ifdef ENABLE_GDB_JIT_INTERFACE
|
| + GDBJITInterface::CodeTag tag;
|
| + if (kind_ == Code::LOAD_IC) {
|
| + tag = GDBJITInterface::LOAD_IC;
|
| + } else if (kind_ == Code::KEYED_LOAD_IC) {
|
| + tag = GDBJITInterface::KEYED_LOAD_IC;
|
| + } else if (kind_ == Code::STORE_IC) {
|
| + tag = GDBJITInterface::STORE_IC;
|
| + } else {
|
| + tag = GDBJITInterface::KEYED_STORE_IC;
|
| + }
|
| + GDBJIT(AddCode(tag, *name, *code));
|
| +#endif
|
| }
|
|
|
|
|
| -void KeyedStoreStubCompiler::JitEvent(Handle<Name> name, Handle<Code> code) {
|
| - GDBJIT(AddCode(GDBJITInterface::KEYED_STORE_IC, *name, *code));
|
| +void BaseLoadStoreStubCompiler::InitializeRegisters() {
|
| + if (kind_ == Code::LOAD_IC) {
|
| + registers_ = LoadStubCompiler::registers();
|
| + } else if (kind_ == Code::KEYED_LOAD_IC) {
|
| + registers_ = KeyedLoadStubCompiler::registers();
|
| + } else if (kind_ == Code::STORE_IC) {
|
| + registers_ = StoreStubCompiler::registers();
|
| + } else {
|
| + registers_ = KeyedStoreStubCompiler::registers();
|
| + }
|
| }
|
|
|
|
|
|
|