Chromium Code Reviews| Index: src/api.cc |
| =================================================================== |
| --- src/api.cc (revision 1900) |
| +++ src/api.cc (working copy) |
| @@ -99,7 +99,6 @@ |
| // --- E x c e p t i o n B e h a v i o r --- |
| -static bool has_shut_down = false; |
| static FatalErrorCallback exception_behavior = NULL; |
| @@ -123,7 +122,7 @@ |
| // When V8 cannot allocated memory FatalProcessOutOfMemory is called. |
| // The default fatal error handler is called and execution is stopped. |
| void i::V8::FatalProcessOutOfMemory(const char* location) { |
| - has_shut_down = true; |
| + i::V8::SetFatalError(); |
| FatalErrorCallback callback = GetFatalErrorHandler(); |
| { |
| LEAVE_V8; |
| @@ -142,13 +141,13 @@ |
| bool Utils::ReportApiFailure(const char* location, const char* message) { |
| FatalErrorCallback callback = GetFatalErrorHandler(); |
| callback(location, message); |
| - has_shut_down = true; |
| + i::V8::SetFatalError(); |
| return false; |
| } |
| bool V8::IsDead() { |
| - return has_shut_down; |
| + return i::V8::IsDead(); |
| } |
| @@ -186,7 +185,8 @@ |
| * yet been done. |
| */ |
| static inline bool IsDeadCheck(const char* location) { |
| - return has_shut_down ? ReportV8Dead(location) : false; |
| + return !i::V8::IsRunning() |
| + && i::V8::IsDead() ? ReportV8Dead(location) : false; |
| } |
| @@ -205,9 +205,11 @@ |
| static i::StringInputBuffer write_input_buffer; |
| -static void EnsureInitialized(const char* location) { |
| - if (IsDeadCheck(location)) return; |
| - ApiCheck(v8::V8::Initialize(), location, "Error initializing V8"); |
| +static inline bool EnsureInitialized(const char* location) { |
| + if (i::V8::IsRunning()) { |
| + return true; |
| + } |
| + return ApiCheck(v8::V8::Initialize(), location, "Error initializing V8"); |
|
iposva
2009/05/07 23:04:06
Thinking about it further it might be helpful to c
|
| } |
| @@ -225,29 +227,25 @@ |
| v8::Handle<v8::Primitive> ImplementationUtilities::Undefined() { |
| - if (IsDeadCheck("v8::Undefined()")) return v8::Handle<v8::Primitive>(); |
| - EnsureInitialized("v8::Undefined()"); |
| + if (!EnsureInitialized("v8::Undefined()")) return v8::Handle<v8::Primitive>(); |
| return v8::Handle<Primitive>(ToApi<Primitive>(i::Factory::undefined_value())); |
| } |
| v8::Handle<v8::Primitive> ImplementationUtilities::Null() { |
| - if (IsDeadCheck("v8::Null()")) return v8::Handle<v8::Primitive>(); |
| - EnsureInitialized("v8::Null()"); |
| + if (!EnsureInitialized("v8::Null()")) return v8::Handle<v8::Primitive>(); |
| return v8::Handle<Primitive>(ToApi<Primitive>(i::Factory::null_value())); |
| } |
| v8::Handle<v8::Boolean> ImplementationUtilities::True() { |
| - if (IsDeadCheck("v8::True()")) return v8::Handle<v8::Boolean>(); |
| - EnsureInitialized("v8::True()"); |
| + if (!EnsureInitialized("v8::True()")) return v8::Handle<v8::Boolean>(); |
| return v8::Handle<v8::Boolean>(ToApi<Boolean>(i::Factory::true_value())); |
| } |
| v8::Handle<v8::Boolean> ImplementationUtilities::False() { |
| - if (IsDeadCheck("v8::False()")) return v8::Handle<v8::Boolean>(); |
| - EnsureInitialized("v8::False()"); |
| + if (!EnsureInitialized("v8::False()")) return v8::Handle<v8::Boolean>(); |
| return v8::Handle<v8::Boolean>(ToApi<Boolean>(i::Factory::false_value())); |
| } |
| @@ -373,21 +371,21 @@ |
| bool V8::IsGlobalNearDeath(void** obj) { |
| LOG_API("IsGlobalNearDeath"); |
| - if (has_shut_down) return false; |
| + if (!i::V8::IsRunning()) return false; |
| return i::GlobalHandles::IsNearDeath(reinterpret_cast<i::Object**>(obj)); |
| } |
| bool V8::IsGlobalWeak(void** obj) { |
| LOG_API("IsGlobalWeak"); |
| - if (has_shut_down) return false; |
| + if (!i::V8::IsRunning()) return false; |
| return i::GlobalHandles::IsWeak(reinterpret_cast<i::Object**>(obj)); |
| } |
| void V8::DisposeGlobal(void** obj) { |
| LOG_API("DisposeGlobal"); |
| - if (has_shut_down) return; |
| + if (!i::V8::IsRunning()) return; |
| i::Object** ptr = reinterpret_cast<i::Object**>(obj); |
| if ((*ptr)->IsGlobalContext()) i::Heap::NotifyContextDisposed(); |
| i::GlobalHandles::Destroy(ptr); |
| @@ -431,7 +429,7 @@ |
| void Context::Exit() { |
| - if (has_shut_down) return; |
| + if (!i::V8::IsRunning()) return; |
| if (!ApiCheck(thread_local.LeaveLastContext(), |
| "v8::Context::Exit()", |
| "Cannot exit non-entered context")) { |
| @@ -2450,7 +2448,7 @@ |
| // --- E n v i r o n m e n t --- |
| bool v8::V8::Initialize() { |
| - if (i::V8::HasBeenSetup()) return true; |
| + if (i::V8::IsRunning()) return true; |
| ENTER_V8; |
| HandleScope scope; |
| if (i::Snapshot::Initialize()) { |
| @@ -3058,17 +3056,14 @@ |
| void V8::SetCounterFunction(CounterLookupCallback callback) { |
| - if (IsDeadCheck("v8::V8::SetCounterFunction()")) return; |
| i::StatsTable::SetCounterFunction(callback); |
|
iposva
2009/05/07 23:04:06
Should we reintroduce the IsDeadCheck here?
|
| } |
| void V8::SetCreateHistogramFunction(CreateHistogramCallback callback) { |
| - if (IsDeadCheck("v8::V8::SetCreateHistogramFunction()")) return; |
| i::StatsTable::SetCreateHistogramFunction(callback); |
|
iposva
2009/05/07 23:04:06
ditto
|
| } |
| void V8::SetAddHistogramSampleFunction(AddHistogramSampleCallback callback) { |
| - if (IsDeadCheck("v8::V8::SetAddHistogramSampleFunction()")) return; |
| i::StatsTable::SetAddHistogramSampleFunction(callback); |
|
iposva
2009/05/07 23:04:06
ditto
|
| } |
| @@ -3312,7 +3307,7 @@ |
| void Debug::DebugBreak() { |
| - if (!i::V8::HasBeenSetup()) return; |
| + if (!i::V8::IsRunning()) return; |
| i::StackGuard::DebugBreak(); |
| } |
| @@ -3354,7 +3349,7 @@ |
| void Debug::SendCommand(const uint16_t* command, int length, |
| ClientData* client_data) { |
| - if (!i::V8::HasBeenSetup()) return; |
| + if (!i::V8::IsRunning()) return; |
| i::Debugger::ProcessCommand(i::Vector<const uint16_t>(command, length), |
| client_data); |
| } |
| @@ -3370,7 +3365,7 @@ |
| Handle<Value> Debug::Call(v8::Handle<v8::Function> fun, |
| v8::Handle<v8::Value> data) { |
| - if (!i::V8::HasBeenSetup()) return Handle<Value>(); |
| + if (!i::V8::IsRunning()) return Handle<Value>(); |
| ON_BAILOUT("v8::Debug::Call()", return Handle<Value>()); |
| ENTER_V8; |
| i::Handle<i::Object> result; |