Index: src/api.cc |
diff --git a/src/api.cc b/src/api.cc |
index 30852b306864400b5f8f3fc9009a1c8e33664043..8a8640d33d28aa6565daaccc5a86b945f94036cd 100644 |
--- a/src/api.cc |
+++ b/src/api.cc |
@@ -2391,9 +2391,6 @@ bool v8::Object::SetPrototype(Handle<Value> value) { |
ENTER_V8; |
i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
i::Handle<i::Object> value_obj = Utils::OpenHandle(*value); |
- // We do not allow exceptions thrown while setting the prototype |
- // propagate outside. |
- TryCatch try_catch; |
EXCEPTION_PREAMBLE(); |
i::Handle<i::Object> result = i::SetPrototype(self, value_obj); |
has_pending_exception = result.is_null(); |
@@ -2580,25 +2577,6 @@ bool v8::Object::HasIndexedLookupInterceptor() { |
} |
-static Local<Value> GetPropertyByLookup(i::Handle<i::JSObject> receiver, |
- i::Handle<i::String> name, |
- i::LookupResult* lookup) { |
- if (!lookup->IsProperty()) { |
- // No real property was found. |
- return Local<Value>(); |
- } |
- |
- // If the property being looked up is a callback, it can throw |
- // an exception. |
- EXCEPTION_PREAMBLE(); |
- i::Handle<i::Object> result = i::GetProperty(receiver, name, lookup); |
- has_pending_exception = result.is_null(); |
- EXCEPTION_BAILOUT_CHECK(Local<Value>()); |
- |
- return Utils::ToLocal(result); |
-} |
- |
- |
Local<Value> v8::Object::GetRealNamedPropertyInPrototypeChain( |
Handle<String> key) { |
ON_BAILOUT("v8::Object::GetRealNamedPropertyInPrototypeChain()", |
@@ -2608,7 +2586,17 @@ Local<Value> v8::Object::GetRealNamedPropertyInPrototypeChain( |
i::Handle<i::String> key_obj = Utils::OpenHandle(*key); |
i::LookupResult lookup; |
self_obj->LookupRealNamedPropertyInPrototypes(*key_obj, &lookup); |
- return GetPropertyByLookup(self_obj, key_obj, &lookup); |
+ if (lookup.IsProperty()) { |
+ PropertyAttributes attributes; |
+ i::Object* property = |
+ self_obj->GetProperty(*self_obj, |
+ &lookup, |
+ *key_obj, |
+ &attributes)->ToObjectUnchecked(); |
+ i::Handle<i::Object> result(property); |
+ return Utils::ToLocal(result); |
+ } |
+ return Local<Value>(); // No real property was found in prototype chain. |
} |
@@ -2619,7 +2607,17 @@ Local<Value> v8::Object::GetRealNamedProperty(Handle<String> key) { |
i::Handle<i::String> key_obj = Utils::OpenHandle(*key); |
i::LookupResult lookup; |
self_obj->LookupRealNamedProperty(*key_obj, &lookup); |
- return GetPropertyByLookup(self_obj, key_obj, &lookup); |
+ if (lookup.IsProperty()) { |
+ PropertyAttributes attributes; |
+ i::Object* property = |
+ self_obj->GetProperty(*self_obj, |
+ &lookup, |
+ *key_obj, |
+ &attributes)->ToObjectUnchecked(); |
+ i::Handle<i::Object> result(property); |
+ return Utils::ToLocal(result); |
+ } |
+ return Local<Value>(); // No real property was found in prototype chain. |
} |