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 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 | 237 |
238 static inline bool EnsureInitializedForIsolate(i::Isolate* isolate, | 238 static inline bool EnsureInitializedForIsolate(i::Isolate* isolate, |
239 const char* location) { | 239 const char* location) { |
240 return (isolate != NULL && isolate->IsInitialized()) || | 240 return (isolate != NULL && isolate->IsInitialized()) || |
241 Utils::ApiCheck(InitializeHelper(isolate), | 241 Utils::ApiCheck(InitializeHelper(isolate), |
242 location, | 242 location, |
243 "Error initializing V8"); | 243 "Error initializing V8"); |
244 } | 244 } |
245 | 245 |
246 | 246 |
247 // Some initializing API functions are called early and may be | |
248 // called on a thread different from static initializer thread. | |
249 // If Isolate API is used, Isolate::Enter() will initialize TLS so | |
250 // Isolate::Current() works. If it's a legacy case, then the thread | |
251 // may not have TLS initialized yet. However, in initializing APIs it | |
252 // may be too early to call EnsureInitialized() - some pre-init | |
253 // parameters still have to be configured. | |
254 static inline i::Isolate* EnterIsolateIfNeeded() { | |
255 i::Isolate* isolate = i::Isolate::UncheckedCurrent(); | |
256 if (isolate != NULL) | |
257 return isolate; | |
258 | |
259 i::Isolate::EnterDefaultIsolate(); | |
260 isolate = i::Isolate::Current(); | |
261 return isolate; | |
262 } | |
263 | |
264 | |
265 StartupDataDecompressor::StartupDataDecompressor() | 247 StartupDataDecompressor::StartupDataDecompressor() |
266 : raw_data(i::NewArray<char*>(V8::GetCompressedStartupDataCount())) { | 248 : raw_data(i::NewArray<char*>(V8::GetCompressedStartupDataCount())) { |
267 for (int i = 0; i < V8::GetCompressedStartupDataCount(); ++i) { | 249 for (int i = 0; i < V8::GetCompressedStartupDataCount(); ++i) { |
268 raw_data[i] = NULL; | 250 raw_data[i] = NULL; |
269 } | 251 } |
270 } | 252 } |
271 | 253 |
272 | 254 |
273 StartupDataDecompressor::~StartupDataDecompressor() { | 255 StartupDataDecompressor::~StartupDataDecompressor() { |
274 for (int i = 0; i < V8::GetCompressedStartupDataCount(); ++i) { | 256 for (int i = 0; i < V8::GetCompressedStartupDataCount(); ++i) { |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
384 decompressed_data[kExperimentalLibraries].raw_size); | 366 decompressed_data[kExperimentalLibraries].raw_size); |
385 i::Vector<const char> exp_libraries_source( | 367 i::Vector<const char> exp_libraries_source( |
386 decompressed_data[kExperimentalLibraries].data, | 368 decompressed_data[kExperimentalLibraries].data, |
387 decompressed_data[kExperimentalLibraries].raw_size); | 369 decompressed_data[kExperimentalLibraries].raw_size); |
388 i::ExperimentalNatives::SetRawScriptsSource(exp_libraries_source); | 370 i::ExperimentalNatives::SetRawScriptsSource(exp_libraries_source); |
389 #endif | 371 #endif |
390 } | 372 } |
391 | 373 |
392 | 374 |
393 void V8::SetFatalErrorHandler(FatalErrorCallback that) { | 375 void V8::SetFatalErrorHandler(FatalErrorCallback that) { |
394 i::Isolate* isolate = EnterIsolateIfNeeded(); | 376 i::Isolate* isolate = i::Isolate::UncheckedCurrent(); |
395 isolate->set_exception_behavior(that); | 377 isolate->set_exception_behavior(that); |
396 } | 378 } |
397 | 379 |
398 | 380 |
399 void V8::SetAllowCodeGenerationFromStringsCallback( | 381 void V8::SetAllowCodeGenerationFromStringsCallback( |
400 AllowCodeGenerationFromStringsCallback callback) { | 382 AllowCodeGenerationFromStringsCallback callback) { |
401 i::Isolate* isolate = EnterIsolateIfNeeded(); | 383 i::Isolate* isolate = i::Isolate::UncheckedCurrent(); |
402 isolate->set_allow_code_gen_callback(callback); | 384 isolate->set_allow_code_gen_callback(callback); |
403 } | 385 } |
404 | 386 |
405 | 387 |
406 void V8::SetFlagsFromString(const char* str, int length) { | 388 void V8::SetFlagsFromString(const char* str, int length) { |
407 i::FlagList::SetFlagsFromString(str, length); | 389 i::FlagList::SetFlagsFromString(str, length); |
408 } | 390 } |
409 | 391 |
410 | 392 |
411 void V8::SetFlagsFromCommandLine(int* argc, char** argv, bool remove_flags) { | 393 void V8::SetFlagsFromCommandLine(int* argc, char** argv, bool remove_flags) { |
(...skipping 5889 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6301 int frame_limit, | 6283 int frame_limit, |
6302 StackTrace::StackTraceOptions options) { | 6284 StackTrace::StackTraceOptions options) { |
6303 i::Isolate::Current()->SetCaptureStackTraceForUncaughtExceptions( | 6285 i::Isolate::Current()->SetCaptureStackTraceForUncaughtExceptions( |
6304 capture, | 6286 capture, |
6305 frame_limit, | 6287 frame_limit, |
6306 options); | 6288 options); |
6307 } | 6289 } |
6308 | 6290 |
6309 | 6291 |
6310 void V8::SetCounterFunction(CounterLookupCallback callback) { | 6292 void V8::SetCounterFunction(CounterLookupCallback callback) { |
6311 i::Isolate* isolate = EnterIsolateIfNeeded(); | 6293 i::Isolate* isolate = i::Isolate::UncheckedCurrent(); |
6312 isolate->stats_table()->SetCounterFunction(callback); | 6294 isolate->stats_table()->SetCounterFunction(callback); |
6313 } | 6295 } |
6314 | 6296 |
6315 | 6297 |
6316 void V8::SetCreateHistogramFunction(CreateHistogramCallback callback) { | 6298 void V8::SetCreateHistogramFunction(CreateHistogramCallback callback) { |
6317 i::Isolate* isolate = EnterIsolateIfNeeded(); | 6299 i::Isolate* isolate = i::Isolate::UncheckedCurrent(); |
6318 isolate->stats_table()->SetCreateHistogramFunction(callback); | 6300 isolate->stats_table()->SetCreateHistogramFunction(callback); |
6319 isolate->InitializeLoggingAndCounters(); | 6301 isolate->InitializeLoggingAndCounters(); |
6320 isolate->counters()->ResetHistograms(); | 6302 isolate->counters()->ResetHistograms(); |
6321 } | 6303 } |
6322 | 6304 |
6323 | 6305 |
6324 void V8::SetAddHistogramSampleFunction(AddHistogramSampleCallback callback) { | 6306 void V8::SetAddHistogramSampleFunction(AddHistogramSampleCallback callback) { |
6325 i::Isolate* isolate = EnterIsolateIfNeeded(); | 6307 i::Isolate* isolate = i::Isolate::UncheckedCurrent(); |
6326 isolate->stats_table()-> | 6308 isolate->stats_table()-> |
6327 SetAddHistogramSampleFunction(callback); | 6309 SetAddHistogramSampleFunction(callback); |
6328 } | 6310 } |
6329 | 6311 |
6330 void V8::SetFailedAccessCheckCallbackFunction( | 6312 void V8::SetFailedAccessCheckCallbackFunction( |
6331 FailedAccessCheckCallback callback) { | 6313 FailedAccessCheckCallback callback) { |
6332 i::Isolate* isolate = i::Isolate::Current(); | 6314 i::Isolate* isolate = i::Isolate::Current(); |
6333 isolate->SetFailedAccessCheckCallback(callback); | 6315 isolate->SetFailedAccessCheckCallback(callback); |
6334 } | 6316 } |
6335 | 6317 |
(...skipping 1290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7626 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7608 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
7627 Address callback_address = | 7609 Address callback_address = |
7628 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 7610 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
7629 VMState<EXTERNAL> state(isolate); | 7611 VMState<EXTERNAL> state(isolate); |
7630 ExternalCallbackScope call_scope(isolate, callback_address); | 7612 ExternalCallbackScope call_scope(isolate, callback_address); |
7631 callback(info); | 7613 callback(info); |
7632 } | 7614 } |
7633 | 7615 |
7634 | 7616 |
7635 } } // namespace v8::internal | 7617 } } // namespace v8::internal |
OLD | NEW |