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

Side by Side Diff: src/api.cc

Issue 7366: Split window support from V8. ... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 12 years, 2 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/api.h ('k') | src/bootstrapper.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2007-2008 the V8 project authors. All rights reserved. 1 // Copyright 2007-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 } 405 }
406 406
407 407
408 void Context::Enter() { 408 void Context::Enter() {
409 if (IsDeadCheck("v8::Context::Enter()")) return; 409 if (IsDeadCheck("v8::Context::Enter()")) return;
410 i::Handle<i::Context> env = Utils::OpenHandle(this); 410 i::Handle<i::Context> env = Utils::OpenHandle(this);
411 thread_local.EnterContext(env); 411 thread_local.EnterContext(env);
412 412
413 thread_local.SaveContext(i::GlobalHandles::Create(i::Top::context())); 413 thread_local.SaveContext(i::GlobalHandles::Create(i::Top::context()));
414 i::Top::set_context(*env); 414 i::Top::set_context(*env);
415
416 thread_local.SaveSecurityContext(
417 i::GlobalHandles::Create(i::Top::security_context()));
418 i::Top::set_security_context(*env);
419 } 415 }
420 416
421 417
422 void Context::Exit() { 418 void Context::Exit() {
423 if (has_shut_down) return; 419 if (has_shut_down) return;
424 if (!ApiCheck(thread_local.LeaveLastContext(), 420 if (!ApiCheck(thread_local.LeaveLastContext(),
425 "v8::Context::Exit()", 421 "v8::Context::Exit()",
426 "Cannot exit non-entered context")) { 422 "Cannot exit non-entered context")) {
427 return; 423 return;
428 } 424 }
429 425
430 // Content of 'last_context' and 'last_security_context' could be NULL. 426 // Content of 'last_context' could be NULL.
431 i::Handle<i::Object> last_context = thread_local.RestoreContext(); 427 i::Handle<i::Object> last_context = thread_local.RestoreContext();
432 i::Top::set_context(static_cast<i::Context*>(*last_context)); 428 i::Top::set_context(static_cast<i::Context*>(*last_context));
433 i::GlobalHandles::Destroy(last_context.location()); 429 i::GlobalHandles::Destroy(last_context.location());
434
435 i::Handle<i::Object> last_security_context =
436 thread_local.RestoreSecurityContext();
437 i::Top::set_security_context(
438 static_cast<i::Context*>(*last_security_context));
439 i::GlobalHandles::Destroy(last_security_context.location());
440 } 430 }
441 431
442 432
443 void v8::HandleScope::DeleteExtensions() { 433 void v8::HandleScope::DeleteExtensions() {
444 ASSERT(current_.extensions != 0); 434 ASSERT(current_.extensions != 0);
445 thread_local.DeleteExtensions(current_.extensions); 435 thread_local.DeleteExtensions(current_.extensions);
446 } 436 }
447 437
448 438
449 void HandleScope::ZapRange(void** start, void** end) { 439 void HandleScope::ZapRange(void** start, void** end) {
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after
901 i::FunctionTemplateInfo* constructor = 891 i::FunctionTemplateInfo* constructor =
902 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor()); 892 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor());
903 i::Handle<i::FunctionTemplateInfo> cons(constructor); 893 i::Handle<i::FunctionTemplateInfo> cons(constructor);
904 cons->set_undetectable(true); 894 cons->set_undetectable(true);
905 } 895 }
906 896
907 897
908 void ObjectTemplate::SetAccessCheckCallbacks( 898 void ObjectTemplate::SetAccessCheckCallbacks(
909 NamedSecurityCallback named_callback, 899 NamedSecurityCallback named_callback,
910 IndexedSecurityCallback indexed_callback, 900 IndexedSecurityCallback indexed_callback,
911 Handle<Value> data) { 901 Handle<Value> data,
902 bool turned_on_by_default) {
912 if (IsDeadCheck("v8::ObjectTemplate::SetAccessCheckCallbacks()")) return; 903 if (IsDeadCheck("v8::ObjectTemplate::SetAccessCheckCallbacks()")) return;
913 HandleScope scope; 904 HandleScope scope;
914 EnsureConstructor(this); 905 EnsureConstructor(this);
915 906
916 i::Handle<i::Struct> struct_info = 907 i::Handle<i::Struct> struct_info =
917 i::Factory::NewStruct(i::ACCESS_CHECK_INFO_TYPE); 908 i::Factory::NewStruct(i::ACCESS_CHECK_INFO_TYPE);
918 i::Handle<i::AccessCheckInfo> info = 909 i::Handle<i::AccessCheckInfo> info =
919 i::Handle<i::AccessCheckInfo>::cast(struct_info); 910 i::Handle<i::AccessCheckInfo>::cast(struct_info);
920 info->set_named_callback(*FromCData(named_callback)); 911 info->set_named_callback(*FromCData(named_callback));
921 info->set_indexed_callback(*FromCData(indexed_callback)); 912 info->set_indexed_callback(*FromCData(indexed_callback));
922 if (data.IsEmpty()) data = v8::Undefined(); 913 if (data.IsEmpty()) data = v8::Undefined();
923 info->set_data(*Utils::OpenHandle(*data)); 914 info->set_data(*Utils::OpenHandle(*data));
924 915
925 i::FunctionTemplateInfo* constructor = 916 i::FunctionTemplateInfo* constructor =
926 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor()); 917 i::FunctionTemplateInfo::cast(Utils::OpenHandle(this)->constructor());
927 i::Handle<i::FunctionTemplateInfo> cons(constructor); 918 i::Handle<i::FunctionTemplateInfo> cons(constructor);
928 cons->set_needs_access_check(true);
929 cons->set_access_check_info(*info); 919 cons->set_access_check_info(*info);
920 cons->set_needs_access_check(turned_on_by_default);
930 } 921 }
931 922
932 923
933 void ObjectTemplate::SetIndexedPropertyHandler( 924 void ObjectTemplate::SetIndexedPropertyHandler(
934 IndexedPropertyGetter getter, 925 IndexedPropertyGetter getter,
935 IndexedPropertySetter setter, 926 IndexedPropertySetter setter,
936 IndexedPropertyQuery query, 927 IndexedPropertyQuery query,
937 IndexedPropertyDeleter remover, 928 IndexedPropertyDeleter remover,
938 IndexedPropertyEnumerator enumerator, 929 IndexedPropertyEnumerator enumerator,
939 Handle<Value> data) { 930 Handle<Value> data) {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
1057 1048
1058 1049
1059 Local<Value> Script::Run() { 1050 Local<Value> Script::Run() {
1060 ON_BAILOUT("v8::Script::Run()", return Local<Value>()); 1051 ON_BAILOUT("v8::Script::Run()", return Local<Value>());
1061 LOG_API("Script::Run"); 1052 LOG_API("Script::Run");
1062 i::Object* raw_result = NULL; 1053 i::Object* raw_result = NULL;
1063 { 1054 {
1064 HandleScope scope; 1055 HandleScope scope;
1065 i::Handle<i::JSFunction> fun = Utils::OpenHandle(this); 1056 i::Handle<i::JSFunction> fun = Utils::OpenHandle(this);
1066 EXCEPTION_PREAMBLE(); 1057 EXCEPTION_PREAMBLE();
1067 i::Handle<i::Object> global(i::Top::context()->global()); 1058 i::Handle<i::Object> receiver(i::Top::context()->global_proxy());
1068 i::Handle<i::Object> result = 1059 i::Handle<i::Object> result =
1069 i::Execution::Call(fun, global, 0, NULL, &has_pending_exception); 1060 i::Execution::Call(fun, receiver, 0, NULL, &has_pending_exception);
1070 EXCEPTION_BAILOUT_CHECK(Local<Value>()); 1061 EXCEPTION_BAILOUT_CHECK(Local<Value>());
1071 raw_result = *result; 1062 raw_result = *result;
1072 } 1063 }
1073 i::Handle<i::Object> result(raw_result); 1064 i::Handle<i::Object> result(raw_result);
1074 return Utils::ToLocal(result); 1065 return Utils::ToLocal(result);
1075 } 1066 }
1076 1067
1077 1068
1078 // --- E x c e p t i o n s --- 1069 // --- E x c e p t i o n s ---
1079 1070
(...skipping 677 matching lines...) Expand 10 before | Expand all | Expand 10 after
1757 if (num->IsSmi()) { 1748 if (num->IsSmi()) {
1758 return i::Smi::cast(*num)->value(); 1749 return i::Smi::cast(*num)->value();
1759 } else { 1750 } else {
1760 return static_cast<uint32_t>(num->Number()); 1751 return static_cast<uint32_t>(num->Number());
1761 } 1752 }
1762 } 1753 }
1763 } 1754 }
1764 1755
1765 1756
1766 bool v8::Object::Set(v8::Handle<Value> key, v8::Handle<Value> value, 1757 bool v8::Object::Set(v8::Handle<Value> key, v8::Handle<Value> value,
1767 v8::PropertyAttribute attribs) { 1758 v8::PropertyAttribute attribs) {
1768 ON_BAILOUT("v8::Object::Set()", return false); 1759 ON_BAILOUT("v8::Object::Set()", return false);
1769 i::Handle<i::Object> self = Utils::OpenHandle(this); 1760 i::Handle<i::Object> self = Utils::OpenHandle(this);
1770 i::Handle<i::Object> key_obj = Utils::OpenHandle(*key); 1761 i::Handle<i::Object> key_obj = Utils::OpenHandle(*key);
1771 i::Handle<i::Object> value_obj = Utils::OpenHandle(*value); 1762 i::Handle<i::Object> value_obj = Utils::OpenHandle(*value);
1772 EXCEPTION_PREAMBLE(); 1763 EXCEPTION_PREAMBLE();
1773 i::Handle<i::Object> obj = i::SetProperty( 1764 i::Handle<i::Object> obj = i::SetProperty(
1774 self, 1765 self,
1775 key_obj, 1766 key_obj,
1776 value_obj, 1767 value_obj,
1777 static_cast<PropertyAttributes>(attribs)); 1768 static_cast<PropertyAttributes>(attribs));
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
1930 i::Handle<i::Object> result(self_obj->GetProperty(*self_obj, 1921 i::Handle<i::Object> result(self_obj->GetProperty(*self_obj,
1931 &lookup, 1922 &lookup,
1932 *key_obj, 1923 *key_obj,
1933 &attributes)); 1924 &attributes));
1934 return Utils::ToLocal(result); 1925 return Utils::ToLocal(result);
1935 } 1926 }
1936 return Local<Value>(); // No real property was found in prototype chain. 1927 return Local<Value>(); // No real property was found in prototype chain.
1937 } 1928 }
1938 1929
1939 1930
1931 // Turns on access checks by copying the map and setting the check flag.
1932 // Because the object gets a new map, existing inline cache caching
1933 // the old map of this object will fail.
1934 void v8::Object::TurnOnAccessCheck() {
1935 ON_BAILOUT("v8::Object::TurnOnAccessCheck()", return);
1936 i::Handle<i::JSObject> obj = Utils::OpenHandle(this);
1937
1938 i::Handle<i::Map> new_map =
1939 i::Factory::CopyMapDropTransitions(i::Handle<i::Map>(obj->map()));
1940 new_map->set_is_access_check_needed();
1941 obj->set_map(*new_map);
1942 }
1943
1944
1940 Local<v8::Object> Function::NewInstance() { 1945 Local<v8::Object> Function::NewInstance() {
1941 return NewInstance(0, NULL); 1946 return NewInstance(0, NULL);
1942 } 1947 }
1943 1948
1944 1949
1945 Local<v8::Object> Function::NewInstance(int argc, 1950 Local<v8::Object> Function::NewInstance(int argc,
1946 v8::Handle<v8::Value> argv[]) { 1951 v8::Handle<v8::Value> argv[]) {
1947 ON_BAILOUT("v8::Function::NewInstance()", return Local<v8::Object>()); 1952 ON_BAILOUT("v8::Function::NewInstance()", return Local<v8::Object>());
1948 LOG_API("Function::NewInstance"); 1953 LOG_API("Function::NewInstance");
1949 HandleScope scope; 1954 HandleScope scope;
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
2213 return i::V8::Initialize(NULL); 2218 return i::V8::Initialize(NULL);
2214 } 2219 }
2215 } 2220 }
2216 2221
2217 2222
2218 const char* v8::V8::GetVersion() { 2223 const char* v8::V8::GetVersion() {
2219 return "0.4.0 (internal)"; 2224 return "0.4.0 (internal)";
2220 } 2225 }
2221 2226
2222 2227
2223 Persistent<Context> v8::Context::New(v8::ExtensionConfiguration* extensions, 2228 static i::Handle<i::FunctionTemplateInfo>
2224 v8::Handle<ObjectTemplate> global_template, 2229 EnsureConstructor(i::Handle<i::ObjectTemplateInfo> templ) {
2225 v8::Handle<Value> global_object) { 2230 if (templ->constructor()->IsUndefined()) {
2231 Local<FunctionTemplate> constructor = FunctionTemplate::New();
2232 Utils::OpenHandle(*constructor)->set_instance_template(*templ);
2233 templ->set_constructor(*Utils::OpenHandle(*constructor));
2234 }
2235 return i::Handle<i::FunctionTemplateInfo>(
2236 i::FunctionTemplateInfo::cast(templ->constructor()));
2237 }
2238
2239
2240 Persistent<Context> v8::Context::New(
2241 v8::ExtensionConfiguration* extensions,
2242 v8::Handle<ObjectTemplate> global_template,
2243 v8::Handle<Value> global_object) {
2226 EnsureInitialized("v8::Context::New()"); 2244 EnsureInitialized("v8::Context::New()");
2227 LOG_API("Context::New"); 2245 LOG_API("Context::New");
2228 ON_BAILOUT("v8::Context::New()", return Persistent<Context>()); 2246 ON_BAILOUT("v8::Context::New()", return Persistent<Context>());
2247
2229 // Make sure that the global_template has a constructor. 2248 // Make sure that the global_template has a constructor.
2230 if (!global_template.IsEmpty() && 2249 if (!global_template.IsEmpty()) {
2231 Utils::OpenHandle(*global_template)->constructor()->IsUndefined()) { 2250 i::Handle<i::FunctionTemplateInfo> constructor =
2232 Local<FunctionTemplate> templ = FunctionTemplate::New(); 2251 EnsureConstructor(Utils::OpenHandle(*global_template));
2233 Utils::OpenHandle(*templ)->set_instance_template( 2252
2253 // Create a fresh template for outer global object.
2254 Local<ObjectTemplate> outer_template = ObjectTemplate::New();
2255
2256 i::Handle<i::FunctionTemplateInfo> outer_constructor =
2257 EnsureConstructor(Utils::OpenHandle(*outer_template));
2258
2259 // Set the global template to be the prototype template
2260 // of outer global template.
2261 outer_constructor->set_prototype_template(
2234 *Utils::OpenHandle(*global_template)); 2262 *Utils::OpenHandle(*global_template));
2235 i::Handle<i::FunctionTemplateInfo> constructor = Utils::OpenHandle(*templ); 2263
2236 Utils::OpenHandle(*global_template)->set_constructor(*constructor); 2264 // Migrate security handlers from global_template to outer_template.
2265 if (!constructor->access_check_info()->IsUndefined()) {
2266 outer_constructor->set_access_check_info(
2267 constructor->access_check_info());
2268 outer_constructor->set_needs_access_check(true);
2269
2270 // Remove access check info from global_template.
2271 constructor->set_needs_access_check(false);
2272 constructor->set_access_check_info(i::Heap::undefined_value());
2273 }
2274
2275 global_template = outer_template;
2237 } 2276 }
2238 2277
2239 i::Handle<i::Context> env = i::Bootstrapper::CreateEnvironment( 2278 i::Handle<i::Context> env = i::Bootstrapper::CreateEnvironment(
2240 Utils::OpenHandle(*global_object), 2279 Utils::OpenHandle(*global_object),
2241 global_template, extensions); 2280 global_template, extensions);
2242 if (!ApiCheck(!env.is_null(), 2281 if (!ApiCheck(!env.is_null(),
2243 "v8::Context::New()", 2282 "v8::Context::New()",
2244 "Could not initialize environment")) 2283 "Could not initialize environment"))
2245 return Persistent<Context>(); 2284 return Persistent<Context>();
2246 return Persistent<Context>(Utils::ToLocal(env)); 2285 return Persistent<Context>(Utils::ToLocal(env));
2247 } 2286 }
2248 2287
2249 2288
2250 void v8::Context::SetSecurityToken(Handle<Value> token) { 2289 void v8::Context::SetSecurityToken(Handle<Value> token) {
2290 if (IsDeadCheck("v8::Context::SetSecurityToken()")) return;
2251 i::Handle<i::Context> env = Utils::OpenHandle(this); 2291 i::Handle<i::Context> env = Utils::OpenHandle(this);
2252 i::Handle<i::Object> token_handle = Utils::OpenHandle(*token); 2292 i::Handle<i::Object> token_handle = Utils::OpenHandle(*token);
2253 // The global object of an environment is always a real global 2293 env->set_security_token(*token_handle);
2254 // object with security token and reference to the builtins object. 2294 }
2255 i::JSGlobalObject::cast(env->global())->set_security_token(*token_handle); 2295
2296
2297 void v8::Context::UseDefaultSecurityToken() {
2298 if (IsDeadCheck("v8::Context::UseDefaultSecurityToken()")) return;
2299 i::Handle<i::Context> env = Utils::OpenHandle(this);
2300 // The default security token of an environment is the inner global object
2301 // of the environment. The security tokens of outer and inner global objects
2302 // are always the same.
2303 env->set_security_token(env->global());
2256 } 2304 }
2257 2305
2258 2306
2259 Handle<Value> v8::Context::GetSecurityToken() { 2307 Handle<Value> v8::Context::GetSecurityToken() {
2308 if (IsDeadCheck("v8::Context::GetSecurityToken()")) return Handle<Value>();
2260 i::Handle<i::Context> env = Utils::OpenHandle(this); 2309 i::Handle<i::Context> env = Utils::OpenHandle(this);
2261 i::Object* security_token = 2310 i::Object* security_token = env->security_token();
2262 i::JSGlobalObject::cast(env->global())->security_token();
2263 i::Handle<i::Object> token_handle(security_token); 2311 i::Handle<i::Object> token_handle(security_token);
2264 return Utils::ToLocal(token_handle); 2312 return Utils::ToLocal(token_handle);
2265 } 2313 }
2266 2314
2267 2315
2268 bool Context::HasOutOfMemoryException() { 2316 bool Context::HasOutOfMemoryException() {
2269 i::Handle<i::Context> env = Utils::OpenHandle(this); 2317 i::Handle<i::Context> env = Utils::OpenHandle(this);
2270 return env->has_out_of_memory(); 2318 return env->has_out_of_memory();
2271 } 2319 }
2272 2320
2273 2321
2274 bool Context::InContext() { 2322 bool Context::InContext() {
2275 return i::Top::context() != NULL; 2323 return i::Top::context() != NULL;
2276 } 2324 }
2277 2325
2278 2326
2279 bool Context::InSecurityContext() {
2280 return i::Top::security_context() != NULL;
2281 }
2282
2283
2284 v8::Local<v8::Context> Context::GetEntered() { 2327 v8::Local<v8::Context> Context::GetEntered() {
2285 if (IsDeadCheck("v8::Context::GetEntered()")) return Local<Context>(); 2328 if (IsDeadCheck("v8::Context::GetEntered()")) return Local<Context>();
2286 i::Handle<i::Object> last = thread_local.LastEnteredContext(); 2329 i::Handle<i::Object> last = thread_local.LastEnteredContext();
2287 if (last.is_null()) return Local<Context>(); 2330 if (last.is_null()) return Local<Context>();
2288 i::Handle<i::Context> context = i::Handle<i::Context>::cast(last); 2331 i::Handle<i::Context> context = i::Handle<i::Context>::cast(last);
2289 return Utils::ToLocal(context); 2332 return Utils::ToLocal(context);
2290 } 2333 }
2291 2334
2292 2335
2293 v8::Local<v8::Context> Context::GetCurrent() { 2336 v8::Local<v8::Context> Context::GetCurrent() {
2294 if (IsDeadCheck("v8::Context::GetCurrent()")) return Local<Context>(); 2337 if (IsDeadCheck("v8::Context::GetCurrent()")) return Local<Context>();
2295 i::Handle<i::Context> context(i::Top::global_context()); 2338 i::Handle<i::Context> context(i::Top::global_context());
2296 return Utils::ToLocal(context); 2339 return Utils::ToLocal(context);
2297 } 2340 }
2298 2341
2299 2342
2300 v8::Local<v8::Context> Context::GetCurrentSecurityContext() {
2301 if (IsDeadCheck("v8::Context::GetCurrentSecurityContext()")) {
2302 return Local<Context>();
2303 }
2304 i::Handle<i::Context> context(i::Top::security_context());
2305 return Utils::ToLocal(context);
2306 }
2307
2308
2309 v8::Local<v8::Object> Context::Global() { 2343 v8::Local<v8::Object> Context::Global() {
2310 if (IsDeadCheck("v8::Context::Global()")) return Local<v8::Object>(); 2344 if (IsDeadCheck("v8::Context::Global()")) return Local<v8::Object>();
2311 i::Object** ctx = reinterpret_cast<i::Object**>(this); 2345 i::Object** ctx = reinterpret_cast<i::Object**>(this);
2312 i::Handle<i::Context> context = 2346 i::Handle<i::Context> context =
2313 i::Handle<i::Context>::cast(i::Handle<i::Object>(ctx)); 2347 i::Handle<i::Context>::cast(i::Handle<i::Object>(ctx));
2314 i::Handle<i::JSObject> global(context->global()); 2348 i::Handle<i::Object> global(context->global_proxy());
2315 return Utils::ToLocal(global); 2349 return Utils::ToLocal(i::Handle<i::JSObject>::cast(global));
2316 } 2350 }
2317 2351
2318 2352
2353 void Context::DetachGlobal() {
2354 if (IsDeadCheck("v8::Context::DetachGlobal()")) return;
2355 i::Object** ctx = reinterpret_cast<i::Object**>(this);
2356 i::Handle<i::Context> context =
2357 i::Handle<i::Context>::cast(i::Handle<i::Object>(ctx));
2358 i::Bootstrapper::DetachGlobal(context);
2359 }
2360
2361
2319 Local<v8::Object> ObjectTemplate::NewInstance() { 2362 Local<v8::Object> ObjectTemplate::NewInstance() {
2320 ON_BAILOUT("v8::ObjectTemplate::NewInstance()", return Local<v8::Object>()); 2363 ON_BAILOUT("v8::ObjectTemplate::NewInstance()", return Local<v8::Object>());
2321 LOG_API("ObjectTemplate::NewInstance"); 2364 LOG_API("ObjectTemplate::NewInstance");
2322 EXCEPTION_PREAMBLE(); 2365 EXCEPTION_PREAMBLE();
2323 i::Handle<i::Object> obj = 2366 i::Handle<i::Object> obj =
2324 i::Execution::InstantiateObject(Utils::OpenHandle(this), 2367 i::Execution::InstantiateObject(Utils::OpenHandle(this),
2325 &has_pending_exception); 2368 &has_pending_exception);
2326 EXCEPTION_BAILOUT_CHECK(Local<v8::Object>()); 2369 EXCEPTION_BAILOUT_CHECK(Local<v8::Object>());
2327 return Utils::ToLocal(i::Handle<i::JSObject>::cast(obj)); 2370 return Utils::ToLocal(i::Handle<i::JSObject>::cast(obj));
2328 } 2371 }
(...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after
2926 reinterpret_cast<HandleScopeImplementer*>(storage); 2969 reinterpret_cast<HandleScopeImplementer*>(storage);
2927 List<void**>* blocks_of_archived_thread = thread_local->Blocks(); 2970 List<void**>* blocks_of_archived_thread = thread_local->Blocks();
2928 ImplementationUtilities::HandleScopeData* handle_data_of_archived_thread = 2971 ImplementationUtilities::HandleScopeData* handle_data_of_archived_thread =
2929 &thread_local->handle_scope_data_; 2972 &thread_local->handle_scope_data_;
2930 Iterate(v, blocks_of_archived_thread, handle_data_of_archived_thread); 2973 Iterate(v, blocks_of_archived_thread, handle_data_of_archived_thread);
2931 2974
2932 return storage + ArchiveSpacePerThread(); 2975 return storage + ArchiveSpacePerThread();
2933 } 2976 }
2934 2977
2935 } } // namespace v8::internal 2978 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/api.h ('k') | src/bootstrapper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698