diff --git a/jerry-core/ecma/operations/ecma-objects.c b/jerry-core/ecma/operations/ecma-objects.c index 75d4481c5..d1dbadc4d 100644 --- a/jerry-core/ecma/operations/ecma-objects.c +++ b/jerry-core/ecma/operations/ecma-objects.c @@ -1083,7 +1083,14 @@ ecma_op_object_put_apply_receiver (ecma_value_t receiver, /**< receiver */ if (ECMA_OBJECT_IS_PROXY (receiver_obj_p)) { ecma_property_descriptor_t desc; - desc.flags = ECMA_NAME_DATA_PROPERTY_DESCRIPTOR_BITS; + /* Based on: ES6 9.1.9 [[Set]] 4.d.i. / ES11 9.1.9.2 OrdinarySetWithOwnDescriptor 2.c.i. */ + desc.flags = (ECMA_PROP_IS_CONFIGURABLE + | ECMA_PROP_IS_CONFIGURABLE_DEFINED + | ECMA_PROP_IS_ENUMERABLE + | ECMA_PROP_IS_ENUMERABLE_DEFINED + | ECMA_PROP_IS_WRITABLE + | ECMA_PROP_IS_WRITABLE_DEFINED + | ECMA_PROP_IS_VALUE_DEFINED); desc.value = value; return ecma_proxy_object_define_own_property (receiver_obj_p, property_name_p, &desc); } diff --git a/tests/jerry/es.next/proxy_set.js b/tests/jerry/es.next/proxy_set.js index 96183344a..f93d05888 100644 --- a/tests/jerry/es.next/proxy_set.js +++ b/tests/jerry/es.next/proxy_set.js @@ -138,3 +138,16 @@ try { } catch (e) { assert(e instanceof TypeError); } + +/* Setting a new property should be configurable, enumerable, and writable by default + * over a proxy. + */ +var setPropProxy = new Proxy({}, {}); +setPropProxy["alma"] = 3; + +var desc = Object.getOwnPropertyDescriptor(setPropProxy, "alma"); + +assert(desc.writable === true); +assert(desc.enumerable === true); +assert(desc.configurable === true); +assert(desc.value === 3); diff --git a/tests/test262-esnext-excludelist.xml b/tests/test262-esnext-excludelist.xml index 4294e36a6..a546c8701 100644 --- a/tests/test262-esnext-excludelist.xml +++ b/tests/test262-esnext-excludelist.xml @@ -822,7 +822,6 @@ - @@ -995,8 +994,6 @@ - -