| Index: src/api.cc
|
| ===================================================================
|
| --- src/api.cc (revision 1004)
|
| +++ src/api.cc (working copy)
|
| @@ -2203,7 +2203,7 @@
|
|
|
|
|
| const char* v8::V8::GetVersion() {
|
| - return "0.4.6 (candidate)";
|
| + return "0.4.7 (candidate)";
|
| }
|
|
|
|
|
| @@ -2227,39 +2227,52 @@
|
| LOG_API("Context::New");
|
| ON_BAILOUT("v8::Context::New()", return Persistent<Context>());
|
|
|
| - // Make sure that the global_template has a constructor.
|
| + v8::Handle<ObjectTemplate> proxy_template = global_template;
|
| + i::Handle<i::FunctionTemplateInfo> proxy_constructor;
|
| + i::Handle<i::FunctionTemplateInfo> global_constructor;
|
| +
|
| if (!global_template.IsEmpty()) {
|
| - i::Handle<i::FunctionTemplateInfo> constructor =
|
| - EnsureConstructor(Utils::OpenHandle(*global_template));
|
| + // Make sure that the global_template has a constructor.
|
| + global_constructor = EnsureConstructor(Utils::OpenHandle(*global_template));
|
|
|
| - // Create a fresh template for global proxy object.
|
| - Local<ObjectTemplate> proxy_template = ObjectTemplate::New();
|
| + // Create a fresh template for the global proxy object.
|
| + proxy_template = ObjectTemplate::New();
|
| + proxy_constructor = EnsureConstructor(Utils::OpenHandle(*proxy_template));
|
|
|
| - i::Handle<i::FunctionTemplateInfo> proxy_constructor =
|
| - EnsureConstructor(Utils::OpenHandle(*proxy_template));
|
| -
|
| - // Set the global template to be the prototype template
|
| - // of global proxy template.
|
| + // Set the global template to be the prototype template of global
|
| + // proxy template.
|
| proxy_constructor->set_prototype_template(
|
| *Utils::OpenHandle(*global_template));
|
|
|
| - // Migrate security handlers from global_template to proxy_template.
|
| - if (!constructor->access_check_info()->IsUndefined()) {
|
| - proxy_constructor->set_access_check_info(
|
| - constructor->access_check_info());
|
| - proxy_constructor->set_needs_access_check(true);
|
| -
|
| - // Remove access check info from global_template.
|
| - constructor->set_needs_access_check(false);
|
| - constructor->set_access_check_info(i::Heap::undefined_value());
|
| + // Migrate security handlers from global_template to
|
| + // proxy_template. Temporarily removing access check information
|
| + // from the global template.
|
| + if (!global_constructor->access_check_info()->IsUndefined()) {
|
| + proxy_constructor->set_access_check_info(
|
| + global_constructor->access_check_info());
|
| + proxy_constructor->set_needs_access_check(
|
| + global_constructor->needs_access_check());
|
| + global_constructor->set_needs_access_check(false);
|
| + global_constructor->set_access_check_info(i::Heap::undefined_value());
|
| }
|
| -
|
| - global_template = proxy_template;
|
| }
|
|
|
| + // Create the environment.
|
| i::Handle<i::Context> env = i::Bootstrapper::CreateEnvironment(
|
| Utils::OpenHandle(*global_object),
|
| - global_template, extensions);
|
| + proxy_template,
|
| + extensions);
|
| +
|
| + // Restore the access check info on the global template.
|
| + if (!global_template.IsEmpty()) {
|
| + ASSERT(!global_constructor.is_null());
|
| + ASSERT(!proxy_constructor.is_null());
|
| + global_constructor->set_access_check_info(
|
| + proxy_constructor->access_check_info());
|
| + global_constructor->set_needs_access_check(
|
| + proxy_constructor->needs_access_check());
|
| + }
|
| +
|
| if (!ApiCheck(!env.is_null(),
|
| "v8::Context::New()",
|
| "Could not initialize environment"))
|
| @@ -2628,9 +2641,10 @@
|
| }
|
|
|
|
|
| -void V8::AddObjectToGroup(void* group_id, Persistent<Object> obj) {
|
| - if (IsDeadCheck("v8::V8::AddObjectToGroup()")) return;
|
| - i::GlobalHandles::AddToGroup(group_id, reinterpret_cast<i::Object**>(*obj));
|
| +void V8::AddObjectGroup(Persistent<Value>* objects, size_t length) {
|
| + if (IsDeadCheck("v8::V8::AddObjectGroup()")) return;
|
| + STATIC_ASSERT(sizeof(Persistent<Value>) == sizeof(i::Object**));
|
| + i::GlobalHandles::AddGroup(reinterpret_cast<i::Object***>(objects), length);
|
| }
|
|
|
|
|
|
|