Index: src/api.cc |
=================================================================== |
--- src/api.cc (revision 4210) |
+++ src/api.cc (working copy) |
@@ -1136,7 +1136,7 @@ |
if (pre_data_impl != NULL && !pre_data_impl->SanityCheck()) { |
pre_data_impl = NULL; |
} |
- i::Handle<i::JSFunction> boilerplate = |
+ i::Handle<i::SharedFunctionInfo> result = |
i::Compiler::Compile(str, |
name_obj, |
line_offset, |
@@ -1145,9 +1145,9 @@ |
pre_data_impl, |
Utils::OpenHandle(*script_data), |
i::NOT_NATIVES_CODE); |
- has_pending_exception = boilerplate.is_null(); |
+ has_pending_exception = result.is_null(); |
EXCEPTION_BAILOUT_CHECK(Local<Script>()); |
- return Local<Script>(ToApi<Script>(boilerplate)); |
+ return Local<Script>(ToApi<Script>(result)); |
} |
@@ -1168,10 +1168,12 @@ |
Local<Script> generic = New(source, origin, pre_data, script_data); |
if (generic.IsEmpty()) |
return generic; |
- i::Handle<i::JSFunction> boilerplate = Utils::OpenHandle(*generic); |
+ i::Handle<i::Object> obj = Utils::OpenHandle(*generic); |
+ i::Handle<i::SharedFunctionInfo> function = |
+ i::Handle<i::SharedFunctionInfo>(i::SharedFunctionInfo::cast(*obj)); |
i::Handle<i::JSFunction> result = |
- i::Factory::NewFunctionFromBoilerplate(boilerplate, |
- i::Top::global_context()); |
+ i::Factory::NewFunctionFromSharedFunctionInfo(function, |
+ i::Top::global_context()); |
return Local<Script>(ToApi<Script>(result)); |
} |
@@ -1191,10 +1193,15 @@ |
i::Object* raw_result = NULL; |
{ |
HandleScope scope; |
- i::Handle<i::JSFunction> fun = Utils::OpenHandle(this); |
- if (fun->IsBoilerplate()) { |
- fun = i::Factory::NewFunctionFromBoilerplate(fun, |
- i::Top::global_context()); |
+ i::Handle<i::Object> obj = Utils::OpenHandle(this); |
+ i::Handle<i::JSFunction> fun; |
+ if (obj->IsSharedFunctionInfo()) { |
+ i::Handle<i::SharedFunctionInfo> |
+ function_info(i::SharedFunctionInfo::cast(*obj)); |
+ fun = i::Factory::NewFunctionFromSharedFunctionInfo( |
+ function_info, i::Top::global_context()); |
+ } else { |
+ fun = i::Handle<i::JSFunction>(i::JSFunction::cast(*obj)); |
} |
EXCEPTION_PREAMBLE(); |
i::Handle<i::Object> receiver(i::Top::context()->global_proxy()); |
@@ -1208,14 +1215,28 @@ |
} |
+static i::Handle<i::SharedFunctionInfo> OpenScript(Script* script) { |
+ i::Handle<i::Object> obj = Utils::OpenHandle(script); |
+ i::Handle<i::SharedFunctionInfo> result; |
+ if (obj->IsSharedFunctionInfo()) { |
+ result = |
+ i::Handle<i::SharedFunctionInfo>(i::SharedFunctionInfo::cast(*obj)); |
+ } else { |
+ result = |
+ i::Handle<i::SharedFunctionInfo>(i::JSFunction::cast(*obj)->shared()); |
+ } |
+ return result; |
+} |
+ |
+ |
Local<Value> Script::Id() { |
ON_BAILOUT("v8::Script::Id()", return Local<Value>()); |
LOG_API("Script::Id"); |
i::Object* raw_id = NULL; |
{ |
HandleScope scope; |
- i::Handle<i::JSFunction> fun = Utils::OpenHandle(this); |
- i::Handle<i::Script> script(i::Script::cast(fun->shared()->script())); |
+ i::Handle<i::SharedFunctionInfo> function_info = OpenScript(this); |
+ i::Handle<i::Script> script(i::Script::cast(function_info->script())); |
i::Handle<i::Object> id(script->id()); |
raw_id = *id; |
} |
@@ -1229,9 +1250,9 @@ |
LOG_API("Script::SetData"); |
{ |
HandleScope scope; |
- i::Handle<i::JSFunction> fun = Utils::OpenHandle(this); |
+ i::Handle<i::SharedFunctionInfo> function_info = OpenScript(this); |
i::Handle<i::Object> raw_data = Utils::OpenHandle(*data); |
- i::Handle<i::Script> script(i::Script::cast(fun->shared()->script())); |
+ i::Handle<i::Script> script(i::Script::cast(function_info->script())); |
script->set_data(*raw_data); |
} |
} |