Skip to content

Commit 5bfa712

Browse files
committed
Add new API function
Implemented 'jerry_is_array' and 'jerry_get_array_length' API functions. JerryScript-DCO-1.0-Signed-off-by: László Langó [email protected]
1 parent bb07151 commit 5bfa712

File tree

3 files changed

+61
-0
lines changed

3 files changed

+61
-0
lines changed

jerry-core/jerry-api.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ jerry_string_t *jerry_create_string_sz (const jerry_char_t *, jerry_size_t);
185185
*/
186186
bool jerry_set_array_index_value (jerry_object_t *, jerry_length_t, jerry_value_t);
187187
bool jerry_get_array_index_value (jerry_object_t *, jerry_length_t, jerry_value_t *);
188+
jerry_length_t jerry_get_array_length (const jerry_object_t *);
188189

189190
/**
190191
* Functions of 'jerry_string_t'
@@ -196,6 +197,7 @@ jerry_size_t jerry_string_to_char_buffer (const jerry_string_t *, jerry_char_t *
196197
/**
197198
* General API functions of JS objects
198199
*/
200+
bool jerry_is_array (const jerry_object_t *);
199201
bool jerry_is_constructor (const jerry_object_t *);
200202
bool jerry_is_function (const jerry_object_t *);
201203
bool jerry_add_object_field (jerry_object_t *, const jerry_char_t *, jerry_size_t, const jerry_value_t, bool);

jerry-core/jerry.c

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,49 @@ jerry_get_array_index_value (jerry_object_t *array_obj_p, /**< array object */
590590
return false;
591591
} /* jerry_get_array_index_value */
592592

593+
/**
594+
* Get length property value of an object
595+
*
596+
* @return length of the given object
597+
*/
598+
inline static jerry_length_t __attr_always_inline___
599+
jerry_get_length (const jerry_object_t *object_p)
600+
{
601+
jerry_length_t length = 0;
602+
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
603+
ecma_value_t ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
604+
605+
ECMA_TRY_CATCH (len_value,
606+
ecma_op_object_get ((jerry_object_t *) object_p, magic_string_length_p),
607+
ret_value);
608+
ECMA_OP_TO_NUMBER_TRY_CATCH (len_number, len_value, ret_value);
609+
610+
length = ecma_number_to_uint32 (len_number);
611+
612+
ECMA_OP_TO_NUMBER_FINALIZE (len_number);
613+
ECMA_FINALIZE (len_value);
614+
615+
ecma_deref_ecma_string (magic_string_length_p);
616+
JERRY_ASSERT (!ECMA_IS_VALUE_ERROR (ret_value));
617+
618+
return length;
619+
} /* jerry_get_length */
620+
621+
/**
622+
* Get length of an array object
623+
*
624+
* @return length of the given array
625+
*/
626+
jerry_length_t
627+
jerry_get_array_length (const jerry_object_t *object_p)
628+
{
629+
jerry_assert_api_available ();
630+
631+
JERRY_ASSERT (jerry_is_array (object_p));
632+
633+
return jerry_get_length (object_p);
634+
} /* jerry_get_array_length */
635+
593636
/**
594637
* Create an error object
595638
*
@@ -757,6 +800,20 @@ jerry_dispatch_object_free_callback (ecma_external_pointer_t freecb_p, /**< poin
757800
jerry_make_api_available ();
758801
} /* jerry_dispatch_object_free_callback */
759802

803+
/**
804+
* Check if the specified object is an array object.
805+
*
806+
* @return true - if the specified object is an array object,
807+
* false - otherwise.
808+
*/
809+
bool
810+
jerry_is_array (const jerry_object_t *object_p) /**< an object */
811+
{
812+
jerry_assert_api_available ();
813+
814+
return (ecma_object_get_class_name ((jerry_object_t *) object_p) == LIT_MAGIC_STRING_ARRAY_UL);
815+
} /* jerry_is_array */
816+
760817
/**
761818
* Check if the specified object is a function object.
762819
*

tests/unit/test-api.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,8 @@ main (void)
583583

584584
// Test: Array Object API
585585
jerry_object_t *array_obj_p = jerry_create_array_object (10);
586+
JERRY_ASSERT (jerry_is_array (array_obj_p));
587+
JERRY_ASSERT (jerry_get_array_length (array_obj_p) == 10);
586588

587589
jerry_value_t v_in = jerry_create_number_value (10.5);
588590
jerry_set_array_index_value (array_obj_p, 5, v_in);

0 commit comments

Comments
 (0)