Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use 'ecma_value_t' in Jerry API #1138

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 2 additions & 7 deletions jerry-core/ecma/operations/ecma-function-object.c
Original file line number Diff line number Diff line change
Expand Up @@ -655,16 +655,11 @@ ecma_op_function_call (ecma_object_t *func_obj_p, /**< Function object */
&handler_p);
JERRY_ASSERT (is_retrieved);

ecma_collection_header_t *arg_collection_p = ecma_new_values_collection (arguments_list_p,
arguments_list_len,
true);

ret_value = jerry_dispatch_external_function (func_obj_p,
handler_p,
this_arg_value,
arg_collection_p);

ecma_free_values_collection (arg_collection_p, true);
arguments_list_p,
arguments_list_len);
}
else
{
Expand Down
88 changes: 27 additions & 61 deletions jerry-core/jerry-api.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,22 +42,6 @@ typedef enum
JERRY_COMPLETION_CODE_INVALID_SNAPSHOT_FORMAT = 3, /**< snapshot format is not valid */
} jerry_completion_code_t;

/**
* Jerry API data types
*/
typedef enum
{
JERRY_DATA_TYPE_VOID, /**< no return value */
JERRY_DATA_TYPE_UNDEFINED, /**< undefined */
JERRY_DATA_TYPE_NULL, /**< null */
JERRY_DATA_TYPE_BOOLEAN, /**< bool */
JERRY_DATA_TYPE_FLOAT32, /**< 32-bit float */
JERRY_DATA_TYPE_FLOAT64, /**< 64-bit float */
JERRY_DATA_TYPE_UINT32, /**< number converted to 32-bit unsigned integer */
JERRY_DATA_TYPE_STRING, /**< string */
JERRY_DATA_TYPE_OBJECT /**< object */
} jerry_data_type_t;

/**
* Jerry API Error object types
*/
Expand Down Expand Up @@ -103,32 +87,15 @@ typedef struct ecma_string_t jerry_string_t;
typedef struct ecma_object_t jerry_object_t;

/**
* Description of an extension function's argument
* Description of a JerryScript value
*/
typedef struct jerry_value_t
{
jerry_data_type_t type; /**< argument data type */

union
{
bool v_bool; /**< boolean */

float v_float32; /**< 32-bit float */
double v_float64; /**< 64-bit float */

uint32_t v_uint32; /**< number converted 32-bit unsigned integer */

jerry_string_t *v_string; /**< pointer to a JS string */
jerry_object_t *v_object; /**< pointer to a JS object */

} u;
} jerry_value_t;
typedef uint32_t jerry_value_t;

/**
* Type of an external function handler
*/
typedef bool (*jerry_external_handler_t) (const jerry_object_t *function_obj_p,
const jerry_value_t *this_p,
const jerry_value_t this_val,
jerry_value_t *ret_val_p,
const jerry_value_t args_p[],
const jerry_length_t args_count);
Expand All @@ -142,7 +109,7 @@ typedef void (*jerry_object_free_callback_t) (const uintptr_t native_p);
* Function type applied for each fields in objects
*/
typedef bool (*jerry_object_field_foreach_t) (const jerry_string_t *field_name_p,
const jerry_value_t *field_value_p,
const jerry_value_t field_value_p,
void *user_data_p);

/**
Expand All @@ -153,52 +120,51 @@ jerry_object_t *jerry_get_global (void);
/**
* Checker functions of 'jerry_value_t'
*/
bool jerry_value_is_void (const jerry_value_t *value_p);
bool jerry_value_is_null (const jerry_value_t *value_p);
bool jerry_value_is_undefined (const jerry_value_t *value_p);
bool jerry_value_is_boolean (const jerry_value_t *value_p);
bool jerry_value_is_number (const jerry_value_t *value_p);
bool jerry_value_is_string (const jerry_value_t *value_p);
bool jerry_value_is_object (const jerry_value_t *value_p);
bool jerry_value_is_function (const jerry_value_t *value_p);
bool jerry_value_is_boolean (const jerry_value_t);
bool jerry_value_is_error (const jerry_value_t);
bool jerry_value_is_function (const jerry_value_t);
bool jerry_value_is_number (const jerry_value_t);
bool jerry_value_is_null (const jerry_value_t);
bool jerry_value_is_object (const jerry_value_t);
bool jerry_value_is_string (const jerry_value_t);
bool jerry_value_is_undefined (const jerry_value_t);

/**
* Getter functions of 'jerry_value_t'
*/
bool jerry_get_boolean_value (const jerry_value_t *value_p);
double jerry_get_number_value (const jerry_value_t *value_p);
jerry_string_t *jerry_get_string_value (const jerry_value_t *value_p);
jerry_object_t *jerry_get_object_value (const jerry_value_t *value_p);
bool jerry_get_boolean_value (const jerry_value_t);
double jerry_get_number_value (const jerry_value_t);
jerry_string_t *jerry_get_string_value (const jerry_value_t);
jerry_object_t *jerry_get_object_value (const jerry_value_t);

/**
* Converters of 'jerry_value_t'
*/
jerry_string_t *jerry_value_to_string (const jerry_value_t *);
jerry_value_t jerry_value_to_string (const jerry_value_t);

/**
* Create functions of 'jerry_value_t'
*/
jerry_value_t jerry_create_void_value (void);
jerry_value_t jerry_create_null_value (void);
jerry_value_t jerry_create_undefined_value (void);
jerry_value_t jerry_create_boolean_value (bool value);
jerry_value_t jerry_create_number_value (double value);
jerry_value_t jerry_create_object_value (jerry_object_t *value);
jerry_value_t jerry_create_string_value (jerry_string_t *value);
jerry_value_t jerry_create_boolean_value (bool);
jerry_value_t jerry_create_number_value (double);
jerry_value_t jerry_create_object_value (jerry_object_t *);
jerry_value_t jerry_create_string_value (jerry_string_t *);

/**
* Acquire types with reference counter (increase the references)
*/
jerry_string_t *jerry_acquire_string (jerry_string_t *);
jerry_object_t *jerry_acquire_object (jerry_object_t *);
jerry_value_t *jerry_acquire_value (jerry_value_t *);
jerry_value_t jerry_acquire_value (jerry_value_t);

/**
* Relase the referenced values
*/
void jerry_release_object (jerry_object_t *);
void jerry_release_string (jerry_string_t *);
void jerry_release_value (jerry_value_t *);
void jerry_release_value (jerry_value_t);

/**
* Create functions of API objects
Expand All @@ -214,7 +180,7 @@ jerry_string_t *jerry_create_string_sz (const jerry_char_t *, jerry_size_t);
/**
* Functions of array objects
*/
bool jerry_set_array_index_value (jerry_object_t *, jerry_length_t, jerry_value_t *);
bool jerry_set_array_index_value (jerry_object_t *, jerry_length_t, jerry_value_t);
bool jerry_get_array_index_value (jerry_object_t *, jerry_length_t, jerry_value_t *);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why the get needs jerry_value_t *?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is an output parameter here.


/**
Expand All @@ -229,12 +195,12 @@ jerry_size_t jerry_string_to_char_buffer (const jerry_string_t *, jerry_char_t *
*/
bool jerry_is_constructor (const jerry_object_t *);
bool jerry_is_function (const jerry_object_t *);
bool jerry_add_object_field (jerry_object_t *, const jerry_char_t *, jerry_size_t, const jerry_value_t *, bool);
bool jerry_add_object_field (jerry_object_t *, const jerry_char_t *, jerry_size_t, const jerry_value_t, bool);
bool jerry_delete_object_field (jerry_object_t *, const jerry_char_t *, jerry_size_t);
bool jerry_get_object_field_value (jerry_object_t *, const jerry_char_t *, jerry_value_t *);
bool jerry_get_object_field_value_sz (jerry_object_t *, const jerry_char_t *, jerry_size_t, jerry_value_t *);
bool jerry_set_object_field_value (jerry_object_t *, const jerry_char_t *, const jerry_value_t *);
bool jerry_set_object_field_value_sz (jerry_object_t *, const jerry_char_t *, jerry_size_t, const jerry_value_t *);
bool jerry_set_object_field_value (jerry_object_t *, const jerry_char_t *, const jerry_value_t);
bool jerry_set_object_field_value_sz (jerry_object_t *, const jerry_char_t *, jerry_size_t, const jerry_value_t);
bool jerry_foreach_object_field (jerry_object_t *, jerry_object_field_foreach_t, void *);
bool jerry_get_object_native_handle (jerry_object_t *, uintptr_t *);
void jerry_set_object_native_handle (jerry_object_t *, uintptr_t, jerry_object_free_callback_t);
Expand Down
6 changes: 5 additions & 1 deletion jerry-core/jerry-internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,11 @@
#include "jerry-api.h"

extern ecma_value_t
jerry_dispatch_external_function (ecma_object_t *, ecma_external_pointer_t, ecma_value_t, ecma_collection_header_t *);
jerry_dispatch_external_function (ecma_object_t *,
ecma_external_pointer_t,
ecma_value_t,
const ecma_value_t *,
ecma_length_t);

extern void
jerry_dispatch_object_free_callback (ecma_external_pointer_t, ecma_external_pointer_t);
Expand Down
Loading