mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2025-12-15 16:29:21 +00:00
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:
parent
59ab36088f
commit
24753ddd70
@ -1019,6 +1019,13 @@ ecma_builtin_object_object_define_property (ecma_object_t *obj_p, /**< routine's
|
||||
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_free_value (define_own_prop_ret);
|
||||
|
||||
|
||||
@ -56,33 +56,25 @@ var 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
|
||||
proxy.bar = 2;
|
||||
assert(proxy.bar === 2);
|
||||
*/
|
||||
try {
|
||||
Object.defineProperty(proxy, "name", {});
|
||||
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
|
||||
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-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-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-not-callable-realm.js"><reason></reason></test>
|
||||
<test id="built-ins/Proxy/deleteProperty/trap-is-null-target-is-proxy.js"><reason></reason></test>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user