Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(767)

Unified Diff: src/stub-cache.cc

Issue 12209021: Refactor LoadIC into Handler Frontend and Backends. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/stub-cache.cc
diff --git a/src/stub-cache.cc b/src/stub-cache.cc
index 06b4782b767f4875a7fd271f3535a539c923715d..149e8b8226ac50261a619c9a3c5a19fa825cf71f 100644
--- a/src/stub-cache.cc
+++ b/src/stub-cache.cc
@@ -1000,32 +1000,6 @@ void StubCache::CollectMatchingMaps(SmallMapList* types,
// StubCompiler implementation.
-RUNTIME_FUNCTION(MaybeObject*, LoadCallbackProperty) {
- ASSERT(args[0]->IsJSObject());
- ASSERT(args[1]->IsJSObject());
- ASSERT(args[3]->IsSmi());
- AccessorInfo* callback = AccessorInfo::cast(args[4]);
- Address getter_address = v8::ToCData<Address>(callback->getter());
- v8::AccessorGetter fun = FUNCTION_CAST<v8::AccessorGetter>(getter_address);
- ASSERT(fun != NULL);
- ASSERT(callback->IsCompatibleReceiver(args[0]));
- v8::AccessorInfo info(&args[0]);
- HandleScope scope(isolate);
- v8::Handle<v8::Value> result;
- {
- // Leaving JavaScript.
- VMState state(isolate, EXTERNAL);
- ExternalCallbackScope call_scope(isolate, getter_address);
- result = fun(v8::Utils::ToLocal(args.at<String>(5)), info);
- }
- RETURN_IF_SCHEDULED_EXCEPTION(isolate);
- if (result.IsEmpty()) return HEAP->undefined_value();
- Handle<Object> result_internal = v8::Utils::OpenHandle(*result);
- result_internal->VerifyApiCallResultType();
- return *result_internal;
-}
-
-
RUNTIME_FUNCTION(MaybeObject*, StoreCallbackProperty) {
JSObject* recv = JSObject::cast(args[0]);
AccessorInfo* callback = AccessorInfo::cast(args[1]);
@@ -1397,55 +1371,46 @@ Handle<Code> BaseLoadStubCompiler::CompileLoadField(Handle<JSObject> object,
Handle<JSObject> holder,
Handle<String> name,
PropertyIndex index) {
- Label miss;
-
- GenerateNameCheck(name, this->name(), &miss);
- GenerateLoadField(object, holder, receiver(),
- scratch1(), scratch2(), scratch3(),
- index, name, &miss);
- __ bind(&miss);
- GenerateLoadMiss(masm(), kind());
+ Label success;
+ Register reg =
+ HandlerFrontend(object, receiver(), holder, name, &success, true);
+ __ bind(&success);
+ GenerateLoadField(reg, holder, index);
// Return the generated code.
return GetCode(Code::FIELD, name);
}
-Handle<Code> BaseLoadStubCompiler::CompileLoadCallback(
+Handle<Code> BaseLoadStubCompiler::CompileLoadConstant(
Handle<JSObject> object,
Handle<JSObject> holder,
Handle<String> name,
- Handle<AccessorInfo> callback) {
- Label miss;
-
- GenerateNameCheck(name, this->name(), &miss);
- GenerateLoadCallback(object, holder, receiver(), this->name(),
- scratch1(), scratch2(), scratch3(), scratch4(),
- callback, name, &miss);
- __ bind(&miss);
- GenerateLoadMiss(masm(), kind());
+ Handle<JSFunction> value) {
+ Label success;
+ HandlerFrontend(object, receiver(), holder, name, &success, true);
+ __ bind(&success);
+ GenerateLoadConstant(value);
// Return the generated code.
- return GetCode(Code::CALLBACKS, name);
+ return GetCode(Code::CONSTANT_FUNCTION, name);
}
-Handle<Code> BaseLoadStubCompiler::CompileLoadConstant(
+Handle<Code> BaseLoadStubCompiler::CompileLoadCallback(
Handle<JSObject> object,
Handle<JSObject> holder,
Handle<String> name,
- Handle<JSFunction> value) {
- Label miss;
+ Handle<AccessorInfo> callback) {
+ Label success;
- GenerateNameCheck(name, this->name(), &miss);
- GenerateLoadConstant(object, holder, receiver(),
- scratch1(), scratch2(), scratch3(),
- value, name, &miss);
- __ bind(&miss);
- GenerateLoadMiss(masm(), kind());
+ Register reg = CallbackHandlerFrontend(
+ object, receiver(), holder, name, &success, true, callback);
+ __ bind(&success);
+ GenerateLoadCallback(reg, callback);
// Return the generated code.
- return GetCode(Code::CONSTANT_FUNCTION, name);
+ return GetCode(Code::CALLBACKS, name);
}
@@ -1453,20 +1418,17 @@ Handle<Code> BaseLoadStubCompiler::CompileLoadInterceptor(
Handle<JSObject> object,
Handle<JSObject> holder,
Handle<String> name) {
- Label miss;
+ Label success;
LookupResult lookup(isolate());
LookupPostInterceptor(holder, name, &lookup);
- GenerateNameCheck(name, this->name(), &miss);
+ Register reg =
+ HandlerFrontend(object, receiver(), holder, name, &success, true);
+ __ bind(&success);
// TODO(368): Compile in the whole chain: all the interceptors in
// prototypes and ultimate answer.
- GenerateLoadInterceptor(object, holder, &lookup, receiver(), this->name(),
- scratch1(), scratch2(), scratch3(),
- name, &miss);
-
- __ bind(&miss);
- GenerateLoadMiss(masm(), kind());
+ GenerateLoadInterceptor(reg, object, holder, &lookup, name);
// Return the generated code.
return GetCode(Code::INTERCEPTOR, name);

Powered by Google App Engine
This is Rietveld 408576698