Index: src/bootstrapper.cc |
diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc |
index a82d1d69661f14d2e94757f724e17921075e1676..6e6c2c639c3708d0e42af10cf5ad61c62c445a4e 100644 |
--- a/src/bootstrapper.cc |
+++ b/src/bootstrapper.cc |
@@ -1344,23 +1344,33 @@ bool Genesis::InstallNatives() { |
} |
-static void InstallCustomCallGenerator(Handle<JSFunction> holder_function, |
- const char* function_name, |
- int id) { |
- Handle<JSObject> proto(JSObject::cast(holder_function->instance_prototype())); |
+static void InstallCustomCallGenerator( |
+ Handle<JSFunction> holder_function, |
+ CallStubCompiler::CustomGeneratorOwner owner_flag, |
+ const char* function_name, |
+ int id) { |
+ Handle<JSObject> owner; |
+ if (owner_flag == CallStubCompiler::FUNCTION) { |
+ owner = Handle<JSObject>::cast(holder_function); |
+ } else { |
+ ASSERT(owner_flag == CallStubCompiler::INSTANCE_PROTOTYPE); |
+ owner = Handle<JSObject>( |
+ JSObject::cast(holder_function->instance_prototype())); |
+ } |
Handle<String> name = Factory::LookupAsciiSymbol(function_name); |
- Handle<JSFunction> function(JSFunction::cast(proto->GetProperty(*name))); |
+ Handle<JSFunction> function(JSFunction::cast(owner->GetProperty(*name))); |
function->shared()->set_function_data(Smi::FromInt(id)); |
} |
void Genesis::InstallCustomCallGenerators() { |
HandleScope scope; |
-#define INSTALL_CALL_GENERATOR(holder_fun, fun_name, name) \ |
+#define INSTALL_CALL_GENERATOR(holder_fun, owner_flag, fun_name, name) \ |
{ \ |
Handle<JSFunction> holder(global_context()->holder_fun##_function()); \ |
const int id = CallStubCompiler::k##name##CallGenerator; \ |
- InstallCustomCallGenerator(holder, #fun_name, id); \ |
+ InstallCustomCallGenerator(holder, CallStubCompiler::owner_flag, \ |
+ #fun_name, id); \ |
} |
CUSTOM_CALL_IC_GENERATORS(INSTALL_CALL_GENERATOR) |
#undef INSTALL_CALL_GENERATOR |