Implementing 'Object.defineProperty' built-in routine.
This commit is contained in:
@@ -16,9 +16,11 @@
|
|||||||
#include "ecma-alloc.h"
|
#include "ecma-alloc.h"
|
||||||
#include "ecma-builtins.h"
|
#include "ecma-builtins.h"
|
||||||
#include "ecma-conversion.h"
|
#include "ecma-conversion.h"
|
||||||
|
#include "ecma-exceptions.h"
|
||||||
#include "ecma-gc.h"
|
#include "ecma-gc.h"
|
||||||
#include "ecma-globals.h"
|
#include "ecma-globals.h"
|
||||||
#include "ecma-helpers.h"
|
#include "ecma-helpers.h"
|
||||||
|
#include "ecma-objects.h"
|
||||||
#include "ecma-objects-general.h"
|
#include "ecma-objects-general.h"
|
||||||
#include "ecma-try-catch-macro.h"
|
#include "ecma-try-catch-macro.h"
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
@@ -455,7 +457,43 @@ ecma_builtin_object_object_define_property (ecma_value_t arg1, /**< routine's fi
|
|||||||
ecma_value_t arg2, /**< routine's second argument */
|
ecma_value_t arg2, /**< routine's second argument */
|
||||||
ecma_value_t arg3) /**< routine's third argument */
|
ecma_value_t arg3) /**< routine's third argument */
|
||||||
{
|
{
|
||||||
JERRY_UNIMPLEMENTED_REF_UNUSED_VARS (arg1, arg2, arg3);
|
ecma_completion_value_t ret_value;
|
||||||
|
|
||||||
|
if (arg1.value_type != ECMA_TYPE_OBJECT)
|
||||||
|
{
|
||||||
|
ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ecma_object_t *obj_p = ECMA_GET_POINTER (arg1.value);
|
||||||
|
|
||||||
|
ECMA_TRY_CATCH (name_str_value,
|
||||||
|
ecma_op_to_string (arg2),
|
||||||
|
ret_value);
|
||||||
|
|
||||||
|
ecma_string_t *name_str_p = ECMA_GET_POINTER (name_str_value.u.value.value);
|
||||||
|
|
||||||
|
ecma_property_descriptor_t prop_desc;
|
||||||
|
|
||||||
|
ECMA_TRY_CATCH (conv_result,
|
||||||
|
ecma_op_to_property_descriptor (arg3, &prop_desc),
|
||||||
|
ret_value);
|
||||||
|
|
||||||
|
ECMA_TRY_CATCH (define_own_prop_ret,
|
||||||
|
ecma_op_object_define_own_property (obj_p,
|
||||||
|
name_str_p,
|
||||||
|
prop_desc,
|
||||||
|
true),
|
||||||
|
ret_value);
|
||||||
|
|
||||||
|
ret_value = ecma_make_return_completion_value (ecma_copy_value (arg1, true));
|
||||||
|
|
||||||
|
ECMA_FINALIZE (define_own_prop_ret);
|
||||||
|
ECMA_FINALIZE (conv_result);
|
||||||
|
ECMA_FINALIZE (name_str_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret_value;
|
||||||
} /* ecma_builtin_object_object_define_property */
|
} /* ecma_builtin_object_object_define_property */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user