Minor fix to ecma_builtin_object_object_define_property (#4124)
DefineOwnProperty result could be false, and we should throw an error in that case. JerryScript-DCO-1.0-Signed-off-by: Adam Szilagyi aszilagy@inf.u-szeged.hu
This commit is contained in:
@@ -1019,6 +1019,13 @@ ecma_builtin_object_object_define_property (ecma_object_t *obj_p, /**< routine's
|
|||||||
return define_own_prop_ret;
|
return define_own_prop_ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ecma_is_value_false (define_own_prop_ret))
|
||||||
|
{
|
||||||
|
return ecma_raise_type_error (ECMA_ERR_MSG ("The requested property update cannot be performed."));
|
||||||
|
}
|
||||||
|
|
||||||
|
JERRY_ASSERT (ecma_is_value_true (define_own_prop_ret));
|
||||||
|
|
||||||
ecma_ref_object (obj_p);
|
ecma_ref_object (obj_p);
|
||||||
ecma_free_value (define_own_prop_ret);
|
ecma_free_value (define_own_prop_ret);
|
||||||
|
|
||||||
|
|||||||
@@ -56,33 +56,25 @@ var handler = {
|
|||||||
|
|
||||||
var proxy = new Proxy(target, handler);
|
var proxy = new Proxy(target, handler);
|
||||||
|
|
||||||
Object.defineProperty(proxy, "bar", desc);
|
try {
|
||||||
|
Object.defineProperty(proxy, "bar", desc);
|
||||||
|
assert(false);
|
||||||
|
} catch (e) {
|
||||||
|
assert(e instanceof TypeError);
|
||||||
|
}
|
||||||
|
|
||||||
assert(proxy.bar === 1);
|
var bar = Object.getOwnPropertyDescriptor(proxy, "bar");
|
||||||
|
assert(bar.value === 1);
|
||||||
|
assert(bar.writable);
|
||||||
|
assert(bar.configurable);
|
||||||
|
|
||||||
/* TODO - remove this comment when [[GetOwnProperty]] is implemented
|
try {
|
||||||
proxy.bar = 2;
|
Object.defineProperty(proxy, "name", {});
|
||||||
assert(proxy.bar === 2);
|
assert(false);
|
||||||
*/
|
} catch (e) {
|
||||||
|
assert(e instanceof TypeError);
|
||||||
|
}
|
||||||
|
|
||||||
delete proxy.bar;
|
|
||||||
assert(proxy.bar === undefined);
|
|
||||||
|
|
||||||
/* TODO - remove this comment when [[GetOwnProperty]] is implemented
|
|
||||||
Object.defineProperty(proxy, "name", {
|
|
||||||
get() {
|
|
||||||
return this._name;
|
|
||||||
},
|
|
||||||
set(value) {
|
|
||||||
this._name = value;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
proxy.name = "foo";
|
|
||||||
|
|
||||||
assert(proxy.name === "foo");
|
|
||||||
assert(target.name === "foo");
|
|
||||||
*/
|
|
||||||
|
|
||||||
// test when trap is not callable
|
// test when trap is not callable
|
||||||
var target = {};
|
var target = {};
|
||||||
|
|||||||
@@ -1254,7 +1254,6 @@
|
|||||||
<test id="built-ins/Proxy/defineProperty/targetdesc-undefined-not-configurable-descriptor-realm.js"><reason></reason></test>
|
<test id="built-ins/Proxy/defineProperty/targetdesc-undefined-not-configurable-descriptor-realm.js"><reason></reason></test>
|
||||||
<test id="built-ins/Proxy/defineProperty/targetdesc-undefined-target-is-not-extensible-realm.js"><reason></reason></test>
|
<test id="built-ins/Proxy/defineProperty/targetdesc-undefined-target-is-not-extensible-realm.js"><reason></reason></test>
|
||||||
<test id="built-ins/Proxy/defineProperty/trap-is-not-callable-realm.js"><reason></reason></test>
|
<test id="built-ins/Proxy/defineProperty/trap-is-not-callable-realm.js"><reason></reason></test>
|
||||||
<test id="built-ins/Proxy/defineProperty/trap-is-undefined-target-is-proxy.js"><reason></reason></test>
|
|
||||||
<test id="built-ins/Proxy/deleteProperty/trap-is-missing-target-is-proxy.js"><reason></reason></test>
|
<test id="built-ins/Proxy/deleteProperty/trap-is-missing-target-is-proxy.js"><reason></reason></test>
|
||||||
<test id="built-ins/Proxy/deleteProperty/trap-is-not-callable-realm.js"><reason></reason></test>
|
<test id="built-ins/Proxy/deleteProperty/trap-is-not-callable-realm.js"><reason></reason></test>
|
||||||
<test id="built-ins/Proxy/deleteProperty/trap-is-null-target-is-proxy.js"><reason></reason></test>
|
<test id="built-ins/Proxy/deleteProperty/trap-is-null-target-is-proxy.js"><reason></reason></test>
|
||||||
|
|||||||
Reference in New Issue
Block a user