Update Jerry API
* Removed jerry_string_t and jerry_object_t * Updated function names * Updated return values * Updated function descriptions * Added new functions * Added new unittests JerryScript-DCO-1.0-Signed-off-by: László Langó llango.u-szeged@partner.samsung.com
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
/* Copyright 2014-2016 Samsung Electronics Co., Ltd.
|
||||
* Copyright 2016 University of Szeged.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -502,7 +503,7 @@ ecma_gc_sweep (ecma_object_t *object_p) /**< object to free */
|
||||
} /* ecma_gc_sweep */
|
||||
|
||||
/**
|
||||
* Run garbage collecting
|
||||
* Run garbage collection
|
||||
*/
|
||||
void
|
||||
ecma_gc_run (void)
|
||||
|
||||
@@ -56,7 +56,7 @@ ecma_op_eval (ecma_string_t *code_p, /**< code string */
|
||||
{
|
||||
ECMA_STRING_TO_UTF8_STRING (code_p, code_utf8_buffer_p, code_utf8_buffer_size);
|
||||
|
||||
ret_value = ecma_op_eval_chars_buffer ((jerry_char_t *) code_utf8_buffer_p,
|
||||
ret_value = ecma_op_eval_chars_buffer (code_utf8_buffer_p,
|
||||
chars_num,
|
||||
is_direct,
|
||||
is_called_from_strict_mode_code);
|
||||
@@ -77,39 +77,28 @@ ecma_op_eval (ecma_string_t *code_p, /**< code string */
|
||||
* @return ecma value
|
||||
*/
|
||||
ecma_value_t
|
||||
ecma_op_eval_chars_buffer (const jerry_char_t *code_p, /**< code characters buffer */
|
||||
ecma_op_eval_chars_buffer (const lit_utf8_byte_t *code_p, /**< code characters buffer */
|
||||
size_t code_buffer_size, /**< size of the buffer */
|
||||
bool is_direct, /**< is eval called directly (ECMA-262 v5, 15.1.2.1.1) */
|
||||
bool is_called_from_strict_mode_code) /**< is eval is called from strict mode code */
|
||||
{
|
||||
JERRY_ASSERT (code_p != NULL);
|
||||
|
||||
ecma_value_t ret_value;
|
||||
|
||||
ecma_compiled_code_t *bytecode_data_p;
|
||||
jsp_status_t parse_status;
|
||||
|
||||
bool is_strict_call = (is_direct && is_called_from_strict_mode_code);
|
||||
jerry_object_t *error_obj_p = NULL;
|
||||
|
||||
parse_status = parser_parse_eval (code_p,
|
||||
code_buffer_size,
|
||||
is_strict_call,
|
||||
&bytecode_data_p,
|
||||
&error_obj_p);
|
||||
ecma_value_t parse_status = parser_parse_script (code_p,
|
||||
code_buffer_size,
|
||||
is_strict_call,
|
||||
&bytecode_data_p);
|
||||
|
||||
if (parse_status == JSP_STATUS_OK)
|
||||
if (ECMA_IS_VALUE_ERROR (parse_status))
|
||||
{
|
||||
ret_value = vm_run_eval (bytecode_data_p, is_direct);
|
||||
}
|
||||
else
|
||||
{
|
||||
JERRY_ASSERT (parse_status == JSP_STATUS_SYNTAX_ERROR);
|
||||
|
||||
ret_value = ecma_make_error_obj_value (error_obj_p);
|
||||
return parse_status;
|
||||
}
|
||||
|
||||
return ret_value;
|
||||
return vm_run_eval (bytecode_data_p, is_direct);
|
||||
} /* ecma_op_eval_chars_buffer */
|
||||
|
||||
/**
|
||||
|
||||
@@ -30,7 +30,7 @@ extern ecma_value_t
|
||||
ecma_op_eval (ecma_string_t *, bool, bool);
|
||||
|
||||
extern ecma_value_t
|
||||
ecma_op_eval_chars_buffer (const jerry_char_t *, size_t, bool, bool);
|
||||
ecma_op_eval_chars_buffer (const lit_utf8_byte_t *, size_t, bool, bool);
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/* Copyright 2014-2016 Samsung Electronics Co., Ltd.
|
||||
* Copyright 2016 University of Szeged.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -277,8 +278,11 @@ ecma_op_object_put (ecma_object_t *obj_p, /**< the object */
|
||||
* See also:
|
||||
* ECMA-262 v5, 8.6.2; ECMA-262 v5, Table 8
|
||||
*
|
||||
* @return ecma value
|
||||
* Returned value must be freed with ecma_free_value
|
||||
* Note:
|
||||
* returned value must be freed with ecma_free_value
|
||||
*
|
||||
* @return true, if deleted successfully
|
||||
* false or type error otherwise (based in 'is_throw')
|
||||
*/
|
||||
ecma_value_t
|
||||
ecma_op_object_delete (ecma_object_t *obj_p, /**< the object */
|
||||
@@ -315,7 +319,7 @@ ecma_op_object_delete (ecma_object_t *obj_p, /**< the object */
|
||||
{
|
||||
JERRY_ASSERT (false);
|
||||
|
||||
return ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
return ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
|
||||
}
|
||||
}
|
||||
} /* ecma_op_object_delete */
|
||||
|
||||
+165
-80
@@ -20,6 +20,7 @@
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -32,15 +33,26 @@ extern "C"
|
||||
*/
|
||||
|
||||
/**
|
||||
* Jerry completion codes
|
||||
* Major version of JerryScript API
|
||||
*/
|
||||
#define JERRY_API_MAJOR_VERSION 1
|
||||
|
||||
/**
|
||||
* Minor version of JerryScript API
|
||||
*/
|
||||
#define JERRY_API_MINOR_VERSION 0
|
||||
|
||||
/**
|
||||
* Jerry init flags
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
JERRY_COMPLETION_CODE_OK = 0, /**< successful completion */
|
||||
JERRY_COMPLETION_CODE_UNHANDLED_EXCEPTION = 1, /**< exception occured and it was not handled */
|
||||
JERRY_COMPLETION_CODE_INVALID_SNAPSHOT_VERSION = 2, /**< snapshot version mismatch */
|
||||
JERRY_COMPLETION_CODE_INVALID_SNAPSHOT_FORMAT = 3, /**< snapshot format is not valid */
|
||||
} jerry_completion_code_t;
|
||||
JERRY_INIT_EMPTY = (0u), /**< empty flag set */
|
||||
JERRY_INIT_ENABLE_LOG = (1u << 0), /**< enable logging */
|
||||
JERRY_INIT_SHOW_OPCODES = (1u << 1), /**< dump byte-code to stdout after parse */
|
||||
JERRY_INIT_MEM_STATS = (1u << 2), /**< dump memory statistics */
|
||||
JERRY_INIT_MEM_STATS_SEPARATE = (1u << 3), /**< dump memory statistics and reset peak values after parse */
|
||||
} jerry_init_flag_t;
|
||||
|
||||
/**
|
||||
* Jerry API Error object types
|
||||
@@ -76,29 +88,61 @@ typedef uint32_t jerry_size_t;
|
||||
*/
|
||||
typedef uint32_t jerry_length_t;
|
||||
|
||||
/**
|
||||
* Jerry's string value
|
||||
*/
|
||||
typedef struct ecma_string_t jerry_string_t;
|
||||
|
||||
/**
|
||||
* Jerry's object value
|
||||
*/
|
||||
typedef struct ecma_object_t jerry_object_t;
|
||||
|
||||
/**
|
||||
* Description of a JerryScript value
|
||||
*/
|
||||
typedef uint32_t jerry_value_t;
|
||||
|
||||
|
||||
/**
|
||||
* Description of ECMA property descriptor
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
/** Is [[Value]] defined? */
|
||||
bool is_value_defined;
|
||||
|
||||
/** Is [[Get]] defined? */
|
||||
bool is_get_defined;
|
||||
|
||||
/** Is [[Set]] defined? */
|
||||
bool is_set_defined;
|
||||
|
||||
/** Is [[Writable]] defined? */
|
||||
bool is_writable_defined;
|
||||
|
||||
/** [[Writable]] */
|
||||
bool is_writable;
|
||||
|
||||
/** Is [[Enumerable]] defined? */
|
||||
bool is_enumerable_defined;
|
||||
|
||||
/** [[Enumerable]] */
|
||||
bool is_enumerable;
|
||||
|
||||
/** Is [[Configurable]] defined? */
|
||||
bool is_configurable_defined;
|
||||
|
||||
/** [[Configurable]] */
|
||||
bool is_configurable;
|
||||
|
||||
/** [[Value]] */
|
||||
jerry_value_t value;
|
||||
|
||||
/** [[Get]] */
|
||||
jerry_value_t getter;
|
||||
|
||||
/** [[Set]] */
|
||||
jerry_value_t setter;
|
||||
} jerry_property_descriptor_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_val,
|
||||
const jerry_value_t args_p[],
|
||||
const jerry_length_t args_count,
|
||||
jerry_value_t *ret_val_p);
|
||||
typedef jerry_value_t (*jerry_external_handler_t) (const jerry_value_t function_obj_p,
|
||||
const jerry_value_t this_val,
|
||||
const jerry_value_t args_p[],
|
||||
const jerry_length_t args_count);
|
||||
|
||||
/**
|
||||
* Native free callback of an object
|
||||
@@ -106,22 +150,49 @@ typedef bool (*jerry_external_handler_t) (const jerry_object_t *function_obj_p,
|
||||
typedef void (*jerry_object_free_callback_t) (const uintptr_t native_p);
|
||||
|
||||
/**
|
||||
* Function type applied for each fields in objects
|
||||
* Function type applied for each data property of an object
|
||||
*/
|
||||
typedef bool (*jerry_object_field_foreach_t) (const jerry_string_t *field_name_p,
|
||||
const jerry_value_t field_value,
|
||||
void *user_data_p);
|
||||
typedef bool (*jerry_object_property_foreach_t) (const jerry_value_t property_name_p,
|
||||
const jerry_value_t property_value,
|
||||
void *user_data_p);
|
||||
|
||||
|
||||
/**
|
||||
* Logger functions
|
||||
*/
|
||||
#ifdef JERRY_ENABLE_LOG
|
||||
extern int jerry_debug_level;
|
||||
extern FILE *jerry_log_file;
|
||||
#endif /* JERRY_ENABLE_LOG */
|
||||
|
||||
/**
|
||||
* General engine functions
|
||||
*/
|
||||
void jerry_init (jerry_init_flag_t);
|
||||
void jerry_cleanup (void);
|
||||
void jerry_register_magic_strings (const jerry_char_ptr_t *, uint32_t, const jerry_length_t *);
|
||||
void jerry_get_memory_limits (size_t *, size_t *);
|
||||
void jerry_gc (void);
|
||||
|
||||
/**
|
||||
* Parser and executor functions
|
||||
*/
|
||||
bool jerry_run_simple (const jerry_char_t *, size_t, jerry_init_flag_t);
|
||||
jerry_value_t jerry_parse (const jerry_char_t *, size_t, bool);
|
||||
jerry_value_t jerry_run (const jerry_value_t);
|
||||
jerry_value_t jerry_eval (const jerry_char_t *, size_t, bool);
|
||||
|
||||
/**
|
||||
* Get the global context
|
||||
*/
|
||||
jerry_object_t *jerry_get_global (void);
|
||||
jerry_value_t jerry_get_global_object (void);
|
||||
|
||||
/**
|
||||
* Checker functions of 'jerry_value_t'
|
||||
*/
|
||||
bool jerry_value_is_array (const jerry_value_t);
|
||||
bool jerry_value_is_boolean (const jerry_value_t);
|
||||
bool jerry_value_is_error (const jerry_value_t);
|
||||
bool jerry_value_is_constructor (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);
|
||||
@@ -129,13 +200,30 @@ 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);
|
||||
|
||||
/**
|
||||
* Error flag manipulation functions
|
||||
*/
|
||||
bool jerry_value_has_error_flag (const jerry_value_t);
|
||||
void jerry_value_clear_error_flag (jerry_value_t *);
|
||||
void jerry_value_set_error_flag (jerry_value_t *);
|
||||
|
||||
/**
|
||||
* Getter functions of 'jerry_value_t'
|
||||
*/
|
||||
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);
|
||||
|
||||
/**
|
||||
* Functions for string values
|
||||
*/
|
||||
jerry_size_t jerry_get_string_size (const jerry_value_t);
|
||||
jerry_length_t jerry_get_string_length (const jerry_value_t);
|
||||
jerry_size_t jerry_string_to_char_buffer (const jerry_value_t, jerry_char_t *, jerry_size_t);
|
||||
|
||||
/**
|
||||
* Functions for array object values
|
||||
*/
|
||||
uint32_t jerry_get_array_length (const jerry_value_t);
|
||||
|
||||
/**
|
||||
* Converters of 'jerry_value_t'
|
||||
@@ -143,75 +231,72 @@ jerry_object_t *jerry_get_object_value (const jerry_value_t);
|
||||
bool jerry_value_to_boolean (const jerry_value_t);
|
||||
jerry_value_t jerry_value_to_number (const jerry_value_t);
|
||||
jerry_value_t jerry_value_to_object (const jerry_value_t);
|
||||
jerry_value_t jerry_value_to_primitive (const jerry_value_t);
|
||||
jerry_value_t jerry_value_to_string (const jerry_value_t);
|
||||
jerry_value_t jerry_value_remove_error_flag (const jerry_value_t);
|
||||
|
||||
/**
|
||||
* Create functions of 'jerry_value_t'
|
||||
*/
|
||||
jerry_value_t jerry_create_null_value (void);
|
||||
jerry_value_t jerry_create_undefined_value (void);
|
||||
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);
|
||||
|
||||
/**
|
||||
* 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);
|
||||
|
||||
/**
|
||||
* Create functions of API objects
|
||||
* Create functions of API values
|
||||
*/
|
||||
jerry_object_t *jerry_create_object (void);
|
||||
jerry_object_t *jerry_create_array_object (jerry_size_t);
|
||||
jerry_object_t *jerry_create_external_function (jerry_external_handler_t);
|
||||
jerry_object_t *jerry_create_error (jerry_error_t, const jerry_char_t *);
|
||||
jerry_object_t *jerry_create_error_sz (jerry_error_t, const jerry_char_t *, jerry_size_t);
|
||||
jerry_string_t *jerry_create_string (const jerry_char_t *);
|
||||
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_get_array_index_value (jerry_object_t *, jerry_length_t, jerry_value_t *);
|
||||
uint32_t jerry_get_array_length (const jerry_object_t *);
|
||||
|
||||
/**
|
||||
* Functions of 'jerry_string_t'
|
||||
*/
|
||||
jerry_size_t jerry_get_string_size (const jerry_string_t *);
|
||||
jerry_length_t jerry_get_string_length (const jerry_string_t *);
|
||||
jerry_size_t jerry_string_to_char_buffer (const jerry_string_t *, jerry_char_t *, jerry_size_t);
|
||||
jerry_value_t jerry_create_array (uint32_t);
|
||||
jerry_value_t jerry_create_boolean (bool);
|
||||
jerry_value_t jerry_create_error (jerry_error_t, const jerry_char_t *);
|
||||
jerry_value_t jerry_create_error_sz (jerry_error_t, const jerry_char_t *, jerry_size_t);
|
||||
jerry_value_t jerry_create_external_function (jerry_external_handler_t);
|
||||
jerry_value_t jerry_create_number (double);
|
||||
jerry_value_t jerry_create_null (void);
|
||||
jerry_value_t jerry_create_object (void);
|
||||
jerry_value_t jerry_create_string (const jerry_char_t *);
|
||||
jerry_value_t jerry_create_string_sz (const jerry_char_t *, jerry_size_t);
|
||||
jerry_value_t jerry_create_undefined (void);
|
||||
|
||||
/**
|
||||
* General API functions of JS objects
|
||||
*/
|
||||
bool jerry_is_array (const jerry_object_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_delete_object_field (jerry_object_t *, const jerry_char_t *, jerry_size_t);
|
||||
jerry_value_t jerry_get_object_field_value (jerry_object_t *, const jerry_char_t *);
|
||||
jerry_value_t jerry_get_object_field_value_sz (jerry_object_t *, const jerry_char_t *, jerry_size_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);
|
||||
jerry_value_t jerry_construct_object (jerry_object_t *, const jerry_value_t[], uint16_t);
|
||||
jerry_value_t jerry_call_function (jerry_object_t *, jerry_object_t *, const jerry_value_t[], uint16_t);
|
||||
bool jerry_has_property (const jerry_value_t, const jerry_value_t);
|
||||
bool jerry_has_own_property (const jerry_value_t, const jerry_value_t);
|
||||
bool jerry_delete_property (const jerry_value_t, const jerry_value_t);
|
||||
|
||||
jerry_value_t jerry_get_property (const jerry_value_t, const jerry_value_t);
|
||||
jerry_value_t jerry_get_property_by_index (const jerry_value_t , uint32_t);
|
||||
jerry_value_t jerry_set_property (const jerry_value_t, const jerry_value_t, const jerry_value_t);
|
||||
jerry_value_t jerry_set_property_by_index (const jerry_value_t, uint32_t, const jerry_value_t);
|
||||
|
||||
void jerry_init_property_descriptor_fields (jerry_property_descriptor_t *);
|
||||
jerry_value_t jerry_define_own_property (const jerry_value_t,
|
||||
const jerry_value_t,
|
||||
const jerry_property_descriptor_t *);
|
||||
|
||||
bool jerry_get_own_property_descriptor (const jerry_value_t,
|
||||
const jerry_value_t,
|
||||
jerry_property_descriptor_t *);
|
||||
void jerry_free_property_descriptor_fields (const jerry_property_descriptor_t *);
|
||||
|
||||
jerry_value_t jerry_call_function (const jerry_value_t, const jerry_value_t, const jerry_value_t[], jerry_size_t);
|
||||
jerry_value_t jerry_construct_object (const jerry_value_t, const jerry_value_t[], jerry_size_t);
|
||||
|
||||
jerry_value_t jerry_get_object_keys (const jerry_value_t);
|
||||
jerry_value_t jerry_get_prototype (const jerry_value_t);
|
||||
jerry_value_t jerry_set_prototype (const jerry_value_t, const jerry_value_t);
|
||||
|
||||
bool jerry_get_object_native_handle (const jerry_value_t, uintptr_t *);
|
||||
void jerry_set_object_native_handle (const jerry_value_t, uintptr_t, jerry_object_free_callback_t);
|
||||
bool jerry_foreach_object_property (const jerry_value_t, jerry_object_property_foreach_t, void *);
|
||||
|
||||
/**
|
||||
* Snapshot functions
|
||||
*/
|
||||
size_t jerry_parse_and_save_snapshot (const jerry_char_t *, size_t, bool, bool, uint8_t *, size_t);
|
||||
jerry_value_t jerry_exec_snapshot (const void *, size_t, bool);
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
||||
+1382
-1292
File diff suppressed because it is too large
Load Diff
@@ -1,91 +0,0 @@
|
||||
/* Copyright 2015-2016 Samsung Electronics Co., Ltd.
|
||||
* Copyright 2016 University of Szeged.
|
||||
*
|
||||
* 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_H
|
||||
#define JERRY_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "jerry-api.h"
|
||||
#include "jerry-port.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/** \addtogroup jerry Jerry engine interface
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* Jerry flags
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
JERRY_FLAG_EMPTY = (0u), /**< empty flag set */
|
||||
JERRY_FLAG_SHOW_OPCODES = (1u << 0), /**< dump byte-code to stdout after parse */
|
||||
JERRY_FLAG_MEM_STATS = (1u << 1), /**< dump memory statistics */
|
||||
JERRY_FLAG_MEM_STATS_SEPARATE = (1u << 2), /**< dump memory statistics and reset peak values after parse */
|
||||
JERRY_FLAG_PARSE_ONLY = (1u << 3), /**< parse only, prevents script execution */
|
||||
JERRY_FLAG_ENABLE_LOG = (1u << 4), /**< enable logging */
|
||||
} jerry_flag_t;
|
||||
|
||||
/**
|
||||
* Jerry engine build date
|
||||
*/
|
||||
extern const char * const jerry_build_date;
|
||||
|
||||
/**
|
||||
* Jerry engine build commit hash
|
||||
*/
|
||||
extern const char * const jerry_commit_hash;
|
||||
|
||||
/**
|
||||
* Jerry engine build branch name
|
||||
*/
|
||||
extern const char * const jerry_branch_name;
|
||||
|
||||
#ifdef JERRY_ENABLE_LOG
|
||||
extern int jerry_debug_level;
|
||||
extern FILE *jerry_log_file;
|
||||
#endif /* JERRY_ENABLE_LOG */
|
||||
|
||||
void jerry_init (jerry_flag_t);
|
||||
void jerry_cleanup (void);
|
||||
|
||||
void jerry_get_memory_limits (size_t *, size_t *);
|
||||
|
||||
bool jerry_parse (const jerry_char_t *, size_t, jerry_object_t **);
|
||||
jerry_completion_code_t jerry_run (jerry_value_t *);
|
||||
jerry_completion_code_t jerry_run_simple (const jerry_char_t *, size_t, jerry_flag_t);
|
||||
|
||||
jerry_completion_code_t jerry_eval (const jerry_char_t *, size_t, bool, bool, jerry_value_t *);
|
||||
void jerry_gc (void);
|
||||
void jerry_register_external_magic_strings (const jerry_char_ptr_t *, uint32_t, const jerry_length_t *);
|
||||
|
||||
size_t jerry_parse_and_save_snapshot (const jerry_char_t *, size_t, bool, uint8_t *, size_t);
|
||||
jerry_completion_code_t jerry_exec_snapshot (const void *, size_t, bool, jerry_value_t *);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
#endif /* !JERRY_H */
|
||||
@@ -20,7 +20,8 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "jerry.h"
|
||||
#include "jerry-api.h"
|
||||
#include "jerry-port.h"
|
||||
#include "jrt-types.h"
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/* Copyright 2015-2016 Samsung Electronics Co., Ltd.
|
||||
* Copyright 2016 University of Szeged.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#include "byte-code.h"
|
||||
#include "js-parser.h"
|
||||
#include "js-parser-limits.h"
|
||||
#include "js-lexer.h"
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "ecma-exceptions.h"
|
||||
#include "ecma-helpers.h"
|
||||
#include "ecma-literal-storage.h"
|
||||
#include "js-parser-internal.h"
|
||||
@@ -2238,52 +2239,27 @@ parser_set_show_instrs (int show_instrs) /**< flag indicating whether to dump by
|
||||
* Parse EcamScript source code
|
||||
*
|
||||
* Note:
|
||||
* returned error object should be freed with jerry_release_object
|
||||
*/
|
||||
jsp_status_t
|
||||
parser_parse_script (const jerry_char_t *source_p, /**< source code */
|
||||
size_t size, /**< size of the source code */
|
||||
ecma_compiled_code_t **bytecode_data_p, /**< [out] JS bytecode */
|
||||
jerry_object_t **error_obj_p) /**< [out] error object */
|
||||
{
|
||||
parser_error_location parse_error;
|
||||
*bytecode_data_p = parser_parse_source (source_p, size, false, &parse_error);
|
||||
|
||||
if (!*bytecode_data_p)
|
||||
{
|
||||
*error_obj_p = jerry_create_error (JERRY_ERROR_SYNTAX,
|
||||
(const jerry_char_t *) parser_error_to_string (parse_error.error));
|
||||
return JSP_STATUS_SYNTAX_ERROR;
|
||||
}
|
||||
|
||||
return JSP_STATUS_OK;
|
||||
} /* parser_parse_script */
|
||||
|
||||
/**
|
||||
* Parse EcamScript eval source code
|
||||
* returned value must be freed with ecma_free_value
|
||||
*
|
||||
* Note:
|
||||
* returned error object should be freed with jerry_release_object
|
||||
* @return true - if success
|
||||
* syntax error - otherwise
|
||||
*/
|
||||
jsp_status_t
|
||||
parser_parse_eval (const jerry_char_t *source_p, /**< source code */
|
||||
size_t size, /**< size of the source code */
|
||||
bool is_strict, /**< strict mode */
|
||||
ecma_compiled_code_t **bytecode_data_p, /**< [out] JS bytecode */
|
||||
jerry_object_t **error_obj_p) /**< [out] error object */
|
||||
ecma_value_t
|
||||
parser_parse_script (const uint8_t *source_p, /**< source code */
|
||||
size_t size, /**< size of the source code */
|
||||
bool is_strict, /**< strict mode */
|
||||
ecma_compiled_code_t **bytecode_data_p) /**< [out] JS bytecode */
|
||||
{
|
||||
parser_error_location parse_error;
|
||||
*bytecode_data_p = parser_parse_source (source_p, size, is_strict, &parse_error);
|
||||
|
||||
if (!*bytecode_data_p)
|
||||
{
|
||||
*error_obj_p = jerry_create_error (JERRY_ERROR_SYNTAX,
|
||||
(const jerry_char_t *) parser_error_to_string (parse_error.error));
|
||||
return JSP_STATUS_SYNTAX_ERROR;
|
||||
return ecma_raise_syntax_error (parser_error_to_string (parse_error.error));
|
||||
}
|
||||
|
||||
return JSP_STATUS_OK;
|
||||
} /* parser_parse_eval */
|
||||
return ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE);
|
||||
} /* parser_parse_script */
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
#ifndef JS_PARSER_H
|
||||
#define JS_PARSER_H
|
||||
|
||||
#include "byte-code.h"
|
||||
#include "ecma-globals.h"
|
||||
|
||||
/** \addtogroup parser Parser
|
||||
* @{
|
||||
@@ -128,25 +128,8 @@ typedef struct
|
||||
parser_line_counter_t column; /**< column where the error occured */
|
||||
} parser_error_location;
|
||||
|
||||
/**
|
||||
* Parser completion status
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
JSP_STATUS_OK, /**< parse finished successfully, no early errors occured */
|
||||
JSP_STATUS_SYNTAX_ERROR, /**< SyntaxError early error occured */
|
||||
} jsp_status_t;
|
||||
|
||||
/* Note: source must be a valid UTF-8 string */
|
||||
extern jsp_status_t parser_parse_script (const jerry_char_t *,
|
||||
size_t,
|
||||
ecma_compiled_code_t **,
|
||||
jerry_object_t **);
|
||||
extern jsp_status_t parser_parse_eval (const jerry_char_t *,
|
||||
size_t,
|
||||
bool,
|
||||
ecma_compiled_code_t **,
|
||||
jerry_object_t **);
|
||||
extern ecma_value_t parser_parse_script (const uint8_t *, size_t, bool, ecma_compiled_code_t **);
|
||||
|
||||
const char *parser_error_to_string (parser_error_t);
|
||||
|
||||
|
||||
+6
-53
@@ -54,11 +54,6 @@ static vm_frame_ctx_t *vm_top_context_p = NULL;
|
||||
*/
|
||||
static bool is_direct_eval_form_call = false;
|
||||
|
||||
/**
|
||||
* Program bytecode pointer
|
||||
*/
|
||||
static ecma_compiled_code_t *__program = NULL;
|
||||
|
||||
/**
|
||||
* Get the value of object[property].
|
||||
*
|
||||
@@ -193,17 +188,6 @@ vm_op_set_value (ecma_value_t object, /**< base object */
|
||||
return completion_value;
|
||||
} /* vm_op_set_value */
|
||||
|
||||
/**
|
||||
* Initialize interpreter.
|
||||
*/
|
||||
void
|
||||
vm_init (ecma_compiled_code_t *program_p) /**< pointer to byte-code data */
|
||||
{
|
||||
JERRY_ASSERT (__program == NULL);
|
||||
|
||||
__program = program_p;
|
||||
} /* vm_init */
|
||||
|
||||
#define CBC_OPCODE(arg1, arg2, arg3, arg4) arg4,
|
||||
|
||||
/**
|
||||
@@ -221,44 +205,27 @@ static const uint16_t vm_decode_table[] =
|
||||
* Run global code
|
||||
*
|
||||
* Note:
|
||||
* returned error value should be freed with jerry_release_value
|
||||
* just when the value becomes unnecessary.
|
||||
* returned value must be freed with ecma_free_value, when it is no longer needed.
|
||||
*
|
||||
* @return completion code
|
||||
* @return ecma value
|
||||
*/
|
||||
jerry_completion_code_t
|
||||
vm_run_global (ecma_value_t *error_value_p) /**< [out] error value */
|
||||
ecma_value_t
|
||||
vm_run_global (const ecma_compiled_code_t *bytecode_p) /**< pointer to bytecode to run */
|
||||
{
|
||||
jerry_completion_code_t ret_code;
|
||||
|
||||
JERRY_ASSERT (__program != NULL);
|
||||
|
||||
ecma_object_t *glob_obj_p = ecma_builtin_get (ECMA_BUILTIN_ID_GLOBAL);
|
||||
ecma_object_t *lex_env_p = ecma_get_global_environment ();
|
||||
|
||||
ecma_value_t ret_value = vm_run (__program,
|
||||
ecma_value_t ret_value = vm_run (bytecode_p,
|
||||
ecma_make_object_value (glob_obj_p),
|
||||
lex_env_p,
|
||||
false,
|
||||
NULL,
|
||||
0);
|
||||
|
||||
if (ECMA_IS_VALUE_ERROR (ret_value))
|
||||
{
|
||||
*error_value_p = ret_value;
|
||||
ret_code = JERRY_COMPLETION_CODE_UNHANDLED_EXCEPTION;
|
||||
}
|
||||
else
|
||||
{
|
||||
ecma_free_value (ret_value);
|
||||
*error_value_p = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
|
||||
ret_code = JERRY_COMPLETION_CODE_OK;
|
||||
}
|
||||
|
||||
ecma_deref_object (glob_obj_p);
|
||||
ecma_deref_object (lex_env_p);
|
||||
|
||||
return ret_code;
|
||||
return ret_value;
|
||||
} /* vm_run_global */
|
||||
|
||||
/**
|
||||
@@ -562,20 +529,6 @@ opfunc_construct (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/**
|
||||
* Cleanup interpreter
|
||||
*/
|
||||
void
|
||||
vm_finalize (void)
|
||||
{
|
||||
if (__program)
|
||||
{
|
||||
ecma_bytecode_deref (__program);
|
||||
}
|
||||
|
||||
__program = NULL;
|
||||
} /* vm_finalize */
|
||||
|
||||
/**
|
||||
* Run initializer byte codes.
|
||||
*
|
||||
|
||||
+1
-3
@@ -275,9 +275,7 @@ typedef enum
|
||||
VM_EXEC_CONSTRUCT, /**< construct a new object */
|
||||
} vm_call_operation;
|
||||
|
||||
extern void vm_init (ecma_compiled_code_t *);
|
||||
extern void vm_finalize (void);
|
||||
extern jerry_completion_code_t vm_run_global (ecma_value_t *);
|
||||
extern ecma_value_t vm_run_global (const ecma_compiled_code_t *);
|
||||
extern ecma_value_t vm_run_eval (ecma_compiled_code_t *, bool);
|
||||
|
||||
extern ecma_value_t vm_run (const ecma_compiled_code_t *, ecma_value_t,
|
||||
|
||||
Reference in New Issue
Block a user