Index: src/api.cc |
=================================================================== |
--- src/api.cc (revision 2985) |
+++ src/api.cc (working copy) |
@@ -1898,6 +1898,7 @@ |
v8::PropertyAttribute attribs) { |
ON_BAILOUT("v8::Object::Set()", return false); |
ENTER_V8; |
+ HandleScope scope; |
i::Handle<i::Object> self = Utils::OpenHandle(this); |
i::Handle<i::Object> key_obj = Utils::OpenHandle(*key); |
i::Handle<i::Object> value_obj = Utils::OpenHandle(*value); |
@@ -1918,6 +1919,7 @@ |
v8::PropertyAttribute attribs) { |
ON_BAILOUT("v8::Object::ForceSet()", return false); |
ENTER_V8; |
+ HandleScope scope; |
i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
i::Handle<i::Object> key_obj = Utils::OpenHandle(*key); |
i::Handle<i::Object> value_obj = Utils::OpenHandle(*value); |
@@ -1936,6 +1938,7 @@ |
bool v8::Object::ForceDelete(v8::Handle<Value> key) { |
ON_BAILOUT("v8::Object::ForceDelete()", return false); |
ENTER_V8; |
+ HandleScope scope; |
i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
i::Handle<i::Object> key_obj = Utils::OpenHandle(*key); |
EXCEPTION_PREAMBLE(); |
@@ -2121,7 +2124,7 @@ |
} |
-Handle<Value> v8::Object::GetRealNamedPropertyInPrototypeChain( |
+Local<Value> v8::Object::GetRealNamedPropertyInPrototypeChain( |
Handle<String> key) { |
ON_BAILOUT("v8::Object::GetRealNamedPropertyInPrototypeChain()", |
return Local<Value>()); |
@@ -2142,12 +2145,32 @@ |
} |
+Local<Value> v8::Object::GetRealNamedProperty(Handle<String> key) { |
+ ON_BAILOUT("v8::Object::GetRealNamedProperty()", return Local<Value>()); |
+ ENTER_V8; |
+ i::Handle<i::JSObject> self_obj = Utils::OpenHandle(this); |
+ i::Handle<i::String> key_obj = Utils::OpenHandle(*key); |
+ i::LookupResult lookup; |
+ self_obj->LookupRealNamedProperty(*key_obj, &lookup); |
+ if (lookup.IsValid()) { |
+ PropertyAttributes attributes; |
+ i::Handle<i::Object> result(self_obj->GetProperty(*self_obj, |
+ &lookup, |
+ *key_obj, |
+ &attributes)); |
+ return Utils::ToLocal(result); |
+ } |
+ return Local<Value>(); // No real property was found in prototype chain. |
+} |
+ |
+ |
// Turns on access checks by copying the map and setting the check flag. |
// Because the object gets a new map, existing inline cache caching |
// the old map of this object will fail. |
void v8::Object::TurnOnAccessCheck() { |
ON_BAILOUT("v8::Object::TurnOnAccessCheck()", return); |
ENTER_V8; |
+ HandleScope scope; |
i::Handle<i::JSObject> obj = Utils::OpenHandle(this); |
i::Handle<i::Map> new_map = |
@@ -2177,6 +2200,7 @@ |
int v8::Object::GetIdentityHash() { |
ON_BAILOUT("v8::Object::GetIdentityHash()", return 0); |
ENTER_V8; |
+ HandleScope scope; |
i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
i::Handle<i::Object> hidden_props(i::GetHiddenProperties(self, true)); |
i::Handle<i::Object> hash_symbol = i::Factory::identity_hash_symbol(); |
@@ -2206,6 +2230,7 @@ |
v8::Handle<v8::Value> value) { |
ON_BAILOUT("v8::Object::SetHiddenValue()", return false); |
ENTER_V8; |
+ HandleScope scope; |
i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
i::Handle<i::Object> hidden_props(i::GetHiddenProperties(self, true)); |
i::Handle<i::Object> key_obj = Utils::OpenHandle(*key); |
@@ -2245,6 +2270,7 @@ |
bool v8::Object::DeleteHiddenValue(v8::Handle<v8::String> key) { |
ON_BAILOUT("v8::DeleteHiddenValue()", return false); |
ENTER_V8; |
+ HandleScope scope; |
i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
i::Handle<i::Object> hidden_props(i::GetHiddenProperties(self, false)); |
if (hidden_props->IsUndefined()) { |
@@ -2259,6 +2285,7 @@ |
void v8::Object::SetIndexedPropertiesToPixelData(uint8_t* data, int length) { |
ON_BAILOUT("v8::SetElementsToPixelData()", return); |
ENTER_V8; |
+ HandleScope scope; |
if (!ApiCheck(i::Smi::IsValid(length), |
"v8::Object::SetIndexedPropertiesToPixelData()", |
"length exceeds max acceptable value")) { |