jscript: Treat prototype refs as non-existent when deleting.

Delete only affects own properties.

Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Gabriel Ivăncescu 2021-11-24 16:10:30 +02:00 committed by Alexandre Julliard
parent 80be5c25e3
commit 58722dfe35
3 changed files with 10 additions and 1 deletions

View file

@ -1621,6 +1621,11 @@ static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lc
static HRESULT delete_prop(dispex_prop_t *prop, BOOL *ret)
{
if(prop->type == PROP_PROTREF) {
*ret = TRUE;
return S_OK;
}
if(!(prop->flags & PROPF_CONFIGURABLE)) {
*ret = FALSE;
return S_OK;

View file

@ -1565,6 +1565,11 @@ ok(arr["test1"] === true, "arr[test1] !== true");
ok(arr["test2"] === true, "arr[test2] !== true");
ok(arr["test3"] === true, "arr[test3] !== true");
ok((delete inobj.test1) === true, "delete inobj.test1 returned false");
ok(!("test1" in inobj), "test1 is still in inobj after delete");
ok((delete inobj.test3) === true, "delete inobj.test3 returned false");
ok("test3" in inobj, "test3 is not in inobj after delete");
tmp = new Object();
tmp.test = false;
ok((delete tmp.test) === true, "delete returned false");

View file

@ -1192,7 +1192,6 @@ sync_test("__proto__", function() {
ok(obj.__proto__ === ctor.prototype, "obj.__proto__ !== ctor.prototype");
r = (delete x.__proto__);
todo_wine.
ok(r, "delete x.__proto__ returned " + r);
ok(Object.prototype.hasOwnProperty("__proto__"), "__proto__ is not a property of Object.prototype after delete");
r = Object.getPrototypeOf(x);