Index: src/builtins.cc |
diff --git a/src/builtins.cc b/src/builtins.cc |
index 1e95bc201a105539b6c9cc5d2ee7a13e9b979447..8b089372f2df92ddfd6d9cae8c1144c86b73e753 100644 |
--- a/src/builtins.cc |
+++ b/src/builtins.cc |
@@ -790,20 +790,19 @@ static Object* HandleApiCallHelper( |
HandleScope scope; |
Handle<JSFunction> function = args.called_function(); |
+ ASSERT(function->shared()->IsApiFunction()); |
+ FunctionTemplateInfo* fun_data = function->shared()->get_api_func_data(); |
if (is_construct) { |
- Handle<FunctionTemplateInfo> desc = |
- Handle<FunctionTemplateInfo>( |
- FunctionTemplateInfo::cast(function->shared()->function_data())); |
+ Handle<FunctionTemplateInfo> desc(fun_data); |
bool pending_exception = false; |
Factory::ConfigureInstance(desc, Handle<JSObject>::cast(args.receiver()), |
&pending_exception); |
ASSERT(Top::has_pending_exception() == pending_exception); |
if (pending_exception) return Failure::Exception(); |
+ fun_data = *desc; |
} |
- FunctionTemplateInfo* fun_data = |
- FunctionTemplateInfo::cast(function->shared()->function_data()); |
Object* raw_holder = TypeCheck(args.length(), &args[0], fun_data); |
if (raw_holder->IsNull()) { |
@@ -874,8 +873,8 @@ BUILTIN(HandleApiCallConstruct) { |
static void VerifyTypeCheck(Handle<JSObject> object, |
Handle<JSFunction> function) { |
- FunctionTemplateInfo* info = |
- FunctionTemplateInfo::cast(function->shared()->function_data()); |
+ ASSERT(function->shared()->IsApiFunction()); |
+ FunctionTemplateInfo* info = function->shared()->get_api_func_data(); |
if (info->signature()->IsUndefined()) return; |
SignatureInfo* signature = SignatureInfo::cast(info->signature()); |
Object* receiver_type = signature->receiver(); |
@@ -959,9 +958,9 @@ static Object* HandleApiCallAsFunctionOrConstructor( |
// used to create the called object. |
ASSERT(obj->map()->has_instance_call_handler()); |
JSFunction* constructor = JSFunction::cast(obj->map()->constructor()); |
- Object* template_info = constructor->shared()->function_data(); |
+ ASSERT(constructor->shared()->IsApiFunction()); |
Object* handler = |
- FunctionTemplateInfo::cast(template_info)->instance_call_handler(); |
+ constructor->shared()->get_api_func_data()->instance_call_handler(); |
ASSERT(!handler->IsUndefined()); |
CallHandlerInfo* call_data = CallHandlerInfo::cast(handler); |
Object* callback_obj = call_data->callback(); |