diff --git a/jerry-core/api/jerry.c b/jerry-core/api/jerry.c index ea14eeff1..2023157ab 100644 --- a/jerry-core/api/jerry.c +++ b/jerry-core/api/jerry.c @@ -2186,8 +2186,8 @@ jerry_has_property (const jerry_value_t obj_val, /**< object value */ return ECMA_VALUE_FALSE; } - return ecma_op_object_has_property (ecma_get_object_from_value (obj_val), - ecma_get_prop_name_from_value (prop_name_val)); + return jerry_return (ecma_op_object_has_property (ecma_get_object_from_value (obj_val), + ecma_get_prop_name_from_value (prop_name_val))); } /* jerry_has_property */ /** @@ -2750,9 +2750,9 @@ jerry_define_own_property (const jerry_value_t obj_val, /**< object value */ prop_desc.flags |= (uint16_t) (flags | ECMA_PROP_IS_THROW); - return ecma_op_object_define_own_property (ecma_get_object_from_value (obj_val), - ecma_get_prop_name_from_value (prop_name_val), - &prop_desc); + return jerry_return (ecma_op_object_define_own_property (ecma_get_object_from_value (obj_val), + ecma_get_prop_name_from_value (prop_name_val), + &prop_desc)); } /* jerry_define_own_property */ /** diff --git a/tests/unit-core/test-api-property.c b/tests/unit-core/test-api-property.c index b8b31ae56..b24a6c5c0 100644 --- a/tests/unit-core/test-api-property.c +++ b/tests/unit-core/test-api-property.c @@ -100,6 +100,26 @@ main (void) jerry_release_value (prop_name); jerry_release_value (global_obj_val); + /* Test: define own property descriptor error */ + jerry_init_property_descriptor_fields (&prop_desc); + prop_desc.is_value_defined = true; + prop_desc.value = jerry_create_number (11); + + jerry_value_t obj_val = jerry_create_object (); + prop_name = jerry_create_string ((const jerry_char_t *) "property_key"); + res = jerry_define_own_property (obj_val, prop_name, &prop_desc); + TEST_ASSERT (!jerry_value_is_error (res)); + jerry_release_value (res); + + jerry_release_value (prop_desc.value); + prop_desc.value = jerry_create_number (22); + res = jerry_define_own_property (obj_val, prop_name, &prop_desc); + TEST_ASSERT (jerry_value_is_error (res)); + jerry_release_value (res); + + jerry_release_value (prop_name); + jerry_release_value (obj_val); + jerry_cleanup (); return 0; diff --git a/tests/unit-core/test-proxy.c b/tests/unit-core/test-proxy.c index 2bd382cf1..fb0e344ee 100644 --- a/tests/unit-core/test-proxy.c +++ b/tests/unit-core/test-proxy.c @@ -245,6 +245,33 @@ main (void) jerry_release_value (target); jerry_release_value (handler); + { + const jerry_char_t has_value_src[] = TEST_STRING_LITERAL ("new Proxy({}, {\n" + " has: function(target, key) { throw 33 }\n" + "})"); + jerry_value_t parsed_has_code_val = jerry_parse (NULL, + 0, + has_value_src, + sizeof (has_value_src) - 1, + JERRY_PARSE_NO_OPTS); + TEST_ASSERT (!jerry_value_is_error (parsed_has_code_val)); + + jerry_value_t res = jerry_run (parsed_has_code_val); + jerry_release_value (parsed_has_code_val); + TEST_ASSERT (jerry_value_is_proxy (res)); + + jerry_value_t name = jerry_create_string ((const jerry_char_t *) "key"); + TEST_ASSERT (jerry_value_is_string (name)); + jerry_value_t property = jerry_has_property (res, name); + jerry_release_value (name); + jerry_release_value (res); + + TEST_ASSERT (jerry_value_is_error (property)); + property = jerry_get_value_from_error (property, true); + TEST_ASSERT (jerry_get_number_value (property) == 33); + jerry_release_value (property); + } + jerry_cleanup (); return 0; } /* main */