mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2026-01-26 07:16:56 +00:00
Jerry API for array creation and manipulation
1. jerry_api_create_array_object : create array object of given size 2. jerry_api_set_array_index_value : set value at given index 3. jerry_api_get_array_index_value : get value at given index JerryScript-DCO-1.0-Signed-off-by: chunseok lee chunseok.lee@samsung.com
This commit is contained in:
parent
1cafff32b5
commit
d31eb3c4cb
@ -161,6 +161,18 @@ extern EXTERN_C
|
||||
jerry_api_string_t *jerry_api_create_string_sz (const jerry_api_char_t *, jerry_api_size_t);
|
||||
extern EXTERN_C
|
||||
jerry_api_object_t* jerry_api_create_object (void);
|
||||
|
||||
extern EXTERN_C
|
||||
jerry_api_object_t* jerry_api_create_array_object (jerry_api_size_t);
|
||||
extern EXTERN_C
|
||||
bool jerry_api_set_array_index_value (jerry_api_object_t *array_obj_p,
|
||||
jerry_api_length_t index,
|
||||
jerry_api_value_t *value_p);
|
||||
extern EXTERN_C
|
||||
bool jerry_api_get_array_index_value (jerry_api_object_t *array_obj_p,
|
||||
jerry_api_length_t index,
|
||||
jerry_api_value_t *value_p);
|
||||
|
||||
extern EXTERN_C
|
||||
jerry_api_object_t* jerry_api_create_error (jerry_api_error_t error_type,
|
||||
const jerry_api_char_t *message_p);
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#include "ecma-alloc.h"
|
||||
#include "ecma-array-object.h"
|
||||
#include "ecma-builtins.h"
|
||||
#include "ecma-exceptions.h"
|
||||
#include "ecma-eval.h"
|
||||
@ -429,6 +430,85 @@ jerry_api_create_object (void)
|
||||
return ecma_op_create_object_object_noarg ();
|
||||
} /* jerry_api_create_object */
|
||||
|
||||
/**
|
||||
* Create an array object
|
||||
*
|
||||
* Note:
|
||||
* caller should release the object with jerry_api_release_object, just when the value becomes unnecessary.
|
||||
*
|
||||
* @return pointer to created array object
|
||||
*/
|
||||
jerry_api_object_t *
|
||||
jerry_api_create_array_object (jerry_api_size_t size) /* size of array */
|
||||
{
|
||||
JERRY_ASSERT (size > 0);
|
||||
|
||||
ecma_number_t *length_num_p = ecma_alloc_number ();
|
||||
*length_num_p = ecma_uint32_to_number (size);
|
||||
ecma_value_t array_length = ecma_make_number_value (length_num_p);
|
||||
|
||||
jerry_api_length_t argument_size = 1;
|
||||
ecma_completion_value_t new_array_completion = ecma_op_create_array_object (&array_length, argument_size, true);
|
||||
JERRY_ASSERT (ecma_is_completion_value_normal (new_array_completion));
|
||||
ecma_value_t val = ecma_get_completion_value_value (new_array_completion);
|
||||
jerry_api_object_t *obj_p = ecma_get_object_from_value (val);
|
||||
|
||||
ecma_free_value (array_length, true);
|
||||
return obj_p;
|
||||
} /* jerry_api_create_array_object */
|
||||
|
||||
/**
|
||||
* Set value of field in the specified array object
|
||||
*
|
||||
* @return true, if field value was set successfully
|
||||
* throw exception, otherwise
|
||||
*/
|
||||
bool
|
||||
jerry_api_set_array_index_value (jerry_api_object_t *array_obj_p, /* array object */
|
||||
jerry_api_length_t index, /* index to be written */
|
||||
jerry_api_value_t *value_p) /* value to set*/
|
||||
{
|
||||
ecma_string_t *str_idx_p = ecma_new_ecma_string_from_uint32 ((uint32_t) index);
|
||||
ecma_value_t value;
|
||||
jerry_api_convert_api_value_to_ecma_value (&value, value_p);
|
||||
ecma_completion_value_t set_completion = ecma_op_object_put (array_obj_p, str_idx_p, value, false);
|
||||
JERRY_ASSERT (ecma_is_completion_value_normal (set_completion));
|
||||
|
||||
ecma_free_completion_value (set_completion);
|
||||
ecma_deref_ecma_string (str_idx_p);
|
||||
ecma_free_value (value, true);
|
||||
|
||||
return true;
|
||||
} /* jerry_api_set_array_index_value */
|
||||
|
||||
/**
|
||||
* Get value of field in the specified array object
|
||||
*
|
||||
* Note:
|
||||
* if value was retrieved successfully, it should be freed
|
||||
* with jerry_api_release_value just when it becomes unnecessary.
|
||||
*
|
||||
* @return true, if field value was retrieved successfully, i.e. upon the call:
|
||||
* - there is field with specified name in the object;
|
||||
* throw exception - otherwise.
|
||||
*/
|
||||
bool
|
||||
jerry_api_get_array_index_value (jerry_api_object_t *array_obj_p, /* array object */
|
||||
jerry_api_length_t index, /* index to be written */
|
||||
jerry_api_value_t *value_p) /* output value at index */
|
||||
{
|
||||
ecma_string_t *str_idx_p = ecma_new_ecma_string_from_uint32 ((uint32_t) index);
|
||||
ecma_completion_value_t get_completion = ecma_op_object_get (array_obj_p, str_idx_p);
|
||||
JERRY_ASSERT (ecma_is_completion_value_normal (get_completion));
|
||||
ecma_value_t val = ecma_get_completion_value_value (get_completion);
|
||||
jerry_api_convert_ecma_value_to_api_value (value_p, val);
|
||||
|
||||
ecma_free_completion_value (get_completion);
|
||||
ecma_deref_ecma_string (str_idx_p);
|
||||
|
||||
return true;
|
||||
} /* jerry_api_get_array_index_value */
|
||||
|
||||
/**
|
||||
* Create an error object
|
||||
*
|
||||
|
||||
@ -516,6 +516,21 @@ main (void)
|
||||
|
||||
jerry_api_release_object (obj_p);
|
||||
|
||||
|
||||
// Test: Array Object API
|
||||
jerry_api_object_t *array_obj_p = jerry_api_create_array_object (10);
|
||||
|
||||
jerry_api_value_t v_in;
|
||||
test_api_init_api_value_float64 (&v_in, 10.5);
|
||||
jerry_api_set_array_index_value (array_obj_p, 5, &v_in);
|
||||
jerry_api_value_t v_out;
|
||||
jerry_api_get_array_index_value (array_obj_p, 5, &v_out);
|
||||
|
||||
JERRY_ASSERT (v_out.type == JERRY_API_DATA_TYPE_FLOAT64 && v_out.v_float64 == 10.5);
|
||||
|
||||
jerry_api_release_object (array_obj_p);
|
||||
|
||||
|
||||
// Test: eval
|
||||
const char *eval_code_src_p = "(function () { return 123; })";
|
||||
jerry_completion_code_t status = jerry_api_eval ((jerry_api_char_t *) eval_code_src_p,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user