From 9746b2fd76dddb011f32f6f8e4f9e87a13b0ee26 Mon Sep 17 00:00:00 2001 From: Ruben Ayrapetyan Date: Fri, 27 Mar 2015 18:01:20 +0300 Subject: [PATCH] Jerry API for calling functions C -> Jerry, creating objects, reading / writing object's properties (currently, only interface declaration, without implementation). --- .../builtin-objects/ecma-builtin-jerry.cpp | 52 +++--- jerry-core/jerry-api.h | 125 +++++++++++++ jerry-core/jerry-extension.h | 71 +------- jerry-core/jerry-extension.inc.h | 8 +- jerry-core/jerry.cpp | 168 ++++++++++++++++-- jerry-core/jerry.h | 6 - plugins/io/init.cpp | 6 +- 7 files changed, 316 insertions(+), 120 deletions(-) create mode 100644 jerry-core/jerry-api.h diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-jerry.cpp b/jerry-core/ecma/builtin-objects/ecma-builtin-jerry.cpp index ed8c358de..d4deb010b 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-jerry.cpp +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-jerry.cpp @@ -150,10 +150,10 @@ ecma_builtin_jerry_dispatch_routine (uint16_t builtin_routine_id, /**< built-in uint32_t arg_index; for (arg_index = 0; arg_index < function_p->args_number; arg_index++) { - jerry_extension_function_arg_t *arg_p = &function_p->args_p [arg_index]; + jerry_api_value_t *arg_p = &function_p->args_p [arg_index]; const ecma_value_t arg_value = arguments_list [arg_index]; - if (arg_p->type == JERRY_EXTENSION_FIELD_TYPE_BOOLEAN) + if (arg_p->type == JERRY_API_DATA_TYPE_BOOLEAN) { if (!ecma_is_value_boolean (arg_value)) { @@ -164,9 +164,9 @@ ecma_builtin_jerry_dispatch_routine (uint16_t builtin_routine_id, /**< built-in arg_p->v_bool = ecma_is_value_true (arg_value); } } - else if (arg_p->type == JERRY_EXTENSION_FIELD_TYPE_FLOAT32 - || arg_p->type == JERRY_EXTENSION_FIELD_TYPE_FLOAT64 - || arg_p->type == JERRY_EXTENSION_FIELD_TYPE_UINT32) + else if (arg_p->type == JERRY_API_DATA_TYPE_FLOAT32 + || arg_p->type == JERRY_API_DATA_TYPE_FLOAT64 + || arg_p->type == JERRY_API_DATA_TYPE_UINT32) { if (!ecma_is_value_number (arg_value)) { @@ -175,11 +175,11 @@ ecma_builtin_jerry_dispatch_routine (uint16_t builtin_routine_id, /**< built-in else { ecma_number_t num_value = *ecma_get_number_from_value (arg_value); - if (arg_p->type == JERRY_EXTENSION_FIELD_TYPE_FLOAT32) + if (arg_p->type == JERRY_API_DATA_TYPE_FLOAT32) { arg_p->v_float32 = (float) num_value; } - else if (arg_p->type == JERRY_EXTENSION_FIELD_TYPE_FLOAT64) + else if (arg_p->type == JERRY_API_DATA_TYPE_FLOAT64) { #if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32 JERRY_UNREACHABLE (); @@ -187,13 +187,13 @@ ecma_builtin_jerry_dispatch_routine (uint16_t builtin_routine_id, /**< built-in arg_p->v_float64 = num_value; #endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */ } - else if (arg_p->type == JERRY_EXTENSION_FIELD_TYPE_UINT32) + else if (arg_p->type == JERRY_API_DATA_TYPE_UINT32) { arg_p->v_uint32 = ecma_number_to_uint32 (num_value); } } } - else if (arg_p->type == JERRY_EXTENSION_FIELD_TYPE_STRING) + else if (arg_p->type == JERRY_API_DATA_TYPE_STRING) { if (!ecma_is_value_string (arg_value)) { @@ -206,7 +206,7 @@ ecma_builtin_jerry_dispatch_routine (uint16_t builtin_routine_id, /**< built-in } else { - JERRY_ASSERT (arg_p->type == JERRY_EXTENSION_FIELD_TYPE_OBJECT); + JERRY_ASSERT (arg_p->type == JERRY_API_DATA_TYPE_OBJECT); if (!ecma_is_value_object (arg_value)) { @@ -234,22 +234,22 @@ ecma_builtin_jerry_dispatch_routine (uint16_t builtin_routine_id, /**< built-in arg_index < initialized_args_count; arg_index++) { - jerry_extension_function_arg_t *arg_p = &function_p->args_p [arg_index]; + jerry_api_value_t *arg_p = &function_p->args_p [arg_index]; - if (arg_p->type == JERRY_EXTENSION_FIELD_TYPE_STRING) + if (arg_p->type == JERRY_API_DATA_TYPE_STRING) { arg_p->v_string = NULL; } - else if (arg_p->type == JERRY_EXTENSION_FIELD_TYPE_OBJECT) + else if (arg_p->type == JERRY_API_DATA_TYPE_OBJECT) { arg_p->v_object = NULL; } else { - JERRY_ASSERT (arg_p->type == JERRY_EXTENSION_FIELD_TYPE_BOOLEAN - || arg_p->type == JERRY_EXTENSION_FIELD_TYPE_FLOAT32 - || arg_p->type == JERRY_EXTENSION_FIELD_TYPE_FLOAT64 - || arg_p->type == JERRY_EXTENSION_FIELD_TYPE_UINT32); + JERRY_ASSERT (arg_p->type == JERRY_API_DATA_TYPE_BOOLEAN + || arg_p->type == JERRY_API_DATA_TYPE_FLOAT32 + || arg_p->type == JERRY_API_DATA_TYPE_FLOAT64 + || arg_p->type == JERRY_API_DATA_TYPE_UINT32); } } } @@ -302,7 +302,7 @@ ecma_extension_register (jerry_extension_descriptor_t *extension_desc_p) /**< ex /* Check if we can represent the arguments' values */ for (uint32_t j = 0; j < extension_desc_p->functions_p [i].args_number; j++) { - if (extension_desc_p->functions_p[i].args_p[j].type == JERRY_EXTENSION_FIELD_TYPE_FLOAT64) + if (extension_desc_p->functions_p[i].args_p[j].type == JERRY_API_DATA_TYPE_FLOAT64) { return false; } @@ -325,12 +325,12 @@ ecma_extension_register (jerry_extension_descriptor_t *extension_desc_p) /**< ex #if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32 /* Check if we can represent the field's value */ - if (extension_desc_p->fields_p[i].type == JERRY_EXTENSION_FIELD_TYPE_FLOAT64) + if (extension_desc_p->fields_p[i].type == JERRY_API_DATA_TYPE_FLOAT64) { return false; } - if (extension_desc_p->fields_p[i].type == JERRY_EXTENSION_FIELD_TYPE_UINT32 + if (extension_desc_p->fields_p[i].type == JERRY_API_DATA_TYPE_UINT32 && ecma_number_to_uint32 (ecma_uint32_to_number (extension_desc_p->fields_p[i].v_uint32)) != extension_desc_p->fields_p[i].v_uint32) { @@ -440,13 +440,13 @@ ecma_op_extension_object_get_own_property (ecma_object_t *obj_p, /**< the extens switch (field_p->type) { - case JERRY_EXTENSION_FIELD_TYPE_BOOLEAN: + case JERRY_API_DATA_TYPE_BOOLEAN: { value = ecma_make_simple_value (field_p->v_bool ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE); break; } - case JERRY_EXTENSION_FIELD_TYPE_FLOAT32: + case JERRY_API_DATA_TYPE_FLOAT32: { ecma_number_t *num_p = ecma_alloc_number (); *num_p = field_p->v_float32; @@ -454,7 +454,7 @@ ecma_op_extension_object_get_own_property (ecma_object_t *obj_p, /**< the extens break; } - case JERRY_EXTENSION_FIELD_TYPE_FLOAT64: + case JERRY_API_DATA_TYPE_FLOAT64: { #if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32 JERRY_UNREACHABLE (); @@ -466,7 +466,7 @@ ecma_op_extension_object_get_own_property (ecma_object_t *obj_p, /**< the extens break; } - case JERRY_EXTENSION_FIELD_TYPE_UINT32: + case JERRY_API_DATA_TYPE_UINT32: { ecma_number_t *num_p = ecma_alloc_number (); *num_p = ecma_uint32_to_number (field_p->v_uint32); @@ -475,7 +475,7 @@ ecma_op_extension_object_get_own_property (ecma_object_t *obj_p, /**< the extens break; } - case JERRY_EXTENSION_FIELD_TYPE_STRING: + case JERRY_API_DATA_TYPE_STRING: { const ecma_char_t *string_p = (const ecma_char_t*) field_p->v_string; ecma_string_t *str_p = ecma_new_ecma_string (string_p); @@ -483,7 +483,7 @@ ecma_op_extension_object_get_own_property (ecma_object_t *obj_p, /**< the extens break; } - case JERRY_EXTENSION_FIELD_TYPE_OBJECT: + case JERRY_API_DATA_TYPE_OBJECT: { JERRY_UNREACHABLE (); } diff --git a/jerry-core/jerry-api.h b/jerry-core/jerry-api.h new file mode 100644 index 000000000..b546505ec --- /dev/null +++ b/jerry-core/jerry-api.h @@ -0,0 +1,125 @@ +/* Copyright 2015 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef JERRY_API_H +#define JERRY_API_H + +#include +#include +#include +#include + +#ifdef __cplusplus +# define EXTERN_C "C" +#else /* !__cplusplus */ +# define EXTERN_C +#endif /* !__cplusplus */ + +/** \addtogroup jerry Jerry engine interface + * @{ + */ + +/** + * Jerry API data types + */ +typedef enum +{ + JERRY_API_DATA_TYPE_BOOLEAN, /**< bool */ + JERRY_API_DATA_TYPE_FLOAT32, /**< 32-bit float */ + JERRY_API_DATA_TYPE_FLOAT64, /**< 64-bit float */ + JERRY_API_DATA_TYPE_UINT32, /**< number converted to 32-bit unsigned integer*/ + JERRY_API_DATA_TYPE_STRING, /**< string */ + JERRY_API_DATA_TYPE_OBJECT /**< object */ +} jerry_api_data_type_t; + +/** + * Jerry's string value + */ +typedef struct ecma_string_t jerry_api_string_t; + +/** + * Jerry's object value + */ +typedef struct ecma_object_t jerry_api_object_t; + +/** + * Description of an extension function's argument + */ +typedef struct +{ + const jerry_api_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 */ + + union + { + jerry_api_string_t *v_string; /**< pointer to a JS string */ + jerry_api_object_t *v_object; /**< pointer to a JS object */ + }; + }; +} jerry_api_value_t; + +extern EXTERN_C ssize_t +jerry_api_string_to_char_buffer (const jerry_api_string_t *string_p, + char *buffer_p, + ssize_t buffer_size); +extern EXTERN_C +jerry_api_string_t* jerry_api_acquire_string (jerry_api_string_t *string_p); +extern EXTERN_C +void jerry_api_release_string (jerry_api_string_t *string_p); + +extern EXTERN_C +jerry_api_object_t* jerry_api_acquire_object (jerry_api_object_t *object_p); +extern EXTERN_C +void jerry_api_release_object (jerry_api_object_t *object_p); + +extern EXTERN_C +bool jerry_api_call_function (jerry_api_object_t *function_object_p, + jerry_api_value_t *retval_p, + const jerry_api_value_t args_p [], + uint32_t args_count); + +extern EXTERN_C +jerry_api_object_t* jerry_api_create_object (void); + +extern EXTERN_C +bool jerry_api_add_object_field (jerry_api_object_t *object_p, + const char *field_name_p, + const jerry_api_value_t *field_value_p, + bool is_writable); +extern EXTERN_C +bool jerry_api_delete_object_field (jerry_api_object_t *object_p, + const char *field_name_p); +extern EXTERN_C +bool jerry_api_get_object_field_value (jerry_api_object_t *object_p, + const char *field_name_p, + jerry_api_value_t *field_value_p); +extern EXTERN_C +bool jerry_api_set_object_field_value (jerry_api_object_t *object_p, + const char *field_name_p, + const jerry_api_value_t *field_value_p); + +/** + * @} + */ + +#endif /* !JERRY_API_H */ diff --git a/jerry-core/jerry-extension.h b/jerry-core/jerry-extension.h index ce18de4f4..779530a50 100644 --- a/jerry-core/jerry-extension.h +++ b/jerry-core/jerry-extension.h @@ -21,39 +21,16 @@ #include #include -#ifdef __cplusplus -# define EXTERN_C "C" -#else /* !__cplusplus */ -# define EXTERN_C -#endif /* !__cplusplus */ +#include "jerry-api.h" + +/** \addtogroup jerry Jerry engine interface + * @{ + */ /** \addtogroup jerry Jerry engine extension interface * @{ */ -/** - * Jerry's extension-related data types - */ -typedef enum -{ - JERRY_EXTENSION_FIELD_TYPE_BOOLEAN, /**< bool */ - JERRY_EXTENSION_FIELD_TYPE_FLOAT32, /**< 32-bit float */ - JERRY_EXTENSION_FIELD_TYPE_FLOAT64, /**< 64-bit float */ - JERRY_EXTENSION_FIELD_TYPE_UINT32, /**< number converted to 32-bit unsigned integer*/ - JERRY_EXTENSION_FIELD_TYPE_STRING, /**< string */ - JERRY_EXTENSION_FIELD_TYPE_OBJECT /**< object */ -} jerry_extension_data_type_t; - -/** - * An interface for Jerry's string value - */ -typedef struct ecma_string_t jerry_string_t; - -/** - * An interface for Jerry's object value - */ -typedef struct ecma_object_t jerry_object_t; - /** * Description of an extension object's fields */ @@ -61,7 +38,7 @@ typedef struct { const char *field_name_p; /**< field name */ - const jerry_extension_data_type_t type; /**< field data type */ + const jerry_api_data_type_t type; /**< field data type */ /** * Value description @@ -76,30 +53,6 @@ typedef struct }; } jerry_extension_field_t; -/** - * Description of an extension function's argument - */ -typedef struct -{ - const jerry_extension_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 */ - - union - { - jerry_string_t *v_string; /**< pointer to a JS string */ - jerry_object_t *v_object; /**< pointer to a JS object */ - }; - }; -} jerry_extension_function_arg_t; - /** * Pointer to extension function implementation */ @@ -114,7 +67,7 @@ typedef struct jerry_extension_function_t jerry_extension_function_pointer_t function_wrapper_p; /**< pointer to function implementation */ - jerry_extension_function_arg_t *args_p; /**< arrays of the function's arguments */ + jerry_api_value_t *args_p; /**< arrays of the function's arguments */ uint32_t args_number; /**< number of arguments */ } jerry_extension_function_t; @@ -137,16 +90,8 @@ typedef struct jerry_extension_descriptor_t extern EXTERN_C bool jerry_extend_with (jerry_extension_descriptor_t *desc_p); -extern EXTERN_C ssize_t -jerry_string_to_char_buffer (const jerry_string_t *string_p, - char *buffer_p, - ssize_t buffer_size); -extern EXTERN_C jerry_string_t* jerry_acquire_string (jerry_string_t *string_p); -extern EXTERN_C void jerry_release_string (jerry_string_t *string_p); -extern EXTERN_C jerry_object_t* jerry_acquire_object (jerry_object_t *object_p); -extern EXTERN_C void jerry_release_object (jerry_object_t *object_p); - /** + * @} * @} */ diff --git a/jerry-core/jerry-extension.inc.h b/jerry-core/jerry-extension.inc.h index 26ab23d5c..b0284b485 100644 --- a/jerry-core/jerry-extension.inc.h +++ b/jerry-core/jerry-extension.inc.h @@ -39,7 +39,7 @@ enum static const jerry_extension_field_t jerry_extension_fields [JERRY_EXTENSION_FIELDS_NUMBER + 1] = { #define EXTENSION_FIELD(_field_name, _type, _value) \ - { # _field_name, JERRY_EXTENSION_FIELD_TYPE_ ## _type, _value }, + { # _field_name, JERRY_API_DATA_TYPE_ ## _type, _value }, # include EXTENSION_DESCRIPTION_HEADER #undef EXTENSION_FIELD }; @@ -61,7 +61,7 @@ static const jerry_extension_field_t jerry_extension_fields [JERRY_EXTENSION_FIE #define EXTENSION_FUNCTION(_function_name, _function_to_call, _args_number, ...) \ static void jerry_extension_ ## _function_name ## _wrapper (const jerry_extension_function_t *function_block_p) \ { \ - const jerry_extension_function_arg_t *args_p = function_block_p->args_p; \ + const jerry_api_value_t *args_p = function_block_p->args_p; \ _function_to_call (__VA_ARGS__); \ } # include EXTENSION_DESCRIPTION_HEADER @@ -76,11 +76,11 @@ static const jerry_extension_field_t jerry_extension_fields [JERRY_EXTENSION_FIE /* Functions' arguments description */ #define EXTENSION_ARG(_arg_index, _type) [_arg_index] = { \ - (JERRY_EXTENSION_FIELD_TYPE_ ## _type), \ + (JERRY_API_DATA_TYPE_ ## _type), \ false /* just for initialization, should be overwritten upon call */ \ } #define EXTENSION_FUNCTION(_function_name, _function_to_call, _args_number, ...) \ - static jerry_extension_function_arg_t jerry_extension_function_ ## _function_name ## _args [_args_number] = { \ + static jerry_api_value_t jerry_extension_function_ ## _function_name ## _args [_args_number] = { \ __VA_ARGS__ \ }; # include EXTENSION_DESCRIPTION_HEADER diff --git a/jerry-core/jerry.cpp b/jerry-core/jerry.cpp index f9a618964..7462ffd54 100644 --- a/jerry-core/jerry.cpp +++ b/jerry-core/jerry.cpp @@ -18,6 +18,7 @@ #include "ecma-gc.h" #include "ecma-helpers.h" #include "ecma-init-finalize.h" +#include "ecma-objects-general.h" #include "jerry.h" #include "jrt.h" #include "parser.h" @@ -65,6 +66,10 @@ jerry_extend_with (jerry_extension_descriptor_t *desc_p) /**< description of the return ecma_extension_register (desc_p); } /* jerry_extend_with */ +/** + * @} + */ + /** * Copy string characters to specified buffer, append zero character at end of the buffer. * @@ -73,65 +78,188 @@ jerry_extend_with (jerry_extension_descriptor_t *desc_p) /**< description of the * as negation of buffer size, that is required to hold the string's content. */ ssize_t -jerry_string_to_char_buffer (const jerry_string_t *string_p, /**< string descriptor */ +jerry_api_string_to_char_buffer (const jerry_api_string_t *string_p, /**< string descriptor */ char *buffer_p, /**< output characters buffer */ ssize_t buffer_size) /**< size of output buffer */ { return ecma_string_to_zt_string (string_p, (ecma_char_t*) buffer_p, buffer_size); -} /* jerry_string_to_char_buffer */ +} /* jerry_api_string_to_char_buffer */ /** * Acquire string pointer for usage outside of the engine + * from string retrieved in extension routine call from engine. * * Warning: - * acquired pointer should be released with jerry_release_string + * acquired pointer should be released with jerry_api_release_string * * @return pointer that may be used outside of the engine */ -jerry_string_t* -jerry_acquire_string (jerry_string_t *string_p) /**< pointer passed to function */ +jerry_api_string_t* +jerry_api_acquire_string (jerry_api_string_t *string_p) /**< pointer passed to function */ { return ecma_copy_or_ref_ecma_string (string_p); -} /* jerry_acquire_string */ +} /* jerry_api_acquire_string */ /** - * Release string pointer acquired through jerry_acquire_string. + * Release string pointer + * + * See also: + * jerry_api_acquire_string + * jerry_api_call_function + * */ void -jerry_release_string (jerry_string_t *string_p) /**< pointer acquired through jerry_acquire_string */ +jerry_api_release_string (jerry_api_string_t *string_p) /**< pointer acquired through jerry_api_acquire_string */ { ecma_deref_ecma_string (string_p); -} /* jerry_release_string */ +} /* jerry_api_release_string */ /** * Acquire object pointer for usage outside of the engine + * from object retrieved in extension routine call from engine. * * Warning: - * acquired pointer should be released with jerry_release_object + * acquired pointer should be released with jerry_api_release_object * * @return pointer that may be used outside of the engine */ -jerry_object_t* -jerry_acquire_object (jerry_object_t *object_p) /**< pointer passed to function */ +jerry_api_object_t* +jerry_api_acquire_object (jerry_api_object_t *object_p) /**< pointer passed to function */ { ecma_ref_object (object_p); return object_p; -} /* jerry_acquire_object */ +} /* jerry_api_acquire_object */ /** - * Release object pointer acquired through jerry_acquire_object. + * Release object pointer + * + * See also: + * jerry_api_acquire_object + * jerry_api_call_function + * jerry_api_get_object_field_value */ void -jerry_release_object (jerry_object_t *object_p) /**< pointer acquired through jerry_acquire_object */ +jerry_api_release_object (jerry_api_object_t *object_p) /**< pointer acquired through jerry_api_acquire_object */ { ecma_deref_object (object_p); -} /* jerry_release_object */ - +} /* jerry_api_release_object */ /** - * @} + * Call function specified by a function object + * + * Note: + * if call was performed successfully and returned value of type string or object, then caller + * should release the string / object with corresponding jerry_api_release_string / jerry_api_release_object, + * just when the value becomes unnecessary. + * + * @return true, if call was performed successfully, i.e.: + * - arguments number equals to the function's length property; + * - no unhandled exceptions were thrown; + * - returned value type is corresponding to one of jerry_api_data_type_t (if retval_p is not NULL) + * or is 'undefined' (if retval_p is NULL); + * false - otherwise. */ +bool +jerry_api_call_function (jerry_api_object_t *function_object_p, /**< function object to call */ + jerry_api_value_t *retval_p, /**< place for function's return value (if it is required) + * or NULL (if it should be 'undefined') */ + const jerry_api_value_t args_p [], /**< function's call arguments + * (NULL if arguments number is zero) */ + uint32_t args_count) /**< number of the arguments */ +{ + JERRY_ASSERT (args_count == 0 + || args_p != NULL); + + JERRY_UNIMPLEMENTED_REF_UNUSED_VARS ("API routine is not implemented", + function_object_p, retval_p, args_p, args_count); +} /* jerry_api_call_function */ + +/** + * Create an object + * + * Note: + * caller should release the object with jerry_api_release_object, just when the value becomes unnecessary. + * + * @return pointer to created object + */ +jerry_api_object_t* +jerry_api_create_object (void) +{ + return ecma_op_create_object_object_noarg (); +} /* jerry_api_create_object */ + +/** + * Create field (named data property) in the specified object + * + * @return true, if field was created successfully, i.e. upon the call: + * - there is no field with same name in the object; + * - the object is extensible; + * false - otherwise. + */ +bool +jerry_api_add_object_field (jerry_api_object_t *object_p, /**< object to add field at */ + const char *field_name_p, /**< name of the field */ + const jerry_api_value_t *field_value_p, /**< value of the field */ + bool is_writable) /**< flag indicating whether the created field should be writable */ +{ + JERRY_UNIMPLEMENTED_REF_UNUSED_VARS ("API routine is not implemented", + object_p, field_name_p, field_value_p, is_writable); +} /* jerry_api_add_object_field */ + +/** + * Delete field in the specified object + * + * @return true, if field was deleted successfully, i.e. upon the call: + * - there is field with specified name in the object; + * false - otherwise. + */ +bool +jerry_api_delete_object_field (jerry_api_object_t *object_p, /**< object to delete field at */ + const char *field_name_p) /**< name of the field */ +{ + JERRY_UNIMPLEMENTED_REF_UNUSED_VARS ("API routine is not implemented", + object_p, field_name_p); +} /* jerry_api_delete_object_field */ + +/** + * Get value of field in the specified object + * + * Note: + * if value was retrieved successfully and it is of type string or object, then caller + * should release the string / object with corresponding jerry_api_release_string / jerry_api_release_object, + * just when the value becomes unnecessary. + * + * @return true, if field value was retrieved successfully, i.e. upon the call: + * - there is field with specified name in the object; + * - field value is not undefined nor null; + * false - otherwise. + */ +bool +jerry_api_get_object_field_value (jerry_api_object_t *object_p, /**< object */ + const char *field_name_p, /**< name of the field */ + jerry_api_value_t *field_value_p) /**< out: field value, if retrieved successfully */ +{ + JERRY_UNIMPLEMENTED_REF_UNUSED_VARS ("API routine is not implemented", + object_p, field_name_p, field_value_p); +} /* jerry_api_get_object_field_value */ + +/** + * Set value of field in the specified object + * + * @return true, if field value was set successfully, i.e. upon the call: + * - there is field with specified name in the object; + * - field value is writable; + * false - otherwise. + */ +bool +jerry_api_set_object_field_value (jerry_api_object_t *object_p, /**< object */ + const char *field_name_p, /**< name of the field */ + const jerry_api_value_t *field_value_p) /**< field value to set */ +{ + JERRY_UNIMPLEMENTED_REF_UNUSED_VARS ("API routine is not implemented", + object_p, field_name_p, field_value_p); +} /* jerry_api_set_object_field_value */ /** * Jerry engine initialization @@ -231,6 +359,8 @@ jerry_parse (jerry_ctx_t* ctx_p, /**< run context */ /** * Run Jerry in specified run context + * + * @return completion status */ jerry_completion_code_t jerry_run (jerry_ctx_t* ctx_p) /**< run context */ @@ -243,6 +373,8 @@ jerry_run (jerry_ctx_t* ctx_p) /**< run context */ /** * Simple jerry runner + * + * @return completion status */ jerry_completion_code_t jerry_run_simple (const char *script_source, /**< script source */ diff --git a/jerry-core/jerry.h b/jerry-core/jerry.h index ebd1262df..24e54f86f 100644 --- a/jerry-core/jerry.h +++ b/jerry-core/jerry.h @@ -84,12 +84,6 @@ extern const char *jerry_branch_name; */ typedef void (*jerry_error_callback_t) (jerry_fatal_code_t); -#ifdef __cplusplus -# define EXTERN_C "C" -#else /* !__cplusplus */ -# define EXTERN_C -#endif /* !__cplusplus */ - extern EXTERN_C void jerry_init (jerry_flag_t flags); extern EXTERN_C void jerry_cleanup (void); diff --git a/plugins/io/init.cpp b/plugins/io/init.cpp index bf0525864..4322e460a 100644 --- a/plugins/io/init.cpp +++ b/plugins/io/init.cpp @@ -19,7 +19,7 @@ #include "jerry.h" static void plugin_io_print_uint32 (uint32_t); -static void plugin_io_print_string (jerry_string_t *string_p); +static void plugin_io_print_string (jerry_api_string_t *string_p); #include "io-extension-description.inc.h" @@ -46,11 +46,11 @@ plugin_io_print_uint32 (uint32_t num) /**< uint32 to print */ * If string is too long for the function, then nothing will be printed. */ static void -plugin_io_print_string (jerry_string_t *string_p) /**< string to print */ +plugin_io_print_string (jerry_api_string_t *string_p) /**< string to print */ { char buffer [32]; - ssize_t req_size = jerry_string_to_char_buffer (string_p, buffer, (ssize_t) sizeof (buffer)); + ssize_t req_size = jerry_api_string_to_char_buffer (string_p, buffer, (ssize_t) sizeof (buffer)); if (req_size < 0) {