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:
László Langó
2016-06-29 08:41:15 +02:00
parent cea3a142ac
commit 9bce5b09a9
19 changed files with 2077 additions and 2112 deletions
+2 -1
View File
@@ -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)
+9 -20
View File
@@ -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 */
/**
+1 -1
View File
@@ -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);
/**
* @}
+7 -3
View File
@@ -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
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
-91
View File
@@ -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 */
+2 -1
View File
@@ -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
View File
@@ -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"
+12 -36
View File
@@ -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 */
/**
* @}
+2 -19
View File
@@ -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
View File
@@ -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
View File
@@ -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,