ON_BAILOUT("v8::DeleteHiddenValue()", return false);
ENTER_V8;
i::Handle<i::JSObject> self = Utils::OpenHandle(this);
- i::Handle<i::JSObject> hidden_props(
- i::JSObject::cast(*i::GetHiddenProperties(self, false)));
+ i::Handle<i::Object> hidden_props(i::GetHiddenProperties(self, false));
if (hidden_props->IsUndefined()) {
- return false;
+ return true;
}
+ i::Handle<i::JSObject> js_obj(i::JSObject::cast(*hidden_props));
i::Handle<i::String> key_obj = Utils::OpenHandle(*key);
- return i::DeleteProperty(hidden_props, key_obj)->IsTrue();
+ return i::DeleteProperty(js_obj, key_obj)->IsTrue();
}
i::Heap::CollectAllGarbage();
+ // Make sure delete of a non-existent hidden value works
+ CHECK(obj->DeleteHiddenValue(key));
+
CHECK(obj->SetHiddenValue(key, v8::Integer::New(1503)));
CHECK_EQ(1503, obj->GetHiddenValue(key)->Int32Value());
CHECK(obj->SetHiddenValue(key, v8::Integer::New(2002)));