mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2025-12-15 16:29:21 +00:00
Definition of function object's 'length' property in ecma_op_create_function_object.
This commit is contained in:
parent
4fe85cdd1a
commit
c3cc674fef
@ -13,6 +13,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "ecma-alloc.h"
|
||||
#include "ecma-function-object.h"
|
||||
#include "ecma-gc.h"
|
||||
#include "ecma-globals.h"
|
||||
@ -108,7 +109,7 @@ ecma_op_is_callable (ecma_value_t value) /**< ecma-value */
|
||||
*/
|
||||
ecma_object_t*
|
||||
ecma_op_create_function_object (const ecma_char_t* formal_parameter_list_p[], /**< formal parameters list */
|
||||
size_t formal_parameters_number, /**< formal parameters list's length */
|
||||
uint32_t formal_parameters_number, /**< formal parameters list's length */
|
||||
ecma_object_t *scope_p, /**< function's scope */
|
||||
bool is_strict, /**< 'strict' flag */
|
||||
opcode_counter_t first_opcode_idx) /**< index of first opcode of function's body */
|
||||
@ -135,7 +136,7 @@ ecma_op_create_function_object (const ecma_char_t* formal_parameter_list_p[], /*
|
||||
|
||||
ecma_gc_update_may_ref_younger_object_flag_by_object (f, scope_p);
|
||||
|
||||
// 10., 11., 14., 15.
|
||||
// 10., 11.
|
||||
if (formal_parameters_number != 0)
|
||||
{
|
||||
JERRY_UNIMPLEMENTED_REF_UNUSED_VARS(formal_parameter_list_p);
|
||||
@ -146,6 +147,32 @@ ecma_op_create_function_object (const ecma_char_t* formal_parameter_list_p[], /*
|
||||
code_prop_p->u.internal_property.value = ecma_pack_code_internal_property_value (is_strict,
|
||||
first_opcode_idx);
|
||||
|
||||
// 14.
|
||||
ecma_number_t* len_p = ecma_alloc_number ();
|
||||
*len_p = ecma_uint32_to_number (formal_parameters_number);
|
||||
|
||||
// 15.
|
||||
ecma_property_descriptor_t length_prop_desc = ecma_make_empty_property_descriptor ();
|
||||
length_prop_desc.is_value_defined = true;
|
||||
length_prop_desc.value = ecma_make_number_value (len_p);
|
||||
length_prop_desc.is_writable_defined = false;
|
||||
length_prop_desc.writable = ECMA_PROPERTY_NOT_WRITABLE;
|
||||
length_prop_desc.is_enumerable_defined = false;
|
||||
length_prop_desc.enumerable = ECMA_PROPERTY_NOT_ENUMERABLE;
|
||||
length_prop_desc.is_configurable_defined = false;
|
||||
length_prop_desc.configurable = ECMA_PROPERTY_NOT_CONFIGURABLE;
|
||||
|
||||
const ecma_char_t* magic_string_length_p = ecma_get_magic_string (ECMA_MAGIC_STRING_LENGTH);
|
||||
ecma_completion_value_t completion = ecma_op_object_define_own_property (f,
|
||||
magic_string_length_p,
|
||||
length_prop_desc,
|
||||
false);
|
||||
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)
|
||||
|| ecma_is_completion_value_normal_false (completion));
|
||||
|
||||
ecma_dealloc_number (len_p);
|
||||
len_p = NULL;
|
||||
|
||||
// 16.
|
||||
FIXME(Use 'new Object ()' instead);
|
||||
ecma_object_t *proto_p = ecma_create_object (NULL, true, ECMA_OBJECT_TYPE_GENERAL);
|
||||
|
||||
@ -30,7 +30,7 @@ extern bool ecma_op_is_callable (ecma_value_t value);
|
||||
|
||||
extern ecma_object_t*
|
||||
ecma_op_create_function_object (const ecma_char_t* formal_parameter_list_p[],
|
||||
size_t formal_parameters_number,
|
||||
uint32_t formal_parameters_number,
|
||||
ecma_object_t *scope_p,
|
||||
bool is_strict,
|
||||
opcode_counter_t first_opcode_idx);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user