| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 } | 293 } |
| 294 | 294 |
| 295 | 295 |
| 296 static inline bool EmptyCheck(const char* location, const v8::Data* obj) { | 296 static inline bool EmptyCheck(const char* location, const v8::Data* obj) { |
| 297 return (obj == 0) ? ReportEmptyHandle(location) : false; | 297 return (obj == 0) ? ReportEmptyHandle(location) : false; |
| 298 } | 298 } |
| 299 | 299 |
| 300 // --- S t a t i c s --- | 300 // --- S t a t i c s --- |
| 301 | 301 |
| 302 | 302 |
| 303 static bool InitializeHelper(i::Isolate* isolate) { | 303 static bool InitializeHelper() { |
| 304 // If the isolate has a function entry hook, it needs to re-build all its | 304 if (i::Snapshot::Initialize()) return true; |
| 305 // code stubs with entry hooks embedded, so let's deserialize a snapshot. | |
| 306 if (isolate == NULL || isolate->function_entry_hook() == NULL) { | |
| 307 if (i::Snapshot::Initialize()) | |
| 308 return true; | |
| 309 } | |
| 310 return i::V8::Initialize(NULL); | 305 return i::V8::Initialize(NULL); |
| 311 } | 306 } |
| 312 | 307 |
| 313 | 308 |
| 314 static inline bool EnsureInitializedForIsolate(i::Isolate* isolate, | 309 static inline bool EnsureInitializedForIsolate(i::Isolate* isolate, |
| 315 const char* location) { | 310 const char* location) { |
| 316 if (IsDeadCheck(isolate, location)) return false; | 311 if (IsDeadCheck(isolate, location)) return false; |
| 317 if (isolate != NULL) { | 312 if (isolate != NULL) { |
| 318 if (isolate->IsInitialized()) return true; | 313 if (isolate->IsInitialized()) return true; |
| 319 } | 314 } |
| 320 ASSERT(isolate == i::Isolate::Current()); | 315 ASSERT(isolate == i::Isolate::Current()); |
| 321 return ApiCheck(InitializeHelper(isolate), location, "Error initializing V8"); | 316 return ApiCheck(InitializeHelper(), location, "Error initializing V8"); |
| 322 } | 317 } |
| 323 | 318 |
| 324 // Some initializing API functions are called early and may be | 319 // Some initializing API functions are called early and may be |
| 325 // called on a thread different from static initializer thread. | 320 // called on a thread different from static initializer thread. |
| 326 // If Isolate API is used, Isolate::Enter() will initialize TLS so | 321 // If Isolate API is used, Isolate::Enter() will initialize TLS so |
| 327 // Isolate::Current() works. If it's a legacy case, then the thread | 322 // Isolate::Current() works. If it's a legacy case, then the thread |
| 328 // may not have TLS initialized yet. However, in initializing APIs it | 323 // may not have TLS initialized yet. However, in initializing APIs it |
| 329 // may be too early to call EnsureInitialized() - some pre-init | 324 // may be too early to call EnsureInitialized() - some pre-init |
| 330 // parameters still have to be configured. | 325 // parameters still have to be configured. |
| 331 static inline i::Isolate* EnterIsolateIfNeeded() { | 326 static inline i::Isolate* EnterIsolateIfNeeded() { |
| (...skipping 4877 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5209 | 5204 |
| 5210 | 5205 |
| 5211 // --- E n v i r o n m e n t --- | 5206 // --- E n v i r o n m e n t --- |
| 5212 | 5207 |
| 5213 | 5208 |
| 5214 bool v8::V8::Initialize() { | 5209 bool v8::V8::Initialize() { |
| 5215 i::Isolate* isolate = i::Isolate::UncheckedCurrent(); | 5210 i::Isolate* isolate = i::Isolate::UncheckedCurrent(); |
| 5216 if (isolate != NULL && isolate->IsInitialized()) { | 5211 if (isolate != NULL && isolate->IsInitialized()) { |
| 5217 return true; | 5212 return true; |
| 5218 } | 5213 } |
| 5219 return InitializeHelper(isolate); | 5214 return InitializeHelper(); |
| 5220 } | 5215 } |
| 5221 | 5216 |
| 5222 | 5217 |
| 5223 void v8::V8::SetEntropySource(EntropySource source) { | 5218 void v8::V8::SetEntropySource(EntropySource source) { |
| 5224 i::V8::SetEntropySource(source); | 5219 i::V8::SetEntropySource(source); |
| 5225 } | 5220 } |
| 5226 | 5221 |
| 5227 | 5222 |
| 5228 void v8::V8::SetReturnAddressLocationResolver( | 5223 void v8::V8::SetReturnAddressLocationResolver( |
| 5229 ReturnAddressLocationResolver return_address_resolver) { | 5224 ReturnAddressLocationResolver return_address_resolver) { |
| 5230 i::V8::SetReturnAddressLocationResolver(return_address_resolver); | 5225 i::V8::SetReturnAddressLocationResolver(return_address_resolver); |
| 5231 } | 5226 } |
| 5232 | 5227 |
| 5233 | 5228 |
| 5234 bool v8::V8::SetFunctionEntryHook(FunctionEntryHook entry_hook) { | 5229 bool v8::V8::SetFunctionEntryHook(FunctionEntryHook entry_hook) { |
| 5235 return SetFunctionEntryHook(Isolate::GetCurrent(), entry_hook); | 5230 return i::ProfileEntryHookStub::SetFunctionEntryHook(entry_hook); |
| 5236 } | 5231 } |
| 5237 | 5232 |
| 5238 | 5233 |
| 5239 bool v8::V8::SetFunctionEntryHook(Isolate* ext_isolate, | |
| 5240 FunctionEntryHook entry_hook) { | |
| 5241 ASSERT(ext_isolate != NULL); | |
| 5242 ASSERT(entry_hook != NULL); | |
| 5243 | |
| 5244 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(ext_isolate); | |
| 5245 | |
| 5246 // The entry hook can only be set before the Isolate is initialized, as | |
| 5247 // otherwise the Isolate's code stubs generated at initialization won't | |
| 5248 // contain entry hooks. | |
| 5249 if (isolate->IsInitialized()) | |
| 5250 return false; | |
| 5251 | |
| 5252 // Setting an entry hook is a one-way operation, once set, it cannot be | |
| 5253 // changed or unset. | |
| 5254 if (isolate->function_entry_hook() != NULL) | |
| 5255 return false; | |
| 5256 | |
| 5257 isolate->set_function_entry_hook(entry_hook); | |
| 5258 return true; | |
| 5259 } | |
| 5260 | |
| 5261 | |
| 5262 void v8::V8::SetJitCodeEventHandler( | 5234 void v8::V8::SetJitCodeEventHandler( |
| 5263 JitCodeEventOptions options, JitCodeEventHandler event_handler) { | 5235 JitCodeEventOptions options, JitCodeEventHandler event_handler) { |
| 5264 i::Isolate* isolate = i::Isolate::Current(); | 5236 i::Isolate* isolate = i::Isolate::Current(); |
| 5265 // Ensure that logging is initialized for our isolate. | 5237 // Ensure that logging is initialized for our isolate. |
| 5266 isolate->InitializeLoggingAndCounters(); | 5238 isolate->InitializeLoggingAndCounters(); |
| 5267 isolate->logger()->SetCodeEventHandler(options, event_handler); | 5239 isolate->logger()->SetCodeEventHandler(options, event_handler); |
| 5268 } | 5240 } |
| 5269 | 5241 |
| 5270 void v8::V8::SetArrayBufferAllocator( | 5242 void v8::V8::SetArrayBufferAllocator( |
| 5271 ArrayBuffer::Allocator* allocator) { | 5243 ArrayBuffer::Allocator* allocator) { |
| (...skipping 2747 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8019 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7991 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
| 8020 Address callback_address = | 7992 Address callback_address = |
| 8021 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 7993 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 8022 VMState<EXTERNAL> state(isolate); | 7994 VMState<EXTERNAL> state(isolate); |
| 8023 ExternalCallbackScope call_scope(isolate, callback_address); | 7995 ExternalCallbackScope call_scope(isolate, callback_address); |
| 8024 return callback(info); | 7996 return callback(info); |
| 8025 } | 7997 } |
| 8026 | 7998 |
| 8027 | 7999 |
| 8028 } } // namespace v8::internal | 8000 } } // namespace v8::internal |
| OLD | NEW |