Index: src/api.cc |
diff --git a/src/api.cc b/src/api.cc |
index 117427a55d25d9cd23562b5708a9ccaae8676b7b..e473540d4069561c0eb15c04230ea6926bf8afec 100644 |
--- a/src/api.cc |
+++ b/src/api.cc |
@@ -1905,7 +1905,11 @@ v8::Local<Value> v8::TryCatch::StackTrace() const { |
i::HandleScope scope(isolate_); |
i::Handle<i::JSObject> obj(i::JSObject::cast(raw_obj), isolate_); |
i::Handle<i::String> name = isolate_->factory()->stack_string(); |
- if (!i::JSReceiver::HasProperty(obj, name)) return v8::Local<Value>(); |
+ EXCEPTION_PREAMBLE(isolate_); |
+ Maybe<bool> maybe = i::JSReceiver::HasProperty(obj, name); |
+ has_pending_exception = !maybe.has_value; |
+ EXCEPTION_BAILOUT_CHECK(isolate_, v8::Local<Value>()); |
+ if (!maybe.value) return v8::Local<Value>(); |
i::Handle<i::Object> value; |
if (!i::Object::GetProperty(obj, name).ToHandle(&value)) { |
return v8::Local<Value>(); |
@@ -3139,10 +3143,13 @@ PropertyAttribute v8::Object::GetPropertyAttributes(v8::Handle<Value> key) { |
EXCEPTION_BAILOUT_CHECK(isolate, static_cast<PropertyAttribute>(NONE)); |
} |
i::Handle<i::Name> key_name = i::Handle<i::Name>::cast(key_obj); |
- PropertyAttributes result = |
+ EXCEPTION_PREAMBLE(isolate); |
+ Maybe<PropertyAttributes> result = |
i::JSReceiver::GetPropertyAttributes(self, key_name); |
- if (result == ABSENT) return static_cast<PropertyAttribute>(NONE); |
- return static_cast<PropertyAttribute>(result); |
+ has_pending_exception = !result.has_value; |
+ EXCEPTION_BAILOUT_CHECK(isolate, static_cast<PropertyAttribute>(NONE)); |
+ if (result.value == ABSENT) return static_cast<PropertyAttribute>(NONE); |
+ return static_cast<PropertyAttribute>(result.value); |
} |
@@ -3399,7 +3406,11 @@ bool v8::Object::Has(uint32_t index) { |
i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
ON_BAILOUT(isolate, "v8::Object::HasProperty()", return false); |
i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
- return i::JSReceiver::HasElement(self, index); |
+ EXCEPTION_PREAMBLE(isolate); |
+ Maybe<bool> maybe = i::JSReceiver::HasElement(self, index); |
+ has_pending_exception = !maybe.has_value; |
+ EXCEPTION_BAILOUT_CHECK(isolate, false); |
+ return maybe.value; |
} |
@@ -3478,8 +3489,12 @@ bool v8::Object::HasOwnProperty(Handle<String> key) { |
i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
ON_BAILOUT(isolate, "v8::Object::HasOwnProperty()", |
return false); |
- return i::JSReceiver::HasOwnProperty( |
- Utils::OpenHandle(this), Utils::OpenHandle(*key)); |
+ EXCEPTION_PREAMBLE(isolate); |
+ Maybe<bool> maybe = i::JSReceiver::HasOwnProperty(Utils::OpenHandle(this), |
+ Utils::OpenHandle(*key)); |
+ has_pending_exception = !maybe.has_value; |
+ EXCEPTION_BAILOUT_CHECK(isolate, false); |
+ return maybe.value; |
} |
@@ -3487,8 +3502,12 @@ bool v8::Object::HasRealNamedProperty(Handle<String> key) { |
i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
ON_BAILOUT(isolate, "v8::Object::HasRealNamedProperty()", |
return false); |
- return i::JSObject::HasRealNamedProperty(Utils::OpenHandle(this), |
- Utils::OpenHandle(*key)); |
+ EXCEPTION_PREAMBLE(isolate); |
+ Maybe<bool> maybe = i::JSObject::HasRealNamedProperty( |
+ Utils::OpenHandle(this), Utils::OpenHandle(*key)); |
+ has_pending_exception = !maybe.has_value; |
+ EXCEPTION_BAILOUT_CHECK(isolate, false); |
+ return maybe.value; |
} |
@@ -3496,7 +3515,12 @@ bool v8::Object::HasRealIndexedProperty(uint32_t index) { |
i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
ON_BAILOUT(isolate, "v8::Object::HasRealIndexedProperty()", |
return false); |
- return i::JSObject::HasRealElementProperty(Utils::OpenHandle(this), index); |
+ EXCEPTION_PREAMBLE(isolate); |
+ Maybe<bool> maybe = |
+ i::JSObject::HasRealElementProperty(Utils::OpenHandle(this), index); |
+ has_pending_exception = !maybe.has_value; |
+ EXCEPTION_BAILOUT_CHECK(isolate, false); |
+ return maybe.value; |
} |
@@ -3506,8 +3530,12 @@ bool v8::Object::HasRealNamedCallbackProperty(Handle<String> key) { |
"v8::Object::HasRealNamedCallbackProperty()", |
return false); |
ENTER_V8(isolate); |
- return i::JSObject::HasRealNamedCallbackProperty(Utils::OpenHandle(this), |
- Utils::OpenHandle(*key)); |
+ EXCEPTION_PREAMBLE(isolate); |
+ Maybe<bool> maybe = i::JSObject::HasRealNamedCallbackProperty( |
+ Utils::OpenHandle(this), Utils::OpenHandle(*key)); |
+ has_pending_exception = !maybe.has_value; |
+ EXCEPTION_BAILOUT_CHECK(isolate, false); |
+ return maybe.value; |
} |