From: asargent@chromium.org Date: Wed, 8 Apr 2009 21:05:29 +0000 (+0000) Subject: Fix v8::Object::DeleteHiddenValue to not bail when there are no hidden properties. X-Git-Tag: upstream/4.7.83~24337 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=144cca7d3d72338a607d63f708b586b11b615ddc;p=platform%2Fupstream%2Fv8.git Fix v8::Object::DeleteHiddenValue to not bail when there are no hidden properties. Review URL: http://codereview.chromium.org/58016 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1687 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/api.cc b/src/api.cc index 9d95a34..d5b42c5 100644 --- a/src/api.cc +++ b/src/api.cc @@ -2077,13 +2077,13 @@ bool v8::Object::DeleteHiddenValue(v8::Handle key) { ON_BAILOUT("v8::DeleteHiddenValue()", return false); ENTER_V8; i::Handle self = Utils::OpenHandle(this); - i::Handle hidden_props( - i::JSObject::cast(*i::GetHiddenProperties(self, false))); + i::Handle hidden_props(i::GetHiddenProperties(self, false)); if (hidden_props->IsUndefined()) { - return false; + return true; } + i::Handle js_obj(i::JSObject::cast(*hidden_props)); i::Handle key_obj = Utils::OpenHandle(*key); - return i::DeleteProperty(hidden_props, key_obj)->IsTrue(); + return i::DeleteProperty(js_obj, key_obj)->IsTrue(); } diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc index dd705d2..d899e8d 100644 --- a/test/cctest/test-api.cc +++ b/test/cctest/test-api.cc @@ -1293,6 +1293,9 @@ THREADED_TEST(HiddenProperties) { 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)));