Index: src/api.cc |
diff --git a/src/api.cc b/src/api.cc |
index b1d133abf916290f8c35078b0138431478350f71..1c349b561bf844608da4f2b61da5a12dd56b2b0e 100644 |
--- a/src/api.cc |
+++ b/src/api.cc |
@@ -95,6 +95,11 @@ namespace v8 { |
(isolate)->handle_scope_implementer(); \ |
handle_scope_implementer->DecrementCallDepth(); \ |
if (has_pending_exception) { \ |
+ if (handle_scope_implementer->CallDepthIsZero() && \ |
+ (isolate)->is_out_of_memory()) { \ |
+ if (!(isolate)->ignore_out_of_memory()) \ |
+ i::V8::FatalProcessOutOfMemory(NULL); \ |
+ } \ |
bool call_depth_is_zero = handle_scope_implementer->CallDepthIsZero(); \ |
(isolate)->OptionalRescheduleException(call_depth_is_zero); \ |
do_callback \ |
@@ -5256,6 +5261,12 @@ Handle<Value> v8::Context::GetSecurityToken() { |
} |
+bool Context::HasOutOfMemoryException() { |
+ i::Handle<i::Context> env = Utils::OpenHandle(this); |
+ return env->has_out_of_memory(); |
+} |
+ |
+ |
v8::Isolate* Context::GetIsolate() { |
i::Handle<i::Context> env = Utils::OpenHandle(this); |
return reinterpret_cast<Isolate*>(env->GetIsolate()); |
@@ -6214,6 +6225,11 @@ Local<Integer> v8::Integer::NewFromUnsigned(Isolate* isolate, uint32_t value) { |
} |
+void V8::IgnoreOutOfMemoryException() { |
+ EnterIsolateIfNeeded()->set_ignore_out_of_memory(true); |
+} |
+ |
+ |
bool V8::AddMessageListener(MessageCallback that, Handle<Value> data) { |
i::Isolate* isolate = i::Isolate::Current(); |
EnsureInitializedForIsolate(isolate, "v8::V8::AddMessageListener()"); |