diff --git a/jerry-core/debugger/debugger.c b/jerry-core/debugger/debugger.c index 019ef291c..25f391258 100644 --- a/jerry-core/debugger/debugger.c +++ b/jerry-core/debugger/debugger.c @@ -22,7 +22,7 @@ #include "ecma-function-object.h" #include "ecma-objects.h" #include "jcontext.h" -#include "jerryscript-port.h" +#include "jerryscript-debugger.h" #include "lit-char-helpers.h" #if JERRY_DEBUGGER diff --git a/jerry-core/ecma/base/ecma-module.c b/jerry-core/ecma/base/ecma-module.c index 441a1f1f3..44801d789 100644 --- a/jerry-core/ecma/base/ecma-module.c +++ b/jerry-core/ecma/base/ecma-module.c @@ -14,7 +14,6 @@ */ #include "jcontext.h" -#include "jerryscript.h" #include "ecma-exceptions.h" #include "ecma-function-object.h" diff --git a/jerry-core/include/jerryscript-core.h b/jerry-core/include/jerryscript-core.h index f193582d8..981e431b3 100644 --- a/jerry-core/include/jerryscript-core.h +++ b/jerry-core/include/jerryscript-core.h @@ -16,11 +16,7 @@ #ifndef JERRYSCRIPT_CORE_H #define JERRYSCRIPT_CORE_H -#include -#include -#include - -#include "jerryscript-compiler.h" +#include "jerryscript-types.h" #ifdef __cplusplus extern "C" @@ -31,386 +27,6 @@ extern "C" * @{ */ -/** - * Major version of JerryScript API. - */ -#define JERRY_API_MAJOR_VERSION 3 - -/** - * Minor version of JerryScript API. - */ -#define JERRY_API_MINOR_VERSION 0 - -/** - * Patch version of JerryScript API. - */ -#define JERRY_API_PATCH_VERSION 0 - -/** - * JerryScript init flags. - */ -typedef enum -{ - JERRY_INIT_EMPTY = (0u), /**< empty flag set */ - JERRY_INIT_SHOW_OPCODES = (1u << 0), /**< dump byte-code to log after parse */ - JERRY_INIT_SHOW_REGEXP_OPCODES = (1u << 1), /**< dump regexp byte-code to log after compilation */ - JERRY_INIT_MEM_STATS = (1u << 2), /**< dump memory statistics */ - JERRY_INIT_MEM_STATS_SEPARATE = (1u << 3), /**< deprecated, an unused placeholder now */ - JERRY_INIT_DEBUGGER = (1u << 4), /**< deprecated, an unused placeholder now */ -} jerry_init_flag_t; - -/** - * JerryScript API Error object types. - */ -typedef enum -{ - JERRY_ERROR_NONE = 0, /**< No Error */ - - JERRY_ERROR_COMMON, /**< Error */ - JERRY_ERROR_EVAL, /**< EvalError */ - JERRY_ERROR_RANGE, /**< RangeError */ - JERRY_ERROR_REFERENCE, /**< ReferenceError */ - JERRY_ERROR_SYNTAX, /**< SyntaxError */ - JERRY_ERROR_TYPE, /**< TypeError */ - JERRY_ERROR_URI, /**< URIError */ - JERRY_ERROR_AGGREGATE /**< AggregateError */ -} jerry_error_t; - -/** - * JerryScript feature types. - */ -typedef enum -{ - JERRY_FEATURE_CPOINTER_32_BIT, /**< 32 bit compressed pointers */ - JERRY_FEATURE_ERROR_MESSAGES, /**< error messages */ - JERRY_FEATURE_JS_PARSER, /**< js-parser */ - JERRY_FEATURE_MEM_STATS, /**< memory statistics */ - JERRY_FEATURE_PARSER_DUMP, /**< parser byte-code dumps */ - JERRY_FEATURE_REGEXP_DUMP, /**< regexp byte-code dumps */ - JERRY_FEATURE_SNAPSHOT_SAVE, /**< saving snapshot files */ - JERRY_FEATURE_SNAPSHOT_EXEC, /**< executing snapshot files */ - JERRY_FEATURE_DEBUGGER, /**< debugging */ - JERRY_FEATURE_VM_EXEC_STOP, /**< stopping ECMAScript execution */ - JERRY_FEATURE_JSON, /**< JSON support */ - JERRY_FEATURE_PROMISE, /**< promise support */ - JERRY_FEATURE_TYPEDARRAY, /**< Typedarray support */ - JERRY_FEATURE_DATE, /**< Date support */ - JERRY_FEATURE_REGEXP, /**< Regexp support */ - JERRY_FEATURE_LINE_INFO, /**< line info available */ - JERRY_FEATURE_LOGGING, /**< logging */ - JERRY_FEATURE_SYMBOL, /**< symbol support */ - JERRY_FEATURE_DATAVIEW, /**< DataView support */ - JERRY_FEATURE_PROXY, /**< Proxy support */ - JERRY_FEATURE_MAP, /**< Map support */ - JERRY_FEATURE_SET, /**< Set support */ - JERRY_FEATURE_WEAKMAP, /**< WeakMap support */ - JERRY_FEATURE_WEAKSET, /**< WeakSet support */ - JERRY_FEATURE_BIGINT, /**< BigInt support */ - JERRY_FEATURE_REALM, /**< realm support */ - JERRY_FEATURE_GLOBAL_THIS, /**< GlobalThisValue support */ - JERRY_FEATURE_PROMISE_CALLBACK, /**< Promise callback support */ - JERRY_FEATURE_MODULE, /**< Module support */ - JERRY_FEATURE_WEAKREF, /**< WeakRef support */ - JERRY_FEATURE__COUNT /**< number of features. NOTE: must be at the end of the list */ -} jerry_feature_t; - -/** - * GC operational modes. - */ -typedef enum -{ - JERRY_GC_PRESSURE_LOW, /**< free unused objects, but keep memory - * allocated for performance improvements - * such as property hash tables for large objects */ - JERRY_GC_PRESSURE_HIGH /**< free as much memory as possible */ -} jerry_gc_mode_t; - -/** - * Jerry regexp flags. - */ -typedef enum -{ - JERRY_REGEXP_FLAG_GLOBAL = (1u << 1), /**< Globally scan string */ - JERRY_REGEXP_FLAG_IGNORE_CASE = (1u << 2), /**< Ignore case */ - JERRY_REGEXP_FLAG_MULTILINE = (1u << 3), /**< Multiline string scan */ - JERRY_REGEXP_FLAG_STICKY = (1u << 4), /**< ECMAScript v11, 21.2.5.14 */ - JERRY_REGEXP_FLAG_UNICODE = (1u << 5), /**< ECMAScript v11, 21.2.5.17 */ - JERRY_REGEXP_FLAG_DOTALL = (1u << 6) /**< ECMAScript v11, 21.2.5.3 */ -} jerry_regexp_flags_t; - -/** - * Character type of JerryScript. - */ -typedef uint8_t jerry_char_t; - -/** - * Size type of JerryScript. - */ -typedef uint32_t jerry_size_t; - -/** - * Length type of JerryScript. - */ -typedef uint32_t jerry_length_t; - -/** - * Description of a JerryScript value. - */ -typedef uint32_t jerry_value_t; - -/** - * Option bits for jerry_parse_options_t. - */ -typedef enum -{ - JERRY_PARSE_NO_OPTS = 0, /**< no options passed */ - JERRY_PARSE_STRICT_MODE = (1 << 0), /**< enable strict mode */ - JERRY_PARSE_MODULE = (1 << 1), /**< parse source as an ECMAScript module */ - JERRY_PARSE_HAS_RESOURCE = (1 << 2), /**< resource_name_p and resource_name_length fields are valid */ - JERRY_PARSE_HAS_START = (1 << 3), /**< start_line and start_column fields are valid */ -} jerry_parse_option_enable_feature_t; - -/** - * Various configuration options for parsing functions such as jerry_parse or jerry_parse_function. - */ -typedef struct -{ - uint32_t options; /**< combination of jerry_parse_option_enable_feature_t values */ - const jerry_char_t *resource_name_p; /**< resource name (usually a file name) - * if JERRY_PARSE_HAS_RESOURCE is set in options */ - size_t resource_name_length; /**< length of resource name - * if JERRY_PARSE_HAS_RESOURCE is set in options */ - uint32_t start_line; /**< start line of the source code if JERRY_PARSE_HAS_START is set in options */ - uint32_t start_column; /**< start column of the source code if JERRY_PARSE_HAS_START is set in options */ -} jerry_parse_options_t; - -/** - * Description of ECMA property descriptor. - */ -typedef enum -{ - JERRY_PROP_NO_OPTS = (0), /** empty property descriptor */ - JERRY_PROP_IS_CONFIGURABLE = (1 << 0), /** [[Configurable]] */ - JERRY_PROP_IS_ENUMERABLE = (1 << 1), /** [[Enumerable]] */ - JERRY_PROP_IS_WRITABLE = (1 << 2), /** [[Writable]] */ - - JERRY_PROP_IS_CONFIGURABLE_DEFINED = (1 << 3), /** is [[Configurable]] defined? */ - JERRY_PROP_IS_ENUMERABLE_DEFINED = (1 << 4), /** is [[Enumerable]] defined? */ - JERRY_PROP_IS_WRITABLE_DEFINED = (1 << 5), /** is [[Writable]] defined? */ - - JERRY_PROP_IS_VALUE_DEFINED = (1 << 6), /** is [[Value]] defined? */ - JERRY_PROP_IS_GET_DEFINED = (1 << 7), /** is [[Get]] defined? */ - JERRY_PROP_IS_SET_DEFINED = (1 << 8), /** is [[Set]] defined? */ - - JERRY_PROP_SHOULD_THROW = (1 << 9), /** should throw on error, instead of returning with false */ -} jerry_property_descriptor_flags_t; - -/** - * Description of ECMA property descriptor. - */ -typedef struct -{ - /** any combination of jerry_property_descriptor_flags_t bits */ - uint16_t flags; - - /** [[Value]] */ - jerry_value_t value; - - /** [[Get]] */ - jerry_value_t getter; - - /** [[Set]] */ - jerry_value_t setter; -} jerry_property_descriptor_t; - -/** - * List of backtrace frame types returned by jerry_backtrace_get_frame_type. - */ -typedef enum -{ - JERRY_BACKTRACE_FRAME_JS, /**< indicates that the frame is created for a JavaScript function/method */ -} jerry_backtrace_frame_types_t; - -/** - * Location info retreived by jerry_backtrace_get_location. - */ -typedef struct -{ - jerry_value_t resource_name; /**< resource name */ - jerry_size_t line; /**< line index */ - jerry_size_t column; /**< column index */ -} jerry_backtrace_location_t; - -/** - * Internal data structure for jerry_backtrace_frame_t definition. - */ -struct jerry_backtrace_frame_internal_t; - -/** - * Backtrace frame data passed to the jerry_backtrace_callback_t handler. - */ -typedef struct jerry_backtrace_frame_internal_t jerry_backtrace_frame_t; - -/** - * Description of JerryScript heap memory stats. - * It is for memory profiling. - */ -typedef struct -{ - size_t version; /**< the version of the stats struct */ - size_t size; /**< heap total size */ - size_t allocated_bytes; /**< currently allocated bytes */ - size_t peak_allocated_bytes; /**< peak allocated bytes */ - size_t reserved[4]; /**< padding for future extensions */ -} jerry_heap_stats_t; - -/** - * Call related information passed to jerry_external_handler_t. - */ -typedef struct jerry_call_info_t -{ - jerry_value_t function; /**< invoked function object */ - jerry_value_t this_value; /**< this value passed to the function */ - jerry_value_t new_target; /**< current new target value, undefined for non-constructor calls */ -} jerry_call_info_t; - -/** - * Type of an external function handler. - */ -typedef jerry_value_t (*jerry_external_handler_t) (const jerry_call_info_t *call_info_p, - const jerry_value_t args_p[], - const jerry_length_t args_count); - -/** - * Native free callback of an object. - */ -typedef void (*jerry_object_native_free_callback_t) (void *native_p); - -/** - * Decorator callback for Error objects. The decorator can create - * or update any properties of the newly created Error object. - */ -typedef void (*jerry_error_object_created_callback_t) (const jerry_value_t error_object, void *user_p); - -/** - * Callback function which is called by jerry_backtrace_capture for each stack frame. - */ -typedef bool (*jerry_backtrace_callback_t) (jerry_backtrace_frame_t *frame_p, void *user_p); - -/** - * Callback which tells whether the ECMAScript execution should be stopped. - * - * As long as the function returns with undefined the execution continues. - * When a non-undefined value is returned the execution stops and the value - * is thrown by the engine (if the error flag is not set for the returned - * value the engine automatically sets it). - * - * Note: if the function returns with a non-undefined value it - * must return with the same value for future calls. - */ -typedef jerry_value_t (*jerry_vm_exec_stop_callback_t) (void *user_p); - -/** - * Function type applied for each data property of an object. - */ -typedef bool (*jerry_object_property_foreach_t) (const jerry_value_t property_name, - const jerry_value_t property_value, - void *user_data_p); -/** - * Function type applied for each object in the engine. - */ -typedef bool (*jerry_objects_foreach_t) (const jerry_value_t object, - void *user_data_p); - -/** - * Function type applied for each matching object in the engine. - */ -typedef bool (*jerry_objects_foreach_by_native_info_t) (const jerry_value_t object, - void *object_data_p, - void *user_data_p); - -/** - * User context item manager - */ -typedef struct -{ - /** - * Callback responsible for initializing a context item, or NULL to zero out the memory. This is called lazily, the - * first time jerry_get_context_data () is called with this manager. - * - * @param [in] data The buffer that JerryScript allocated for the manager. The buffer is zeroed out. The size is - * determined by the bytes_needed field. The buffer is kept alive until jerry_cleanup () is called. - */ - void (*init_cb) (void *data); - - /** - * Callback responsible for deinitializing a context item, or NULL. This is called as part of jerry_cleanup (), - * right *before* the VM has been cleaned up. This is a good place to release strong references to jerry_value_t's - * that the manager may be holding. - * Note: because the VM has not been fully cleaned up yet, jerry_object_native_info_t free_cb's can still get called - * *after* all deinit_cb's have been run. See finalize_cb for a callback that is guaranteed to run *after* all - * free_cb's have been run. - * - * @param [in] data The buffer that JerryScript allocated for the manager. - */ - void (*deinit_cb) (void *data); - - /** - * Callback responsible for finalizing a context item, or NULL. This is called as part of jerry_cleanup (), - * right *after* the VM has been cleaned up and destroyed and jerry_... APIs cannot be called any more. At this point, - * all values in the VM have been cleaned up. This is a good place to clean up native state that can only be cleaned - * up at the very end when there are no more VM values around that may need to access that state. - * - * @param [in] data The buffer that JerryScript allocated for the manager. After returning from this callback, - * the data pointer may no longer be used. - */ - void (*finalize_cb) (void *data); - - /** - * Number of bytes to allocate for this manager. This is the size of the buffer that JerryScript will allocate on - * behalf of the manager. The pointer to this buffer is passed into init_cb, deinit_cb and finalize_cb. It is also - * returned from the jerry_get_context_data () API. - */ - size_t bytes_needed; -} jerry_context_data_manager_t; - -/** - * Function type for allocating buffer for JerryScript context. - */ -typedef void *(*jerry_context_alloc_t) (size_t size, void *cb_data_p); - -/** - * Type information of a native pointer. - */ -typedef struct -{ - jerry_object_native_free_callback_t free_cb; /**< the free callback of the native pointer */ -} jerry_object_native_info_t; - -/** - * An opaque declaration of the JerryScript context structure. - */ -typedef struct jerry_context_t jerry_context_t; - -/** - * Enum that contains the supported binary operation types - */ -typedef enum -{ - JERRY_BIN_OP_EQUAL = 0u, /**< equal comparison (==) */ - JERRY_BIN_OP_STRICT_EQUAL, /**< strict equal comparison (===) */ - JERRY_BIN_OP_LESS, /**< less relation (<) */ - JERRY_BIN_OP_LESS_EQUAL, /**< less or equal relation (<=) */ - JERRY_BIN_OP_GREATER, /**< greater relation (>) */ - JERRY_BIN_OP_GREATER_EQUAL, /**< greater or equal relation (>=)*/ - JERRY_BIN_OP_INSTANCEOF, /**< instanceof operation */ - JERRY_BIN_OP_ADD, /**< addition operator (+) */ - JERRY_BIN_OP_SUB, /**< subtraction operator (-) */ - JERRY_BIN_OP_MUL, /**< multiplication operator (*) */ - JERRY_BIN_OP_DIV, /**< division operator (/) */ - JERRY_BIN_OP_REM, /**< remainder operator (%) */ -} jerry_binary_operation_t; - /** * General engine functions. */ @@ -463,113 +79,6 @@ bool jerry_value_is_symbol (const jerry_value_t value); bool jerry_value_is_bigint (const jerry_value_t value); bool jerry_value_is_undefined (const jerry_value_t value); -/** - * JerryScript API value type information. - */ -typedef enum -{ - JERRY_TYPE_NONE = 0u, /**< no type information */ - JERRY_TYPE_UNDEFINED, /**< undefined type */ - JERRY_TYPE_NULL, /**< null type */ - JERRY_TYPE_BOOLEAN, /**< boolean type */ - JERRY_TYPE_NUMBER, /**< number type */ - JERRY_TYPE_STRING, /**< string type */ - JERRY_TYPE_OBJECT, /**< object type */ - JERRY_TYPE_FUNCTION, /**< function type */ - JERRY_TYPE_ERROR, /**< error/abort type */ - JERRY_TYPE_SYMBOL, /**< symbol type */ - JERRY_TYPE_BIGINT, /**< bigint type */ -} jerry_type_t; - -/** - * JerryScript object type information. - */ -typedef enum -{ - JERRY_OBJECT_TYPE_NONE = 0u, /**< Non object type */ - JERRY_OBJECT_TYPE_GENERIC, /**< Generic JavaScript object without any internal property */ - JERRY_OBJECT_TYPE_ARRAY, /**< Array object */ - JERRY_OBJECT_TYPE_PROXY, /**< Proxy object */ - JERRY_OBJECT_TYPE_SCRIPT, /**< Script object (see jerry_parse) */ - JERRY_OBJECT_TYPE_MODULE, /**< Module object (see jerry_parse) */ - JERRY_OBJECT_TYPE_FUNCTION, /**< Function object (see jerry_function_get_type) */ - JERRY_OBJECT_TYPE_TYPEDARRAY, /**< %TypedArray% object (see jerry_get_typedarray_type) */ - JERRY_OBJECT_TYPE_ITERATOR, /**< Iterator object (see jerry_iterator_get_type) */ - JERRY_OBJECT_TYPE_CONTAINER, /**< Container object (see jerry_container_get_type) */ - - JERRY_OBJECT_TYPE_ARGUMENTS, /**< Arguments object */ - JERRY_OBJECT_TYPE_BOOLEAN, /**< Boolean object */ - JERRY_OBJECT_TYPE_DATE, /**< Date object */ - JERRY_OBJECT_TYPE_NUMBER, /**< Number object */ - JERRY_OBJECT_TYPE_REGEXP, /**< RegExp object */ - JERRY_OBJECT_TYPE_STRING, /**< String object */ - JERRY_OBJECT_TYPE_SYMBOL, /**< Symbol object */ - JERRY_OBJECT_TYPE_GENERATOR, /**< Generator object */ - JERRY_OBJECT_TYPE_BIGINT, /**< BigInt object */ - JERRY_OBJECT_TYPE_WEAKREF, /**< WeakRef object */ -} jerry_object_type_t; - -/** - * JerryScript function object type information. - */ -typedef enum -{ - JERRY_FUNCTION_TYPE_NONE = 0u, /**< Non function type */ - JERRY_FUNCTION_TYPE_GENERIC, /**< Generic JavaScript function */ - JERRY_FUNCTION_TYPE_ACCESSOR, /**< Accessor function */ - JERRY_FUNCTION_TYPE_BOUND, /**< Bound function */ - JERRY_FUNCTION_TYPE_ARROW, /**< Arrow fuction */ - JERRY_FUNCTION_TYPE_GENERATOR, /**< Generator function */ -} jerry_function_type_t; - -/** - * JerryScript iterator object type information. - */ -typedef enum -{ - JERRY_ITERATOR_TYPE_NONE = 0u, /**< Non iterator type */ - JERRY_ITERATOR_TYPE_ARRAY, /**< Array iterator */ - JERRY_ITERATOR_TYPE_STRING, /**< String iterator */ - JERRY_ITERATOR_TYPE_MAP, /**< Map iterator */ - JERRY_ITERATOR_TYPE_SET, /**< Set iterator */ -} jerry_iterator_type_t; - -/** - * JerryScript special Proxy object options. - */ -typedef enum -{ - JERRY_PROXY_SKIP_RESULT_VALIDATION = (1u << 0), /**< skip result validation for [[GetPrototypeOf]], - * [[SetPrototypeOf]], [[IsExtensible]], - * [[PreventExtensions]], [[GetOwnProperty]], - * [[DefineOwnProperty]], [[HasProperty]], [[Get]], - * [[Set]], [[Delete]] and [[OwnPropertyKeys]] */ -} jerry_proxy_object_options_t; - -/** - * JerryScript object property filter options. - */ -typedef enum -{ - JERRY_PROPERTY_FILTER_ALL = 0, /**< List all property keys independently - * from key type or property value attributes - * (equivalent to Reflect.ownKeys call) */ - JERRY_PROPERTY_FILTER_TRAVERSE_PROTOTYPE_CHAIN = (1 << 0), /**< Include keys from the objects's - * prototype chain as well */ - JERRY_PROPERTY_FILTER_EXLCUDE_NON_CONFIGURABLE = (1 << 1), /**< Exclude property key if - * the property is non-configurable */ - JERRY_PROPERTY_FILTER_EXLCUDE_NON_ENUMERABLE = (1 << 2), /**< Exclude property key if - * the property is non-enumerable */ - JERRY_PROPERTY_FILTER_EXLCUDE_NON_WRITABLE = (1 << 3), /**< Exclude property key if - * the property is non-writable */ - JERRY_PROPERTY_FILTER_EXLCUDE_STRINGS = (1 << 4), /**< Exclude property key if it is a string */ - JERRY_PROPERTY_FILTER_EXLCUDE_SYMBOLS = (1 << 5), /**< Exclude property key if it is a symbol */ - JERRY_PROPERTY_FILTER_EXLCUDE_INTEGER_INDICES = (1 << 6), /**< Exclude property key if it is an integer index */ - JERRY_PROPERTY_FILTER_INTEGER_INDICES_AS_NUMBER = (1 << 7), /**< By default integer index property keys are - * converted to string. Enabling this flags keeps - * integer index property keys as numbers. */ -} jerry_property_filter_t; - jerry_type_t jerry_value_get_type (const jerry_value_t value); jerry_object_type_t jerry_object_get_type (const jerry_value_t value); jerry_function_type_t jerry_function_get_type (const jerry_value_t value); @@ -758,106 +267,9 @@ jerry_value_t jerry_to_property_descriptor (jerry_value_t obj_value, jerry_prope jerry_value_t jerry_resolve_or_reject_promise (jerry_value_t promise, jerry_value_t argument, bool is_resolve); -/** - * Enum values representing various Promise states. - */ -typedef enum -{ - JERRY_PROMISE_STATE_NONE = 0u, /**< Invalid/Unknown state (possibly called on a non-promise object). */ - JERRY_PROMISE_STATE_PENDING, /**< Promise is in "Pending" state. */ - JERRY_PROMISE_STATE_FULFILLED, /**< Promise is in "Fulfilled" state. */ - JERRY_PROMISE_STATE_REJECTED, /**< Promise is in "Rejected" state. */ -} jerry_promise_state_t; - jerry_value_t jerry_get_promise_result (const jerry_value_t promise); jerry_promise_state_t jerry_get_promise_state (const jerry_value_t promise); -/** - * Event types for jerry_promise_callback_t callback function. - * The description of the 'object' and 'value' arguments are provided for each type. - */ -typedef enum -{ - JERRY_PROMISE_EVENT_CREATE = 0u, /**< a new Promise object is created - * object: the new Promise object - * value: parent Promise for `then` chains, undefined otherwise */ - JERRY_PROMISE_EVENT_RESOLVE, /**< called when a Promise is about to be resolved - * object: the Promise object - * value: value for resolving */ - JERRY_PROMISE_EVENT_REJECT, /**< called when a Promise is about to be rejected - * object: the Promise object - * value: value for rejecting */ - JERRY_PROMISE_EVENT_RESOLVE_FULFILLED, /**< called when a resolve is called on a fulfilled Promise - * object: the Promise object - * value: value for resolving */ - JERRY_PROMISE_EVENT_REJECT_FULFILLED, /**< called when a reject is called on a fulfilled Promise - * object: the Promise object - * value: value for rejecting */ - JERRY_PROMISE_EVENT_REJECT_WITHOUT_HANDLER, /**< called when a Promise is rejected without a handler - * object: the Promise object - * value: value for rejecting */ - JERRY_PROMISE_EVENT_CATCH_HANDLER_ADDED, /**< called when a catch handler is added to a rejected - * Promise which did not have a catch handler before - * object: the Promise object - * value: undefined */ - JERRY_PROMISE_EVENT_BEFORE_REACTION_JOB, /**< called before executing a Promise reaction job - * object: the Promise object - * value: undefined */ - JERRY_PROMISE_EVENT_AFTER_REACTION_JOB, /**< called after a Promise reaction job is completed - * object: the Promise object - * value: undefined */ - JERRY_PROMISE_EVENT_ASYNC_AWAIT, /**< called when an async function awaits the result of a Promise object - * object: internal object representing the execution status - * value: the Promise object */ - JERRY_PROMISE_EVENT_ASYNC_BEFORE_RESOLVE, /**< called when an async function is continued with resolve - * object: internal object representing the execution status - * value: value for resolving */ - JERRY_PROMISE_EVENT_ASYNC_BEFORE_REJECT, /**< called when an async function is continued with reject - * object: internal object representing the execution status - * value: value for rejecting */ - JERRY_PROMISE_EVENT_ASYNC_AFTER_RESOLVE, /**< called when an async function resolve is completed - * object: internal object representing the execution status - * value: value for resolving */ - JERRY_PROMISE_EVENT_ASYNC_AFTER_REJECT, /**< called when an async function reject is completed - * object: internal object representing the execution status - * value: value for rejecting */ -} jerry_promise_event_type_t; - -/** - * Filter types for jerry_promise_set_callback callback function. - * The callback is only called for those events which are enabled by the filters. - */ -typedef enum -{ - JERRY_PROMISE_EVENT_FILTER_DISABLE = 0, /**< disable reporting of all events */ - JERRY_PROMISE_EVENT_FILTER_MAIN = (1 << 0), /**< enables the following events: - * JERRY_PROMISE_EVENT_CREATE - * JERRY_PROMISE_EVENT_RESOLVE - * JERRY_PROMISE_EVENT_REJECT */ - JERRY_PROMISE_EVENT_FILTER_ERROR = (1 << 1), /**< enables the following events: - * JERRY_PROMISE_EVENT_RESOLVE_FULFILLED - * JERRY_PROMISE_EVENT_REJECT_FULFILLED - * JERRY_PROMISE_EVENT_REJECT_WITHOUT_HANDLER - * JERRY_PROMISE_EVENT_CATCH_HANDLER_ADDED */ - JERRY_PROMISE_EVENT_FILTER_REACTION_JOB = (1 << 2), /**< enables the following events: - * JERRY_PROMISE_EVENT_BEFORE_REACTION_JOB - * JERRY_PROMISE_EVENT_AFTER_REACTION_JOB */ - JERRY_PROMISE_EVENT_FILTER_ASYNC_MAIN = (1 << 3), /**< enables the following events: - * JERRY_PROMISE_EVENT_ASYNC_AWAIT */ - JERRY_PROMISE_EVENT_FILTER_ASYNC_REACTION_JOB = (1 << 4), /**< enables the following events: - * JERRY_PROMISE_EVENT_ASYNC_BEFORE_RESOLVE - * JERRY_PROMISE_EVENT_ASYNC_BEFORE_REJECT - * JERRY_PROMISE_EVENT_ASYNC_AFTER_RESOLVE - * JERRY_PROMISE_EVENT_ASYNC_AFTER_REJECT */ -} jerry_promise_event_filter_t; - -/** - * Notification callback for tracking Promise and async function operations. - */ -typedef void (*jerry_promise_callback_t) (jerry_promise_event_type_t event_type, - const jerry_value_t object, const jerry_value_t value, - void *user_p); - void jerry_promise_set_callback (jerry_promise_event_filter_t filters, jerry_promise_callback_t callback, void *user_p); @@ -865,26 +277,6 @@ void jerry_promise_set_callback (jerry_promise_event_filter_t filters, jerry_pro * Symbol functions. */ -/** - * List of well-known symbols. - */ -typedef enum -{ - JERRY_SYMBOL_ASYNC_ITERATOR, /**< @@asyncIterator well-known symbol */ - JERRY_SYMBOL_HAS_INSTANCE, /**< @@hasInstance well-known symbol */ - JERRY_SYMBOL_IS_CONCAT_SPREADABLE, /**< @@isConcatSpreadable well-known symbol */ - JERRY_SYMBOL_ITERATOR, /**< @@iterator well-known symbol */ - JERRY_SYMBOL_MATCH, /**< @@match well-known symbol */ - JERRY_SYMBOL_REPLACE, /**< @@replace well-known symbol */ - JERRY_SYMBOL_SEARCH, /**< @@search well-known symbol */ - JERRY_SYMBOL_SPECIES, /**< @@species well-known symbol */ - JERRY_SYMBOL_SPLIT, /**< @@split well-known symbol */ - JERRY_SYMBOL_TO_PRIMITIVE, /**< @@toPrimitive well-known symbol */ - JERRY_SYMBOL_TO_STRING_TAG, /**< @@toStringTag well-known symbol */ - JERRY_SYMBOL_UNSCOPABLES, /**< @@unscopables well-known symbol */ - JERRY_SYMBOL_MATCH_ALL, /**< @@matchAll well-known symbol */ -} jerry_well_known_symbol_t; - jerry_value_t jerry_get_well_known_symbol (jerry_well_known_symbol_t symbol); jerry_value_t jerry_get_symbol_description (const jerry_value_t symbol); jerry_value_t jerry_get_symbol_descriptive_string (const jerry_value_t symbol); @@ -981,37 +373,6 @@ jerry_get_dataview_buffer (const jerry_value_t dataview, * TypedArray functions. */ -/** - * TypedArray types. - */ -typedef enum -{ - JERRY_TYPEDARRAY_INVALID = 0, - JERRY_TYPEDARRAY_UINT8, - JERRY_TYPEDARRAY_UINT8CLAMPED, - JERRY_TYPEDARRAY_INT8, - JERRY_TYPEDARRAY_UINT16, - JERRY_TYPEDARRAY_INT16, - JERRY_TYPEDARRAY_UINT32, - JERRY_TYPEDARRAY_INT32, - JERRY_TYPEDARRAY_FLOAT32, - JERRY_TYPEDARRAY_FLOAT64, - JERRY_TYPEDARRAY_BIGINT64, - JERRY_TYPEDARRAY_BIGUINT64, -} jerry_typedarray_type_t; - -/** - * Container types. - */ -typedef enum -{ - JERRY_CONTAINER_TYPE_INVALID = 0, /**< Invalid container */ - JERRY_CONTAINER_TYPE_MAP, /**< Map type */ - JERRY_CONTAINER_TYPE_SET, /**< Set type */ - JERRY_CONTAINER_TYPE_WEAKMAP, /**< WeakMap type */ - JERRY_CONTAINER_TYPE_WEAKSET, /**< WeakSet type */ -} jerry_container_type_t; - bool jerry_value_is_typedarray (jerry_value_t value); jerry_value_t jerry_create_typedarray (jerry_typedarray_type_t type_name, jerry_length_t length); jerry_value_t jerry_create_typedarray_for_arraybuffer_sz (jerry_typedarray_type_t type_name, diff --git a/jerry-core/include/jerryscript-debugger.h b/jerry-core/include/jerryscript-debugger.h index 759bd4e8f..c876e83dc 100644 --- a/jerry-core/include/jerryscript-debugger.h +++ b/jerry-core/include/jerryscript-debugger.h @@ -16,7 +16,6 @@ #ifndef JERRYSCRIPT_DEBUGGER_H #define JERRYSCRIPT_DEBUGGER_H -#include "jerryscript-core.h" #include "jerryscript-port.h" #ifdef __cplusplus diff --git a/jerry-core/include/jerryscript-port.h b/jerry-core/include/jerryscript-port.h index 8ac4414aa..99b97d4fe 100644 --- a/jerry-core/include/jerryscript-port.h +++ b/jerry-core/include/jerryscript-port.h @@ -20,8 +20,7 @@ #include #include -#include "jerryscript-compiler.h" -#include "jerryscript-core.h" +#include "jerryscript-types.h" #ifdef __cplusplus extern "C" diff --git a/jerry-core/include/jerryscript-snapshot.h b/jerry-core/include/jerryscript-snapshot.h index 2e4f92307..5f3cf4ecc 100644 --- a/jerry-core/include/jerryscript-snapshot.h +++ b/jerry-core/include/jerryscript-snapshot.h @@ -16,7 +16,7 @@ #ifndef JERRYSCRIPT_SNAPSHOT_H #define JERRYSCRIPT_SNAPSHOT_H -#include "jerryscript-core.h" +#include "jerryscript-types.h" #ifdef __cplusplus extern "C" diff --git a/jerry-core/include/jerryscript-types.h b/jerry-core/include/jerryscript-types.h new file mode 100644 index 000000000..53a6f28e0 --- /dev/null +++ b/jerry-core/include/jerryscript-types.h @@ -0,0 +1,700 @@ +/* Copyright JS Foundation and other contributors, http://js.foundation + * + * 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 JERRYSCRIPT_TYPES_H +#define JERRYSCRIPT_TYPES_H + +#include +#include +#include + +#include "jerryscript-compiler.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/** \addtogroup jerry Jerry engine interface + * @{ + */ + +/** + * Major version of JerryScript API. + */ +#define JERRY_API_MAJOR_VERSION 3 + +/** + * Minor version of JerryScript API. + */ +#define JERRY_API_MINOR_VERSION 0 + +/** + * Patch version of JerryScript API. + */ +#define JERRY_API_PATCH_VERSION 0 + +/** + * JerryScript init flags. + */ +typedef enum +{ + JERRY_INIT_EMPTY = (0u), /**< empty flag set */ + JERRY_INIT_SHOW_OPCODES = (1u << 0), /**< dump byte-code to log after parse */ + JERRY_INIT_SHOW_REGEXP_OPCODES = (1u << 1), /**< dump regexp byte-code to log after compilation */ + JERRY_INIT_MEM_STATS = (1u << 2), /**< dump memory statistics */ + JERRY_INIT_MEM_STATS_SEPARATE = (1u << 3), /**< deprecated, an unused placeholder now */ + JERRY_INIT_DEBUGGER = (1u << 4), /**< deprecated, an unused placeholder now */ +} jerry_init_flag_t; + +/** + * JerryScript API Error object types. + */ +typedef enum +{ + JERRY_ERROR_NONE = 0, /**< No Error */ + + JERRY_ERROR_COMMON, /**< Error */ + JERRY_ERROR_EVAL, /**< EvalError */ + JERRY_ERROR_RANGE, /**< RangeError */ + JERRY_ERROR_REFERENCE, /**< ReferenceError */ + JERRY_ERROR_SYNTAX, /**< SyntaxError */ + JERRY_ERROR_TYPE, /**< TypeError */ + JERRY_ERROR_URI, /**< URIError */ + JERRY_ERROR_AGGREGATE /**< AggregateError */ +} jerry_error_t; + +/** + * JerryScript feature types. + */ +typedef enum +{ + JERRY_FEATURE_CPOINTER_32_BIT, /**< 32 bit compressed pointers */ + JERRY_FEATURE_ERROR_MESSAGES, /**< error messages */ + JERRY_FEATURE_JS_PARSER, /**< js-parser */ + JERRY_FEATURE_MEM_STATS, /**< memory statistics */ + JERRY_FEATURE_PARSER_DUMP, /**< parser byte-code dumps */ + JERRY_FEATURE_REGEXP_DUMP, /**< regexp byte-code dumps */ + JERRY_FEATURE_SNAPSHOT_SAVE, /**< saving snapshot files */ + JERRY_FEATURE_SNAPSHOT_EXEC, /**< executing snapshot files */ + JERRY_FEATURE_DEBUGGER, /**< debugging */ + JERRY_FEATURE_VM_EXEC_STOP, /**< stopping ECMAScript execution */ + JERRY_FEATURE_JSON, /**< JSON support */ + JERRY_FEATURE_PROMISE, /**< promise support */ + JERRY_FEATURE_TYPEDARRAY, /**< Typedarray support */ + JERRY_FEATURE_DATE, /**< Date support */ + JERRY_FEATURE_REGEXP, /**< Regexp support */ + JERRY_FEATURE_LINE_INFO, /**< line info available */ + JERRY_FEATURE_LOGGING, /**< logging */ + JERRY_FEATURE_SYMBOL, /**< symbol support */ + JERRY_FEATURE_DATAVIEW, /**< DataView support */ + JERRY_FEATURE_PROXY, /**< Proxy support */ + JERRY_FEATURE_MAP, /**< Map support */ + JERRY_FEATURE_SET, /**< Set support */ + JERRY_FEATURE_WEAKMAP, /**< WeakMap support */ + JERRY_FEATURE_WEAKSET, /**< WeakSet support */ + JERRY_FEATURE_BIGINT, /**< BigInt support */ + JERRY_FEATURE_REALM, /**< realm support */ + JERRY_FEATURE_GLOBAL_THIS, /**< GlobalThisValue support */ + JERRY_FEATURE_PROMISE_CALLBACK, /**< Promise callback support */ + JERRY_FEATURE_MODULE, /**< Module support */ + JERRY_FEATURE_WEAKREF, /**< WeakRef support */ + JERRY_FEATURE__COUNT /**< number of features. NOTE: must be at the end of the list */ +} jerry_feature_t; + +/** + * GC operational modes. + */ +typedef enum +{ + JERRY_GC_PRESSURE_LOW, /**< free unused objects, but keep memory + * allocated for performance improvements + * such as property hash tables for large objects */ + JERRY_GC_PRESSURE_HIGH /**< free as much memory as possible */ +} jerry_gc_mode_t; + +/** + * Jerry regexp flags. + */ +typedef enum +{ + JERRY_REGEXP_FLAG_GLOBAL = (1u << 1), /**< Globally scan string */ + JERRY_REGEXP_FLAG_IGNORE_CASE = (1u << 2), /**< Ignore case */ + JERRY_REGEXP_FLAG_MULTILINE = (1u << 3), /**< Multiline string scan */ + JERRY_REGEXP_FLAG_STICKY = (1u << 4), /**< ECMAScript v11, 21.2.5.14 */ + JERRY_REGEXP_FLAG_UNICODE = (1u << 5), /**< ECMAScript v11, 21.2.5.17 */ + JERRY_REGEXP_FLAG_DOTALL = (1u << 6) /**< ECMAScript v11, 21.2.5.3 */ +} jerry_regexp_flags_t; + +/** + * Character type of JerryScript. + */ +typedef uint8_t jerry_char_t; + +/** + * Size type of JerryScript. + */ +typedef uint32_t jerry_size_t; + +/** + * Length type of JerryScript. + */ +typedef uint32_t jerry_length_t; + +/** + * Description of a JerryScript value. + */ +typedef uint32_t jerry_value_t; + +/** + * Option bits for jerry_parse_options_t. + */ +typedef enum +{ + JERRY_PARSE_NO_OPTS = 0, /**< no options passed */ + JERRY_PARSE_STRICT_MODE = (1 << 0), /**< enable strict mode */ + JERRY_PARSE_MODULE = (1 << 1), /**< parse source as an ECMAScript module */ + JERRY_PARSE_HAS_RESOURCE = (1 << 2), /**< resource_name_p and resource_name_length fields are valid */ + JERRY_PARSE_HAS_START = (1 << 3), /**< start_line and start_column fields are valid */ +} jerry_parse_option_enable_feature_t; + +/** + * Various configuration options for parsing functions such as jerry_parse or jerry_parse_function. + */ +typedef struct +{ + uint32_t options; /**< combination of jerry_parse_option_enable_feature_t values */ + const jerry_char_t *resource_name_p; /**< resource name (usually a file name) + * if JERRY_PARSE_HAS_RESOURCE is set in options */ + size_t resource_name_length; /**< length of resource name + * if JERRY_PARSE_HAS_RESOURCE is set in options */ + uint32_t start_line; /**< start line of the source code if JERRY_PARSE_HAS_START is set in options */ + uint32_t start_column; /**< start column of the source code if JERRY_PARSE_HAS_START is set in options */ +} jerry_parse_options_t; + +/** + * Description of ECMA property descriptor. + */ +typedef enum +{ + JERRY_PROP_NO_OPTS = (0), /** empty property descriptor */ + JERRY_PROP_IS_CONFIGURABLE = (1 << 0), /** [[Configurable]] */ + JERRY_PROP_IS_ENUMERABLE = (1 << 1), /** [[Enumerable]] */ + JERRY_PROP_IS_WRITABLE = (1 << 2), /** [[Writable]] */ + + JERRY_PROP_IS_CONFIGURABLE_DEFINED = (1 << 3), /** is [[Configurable]] defined? */ + JERRY_PROP_IS_ENUMERABLE_DEFINED = (1 << 4), /** is [[Enumerable]] defined? */ + JERRY_PROP_IS_WRITABLE_DEFINED = (1 << 5), /** is [[Writable]] defined? */ + + JERRY_PROP_IS_VALUE_DEFINED = (1 << 6), /** is [[Value]] defined? */ + JERRY_PROP_IS_GET_DEFINED = (1 << 7), /** is [[Get]] defined? */ + JERRY_PROP_IS_SET_DEFINED = (1 << 8), /** is [[Set]] defined? */ + + JERRY_PROP_SHOULD_THROW = (1 << 9), /** should throw on error, instead of returning with false */ +} jerry_property_descriptor_flags_t; + +/** + * Description of ECMA property descriptor. + */ +typedef struct +{ + /** any combination of jerry_property_descriptor_flags_t bits */ + uint16_t flags; + + /** [[Value]] */ + jerry_value_t value; + + /** [[Get]] */ + jerry_value_t getter; + + /** [[Set]] */ + jerry_value_t setter; +} jerry_property_descriptor_t; + +/** + * JerryScript object property filter options. + */ +typedef enum +{ + JERRY_PROPERTY_FILTER_ALL = 0, /**< List all property keys independently + * from key type or property value attributes + * (equivalent to Reflect.ownKeys call) */ + JERRY_PROPERTY_FILTER_TRAVERSE_PROTOTYPE_CHAIN = (1 << 0), /**< Include keys from the objects's + * prototype chain as well */ + JERRY_PROPERTY_FILTER_EXLCUDE_NON_CONFIGURABLE = (1 << 1), /**< Exclude property key if + * the property is non-configurable */ + JERRY_PROPERTY_FILTER_EXLCUDE_NON_ENUMERABLE = (1 << 2), /**< Exclude property key if + * the property is non-enumerable */ + JERRY_PROPERTY_FILTER_EXLCUDE_NON_WRITABLE = (1 << 3), /**< Exclude property key if + * the property is non-writable */ + JERRY_PROPERTY_FILTER_EXLCUDE_STRINGS = (1 << 4), /**< Exclude property key if it is a string */ + JERRY_PROPERTY_FILTER_EXLCUDE_SYMBOLS = (1 << 5), /**< Exclude property key if it is a symbol */ + JERRY_PROPERTY_FILTER_EXLCUDE_INTEGER_INDICES = (1 << 6), /**< Exclude property key if it is an integer index */ + JERRY_PROPERTY_FILTER_INTEGER_INDICES_AS_NUMBER = (1 << 7), /**< By default integer index property keys are + * converted to string. Enabling this flags keeps + * integer index property keys as numbers. */ +} jerry_property_filter_t; + +/** + * Description of JerryScript heap memory stats. + * It is for memory profiling. + */ +typedef struct +{ + size_t version; /**< the version of the stats struct */ + size_t size; /**< heap total size */ + size_t allocated_bytes; /**< currently allocated bytes */ + size_t peak_allocated_bytes; /**< peak allocated bytes */ + size_t reserved[4]; /**< padding for future extensions */ +} jerry_heap_stats_t; + +/** + * Call related information passed to jerry_external_handler_t. + */ +typedef struct jerry_call_info_t +{ + jerry_value_t function; /**< invoked function object */ + jerry_value_t this_value; /**< this value passed to the function */ + jerry_value_t new_target; /**< current new target value, undefined for non-constructor calls */ +} jerry_call_info_t; + +/** + * Type of an external function handler. + */ +typedef jerry_value_t (*jerry_external_handler_t) (const jerry_call_info_t *call_info_p, + const jerry_value_t args_p[], + const jerry_length_t args_count); + +/** + * Native free callback of an object. + */ +typedef void (*jerry_object_native_free_callback_t) (void *native_p); + +/** + * Decorator callback for Error objects. The decorator can create + * or update any properties of the newly created Error object. + */ +typedef void (*jerry_error_object_created_callback_t) (const jerry_value_t error_object, void *user_p); + +/** + * Callback which tells whether the ECMAScript execution should be stopped. + * + * As long as the function returns with undefined the execution continues. + * When a non-undefined value is returned the execution stops and the value + * is thrown by the engine (if the error flag is not set for the returned + * value the engine automatically sets it). + * + * Note: if the function returns with a non-undefined value it + * must return with the same value for future calls. + */ +typedef jerry_value_t (*jerry_vm_exec_stop_callback_t) (void *user_p); + +/** + * Function type applied for each data property of an object. + */ +typedef bool (*jerry_object_property_foreach_t) (const jerry_value_t property_name, + const jerry_value_t property_value, + void *user_data_p); +/** + * Function type applied for each object in the engine. + */ +typedef bool (*jerry_objects_foreach_t) (const jerry_value_t object, + void *user_data_p); + +/** + * Function type applied for each matching object in the engine. + */ +typedef bool (*jerry_objects_foreach_by_native_info_t) (const jerry_value_t object, + void *object_data_p, + void *user_data_p); + +/** + * User context item manager + */ +typedef struct +{ + /** + * Callback responsible for initializing a context item, or NULL to zero out the memory. This is called lazily, the + * first time jerry_get_context_data () is called with this manager. + * + * @param [in] data The buffer that JerryScript allocated for the manager. The buffer is zeroed out. The size is + * determined by the bytes_needed field. The buffer is kept alive until jerry_cleanup () is called. + */ + void (*init_cb) (void *data); + + /** + * Callback responsible for deinitializing a context item, or NULL. This is called as part of jerry_cleanup (), + * right *before* the VM has been cleaned up. This is a good place to release strong references to jerry_value_t's + * that the manager may be holding. + * Note: because the VM has not been fully cleaned up yet, jerry_object_native_info_t free_cb's can still get called + * *after* all deinit_cb's have been run. See finalize_cb for a callback that is guaranteed to run *after* all + * free_cb's have been run. + * + * @param [in] data The buffer that JerryScript allocated for the manager. + */ + void (*deinit_cb) (void *data); + + /** + * Callback responsible for finalizing a context item, or NULL. This is called as part of jerry_cleanup (), + * right *after* the VM has been cleaned up and destroyed and jerry_... APIs cannot be called any more. At this point, + * all values in the VM have been cleaned up. This is a good place to clean up native state that can only be cleaned + * up at the very end when there are no more VM values around that may need to access that state. + * + * @param [in] data The buffer that JerryScript allocated for the manager. After returning from this callback, + * the data pointer may no longer be used. + */ + void (*finalize_cb) (void *data); + + /** + * Number of bytes to allocate for this manager. This is the size of the buffer that JerryScript will allocate on + * behalf of the manager. The pointer to this buffer is passed into init_cb, deinit_cb and finalize_cb. It is also + * returned from the jerry_get_context_data () API. + */ + size_t bytes_needed; +} jerry_context_data_manager_t; + +/** + * Function type for allocating buffer for JerryScript context. + */ +typedef void *(*jerry_context_alloc_t) (size_t size, void *cb_data_p); + +/** + * Type information of a native pointer. + */ +typedef struct +{ + jerry_object_native_free_callback_t free_cb; /**< the free callback of the native pointer */ +} jerry_object_native_info_t; + +/** + * An opaque declaration of the JerryScript context structure. + */ +typedef struct jerry_context_t jerry_context_t; + +/** + * Enum that contains the supported binary operation types + */ +typedef enum +{ + JERRY_BIN_OP_EQUAL = 0u, /**< equal comparison (==) */ + JERRY_BIN_OP_STRICT_EQUAL, /**< strict equal comparison (===) */ + JERRY_BIN_OP_LESS, /**< less relation (<) */ + JERRY_BIN_OP_LESS_EQUAL, /**< less or equal relation (<=) */ + JERRY_BIN_OP_GREATER, /**< greater relation (>) */ + JERRY_BIN_OP_GREATER_EQUAL, /**< greater or equal relation (>=)*/ + JERRY_BIN_OP_INSTANCEOF, /**< instanceof operation */ + JERRY_BIN_OP_ADD, /**< addition operator (+) */ + JERRY_BIN_OP_SUB, /**< subtraction operator (-) */ + JERRY_BIN_OP_MUL, /**< multiplication operator (*) */ + JERRY_BIN_OP_DIV, /**< division operator (/) */ + JERRY_BIN_OP_REM, /**< remainder operator (%) */ +} jerry_binary_operation_t; + +/** + * Backtrace related types. + */ + +/** + * List of backtrace frame types returned by jerry_backtrace_get_frame_type. + */ +typedef enum +{ + JERRY_BACKTRACE_FRAME_JS, /**< indicates that the frame is created for a JavaScript function/method */ +} jerry_backtrace_frame_types_t; + +/** + * Location info retreived by jerry_backtrace_get_location. + */ +typedef struct +{ + jerry_value_t resource_name; /**< resource name */ + jerry_size_t line; /**< line index */ + jerry_size_t column; /**< column index */ +} jerry_backtrace_location_t; + +/** + * Internal data structure for jerry_backtrace_frame_t definition. + */ +struct jerry_backtrace_frame_internal_t; + +/** + * Backtrace frame data passed to the jerry_backtrace_callback_t handler. + */ +typedef struct jerry_backtrace_frame_internal_t jerry_backtrace_frame_t; + +/** + * Callback function which is called by jerry_backtrace_capture for each stack frame. + */ +typedef bool (*jerry_backtrace_callback_t) (jerry_backtrace_frame_t *frame_p, void *user_p); + +/** + * Detailed value type related types. + */ + +/** + * JerryScript API value type information. + */ +typedef enum +{ + JERRY_TYPE_NONE = 0u, /**< no type information */ + JERRY_TYPE_UNDEFINED, /**< undefined type */ + JERRY_TYPE_NULL, /**< null type */ + JERRY_TYPE_BOOLEAN, /**< boolean type */ + JERRY_TYPE_NUMBER, /**< number type */ + JERRY_TYPE_STRING, /**< string type */ + JERRY_TYPE_OBJECT, /**< object type */ + JERRY_TYPE_FUNCTION, /**< function type */ + JERRY_TYPE_ERROR, /**< error/abort type */ + JERRY_TYPE_SYMBOL, /**< symbol type */ + JERRY_TYPE_BIGINT, /**< bigint type */ +} jerry_type_t; + +/** + * JerryScript object type information. + */ +typedef enum +{ + JERRY_OBJECT_TYPE_NONE = 0u, /**< Non object type */ + JERRY_OBJECT_TYPE_GENERIC, /**< Generic JavaScript object without any internal property */ + JERRY_OBJECT_TYPE_ARRAY, /**< Array object */ + JERRY_OBJECT_TYPE_PROXY, /**< Proxy object */ + JERRY_OBJECT_TYPE_SCRIPT, /**< Script object (see jerry_parse) */ + JERRY_OBJECT_TYPE_MODULE, /**< Module object (see jerry_parse) */ + JERRY_OBJECT_TYPE_FUNCTION, /**< Function object (see jerry_function_get_type) */ + JERRY_OBJECT_TYPE_TYPEDARRAY, /**< %TypedArray% object (see jerry_get_typedarray_type) */ + JERRY_OBJECT_TYPE_ITERATOR, /**< Iterator object (see jerry_iterator_get_type) */ + JERRY_OBJECT_TYPE_CONTAINER, /**< Container object (see jerry_container_get_type) */ + + JERRY_OBJECT_TYPE_ARGUMENTS, /**< Arguments object */ + JERRY_OBJECT_TYPE_BOOLEAN, /**< Boolean object */ + JERRY_OBJECT_TYPE_DATE, /**< Date object */ + JERRY_OBJECT_TYPE_NUMBER, /**< Number object */ + JERRY_OBJECT_TYPE_REGEXP, /**< RegExp object */ + JERRY_OBJECT_TYPE_STRING, /**< String object */ + JERRY_OBJECT_TYPE_SYMBOL, /**< Symbol object */ + JERRY_OBJECT_TYPE_GENERATOR, /**< Generator object */ + JERRY_OBJECT_TYPE_BIGINT, /**< BigInt object */ + JERRY_OBJECT_TYPE_WEAKREF, /**< WeakRef object */ +} jerry_object_type_t; + +/** + * JerryScript function object type information. + */ +typedef enum +{ + JERRY_FUNCTION_TYPE_NONE = 0u, /**< Non function type */ + JERRY_FUNCTION_TYPE_GENERIC, /**< Generic JavaScript function */ + JERRY_FUNCTION_TYPE_ACCESSOR, /**< Accessor function */ + JERRY_FUNCTION_TYPE_BOUND, /**< Bound function */ + JERRY_FUNCTION_TYPE_ARROW, /**< Arrow fuction */ + JERRY_FUNCTION_TYPE_GENERATOR, /**< Generator function */ +} jerry_function_type_t; + +/** + * JerryScript iterator object type information. + */ +typedef enum +{ + JERRY_ITERATOR_TYPE_NONE = 0u, /**< Non iterator type */ + JERRY_ITERATOR_TYPE_ARRAY, /**< Array iterator */ + JERRY_ITERATOR_TYPE_STRING, /**< String iterator */ + JERRY_ITERATOR_TYPE_MAP, /**< Map iterator */ + JERRY_ITERATOR_TYPE_SET, /**< Set iterator */ +} jerry_iterator_type_t; + +/** + * Proxy related types. + */ + +/** + * JerryScript special Proxy object options. + */ +typedef enum +{ + JERRY_PROXY_SKIP_RESULT_VALIDATION = (1u << 0), /**< skip result validation for [[GetPrototypeOf]], + * [[SetPrototypeOf]], [[IsExtensible]], + * [[PreventExtensions]], [[GetOwnProperty]], + * [[DefineOwnProperty]], [[HasProperty]], [[Get]], + * [[Set]], [[Delete]] and [[OwnPropertyKeys]] */ +} jerry_proxy_object_options_t; + +/** + * Promise related types. + */ + +/** + * Enum values representing various Promise states. + */ +typedef enum +{ + JERRY_PROMISE_STATE_NONE = 0u, /**< Invalid/Unknown state (possibly called on a non-promise object). */ + JERRY_PROMISE_STATE_PENDING, /**< Promise is in "Pending" state. */ + JERRY_PROMISE_STATE_FULFILLED, /**< Promise is in "Fulfilled" state. */ + JERRY_PROMISE_STATE_REJECTED, /**< Promise is in "Rejected" state. */ +} jerry_promise_state_t; + +/** + * Event types for jerry_promise_callback_t callback function. + * The description of the 'object' and 'value' arguments are provided for each type. + */ +typedef enum +{ + JERRY_PROMISE_EVENT_CREATE = 0u, /**< a new Promise object is created + * object: the new Promise object + * value: parent Promise for `then` chains, undefined otherwise */ + JERRY_PROMISE_EVENT_RESOLVE, /**< called when a Promise is about to be resolved + * object: the Promise object + * value: value for resolving */ + JERRY_PROMISE_EVENT_REJECT, /**< called when a Promise is about to be rejected + * object: the Promise object + * value: value for rejecting */ + JERRY_PROMISE_EVENT_RESOLVE_FULFILLED, /**< called when a resolve is called on a fulfilled Promise + * object: the Promise object + * value: value for resolving */ + JERRY_PROMISE_EVENT_REJECT_FULFILLED, /**< called when a reject is called on a fulfilled Promise + * object: the Promise object + * value: value for rejecting */ + JERRY_PROMISE_EVENT_REJECT_WITHOUT_HANDLER, /**< called when a Promise is rejected without a handler + * object: the Promise object + * value: value for rejecting */ + JERRY_PROMISE_EVENT_CATCH_HANDLER_ADDED, /**< called when a catch handler is added to a rejected + * Promise which did not have a catch handler before + * object: the Promise object + * value: undefined */ + JERRY_PROMISE_EVENT_BEFORE_REACTION_JOB, /**< called before executing a Promise reaction job + * object: the Promise object + * value: undefined */ + JERRY_PROMISE_EVENT_AFTER_REACTION_JOB, /**< called after a Promise reaction job is completed + * object: the Promise object + * value: undefined */ + JERRY_PROMISE_EVENT_ASYNC_AWAIT, /**< called when an async function awaits the result of a Promise object + * object: internal object representing the execution status + * value: the Promise object */ + JERRY_PROMISE_EVENT_ASYNC_BEFORE_RESOLVE, /**< called when an async function is continued with resolve + * object: internal object representing the execution status + * value: value for resolving */ + JERRY_PROMISE_EVENT_ASYNC_BEFORE_REJECT, /**< called when an async function is continued with reject + * object: internal object representing the execution status + * value: value for rejecting */ + JERRY_PROMISE_EVENT_ASYNC_AFTER_RESOLVE, /**< called when an async function resolve is completed + * object: internal object representing the execution status + * value: value for resolving */ + JERRY_PROMISE_EVENT_ASYNC_AFTER_REJECT, /**< called when an async function reject is completed + * object: internal object representing the execution status + * value: value for rejecting */ +} jerry_promise_event_type_t; + +/** + * Filter types for jerry_promise_set_callback callback function. + * The callback is only called for those events which are enabled by the filters. + */ +typedef enum +{ + JERRY_PROMISE_EVENT_FILTER_DISABLE = 0, /**< disable reporting of all events */ + JERRY_PROMISE_EVENT_FILTER_MAIN = (1 << 0), /**< enables the following events: + * JERRY_PROMISE_EVENT_CREATE + * JERRY_PROMISE_EVENT_RESOLVE + * JERRY_PROMISE_EVENT_REJECT */ + JERRY_PROMISE_EVENT_FILTER_ERROR = (1 << 1), /**< enables the following events: + * JERRY_PROMISE_EVENT_RESOLVE_FULFILLED + * JERRY_PROMISE_EVENT_REJECT_FULFILLED + * JERRY_PROMISE_EVENT_REJECT_WITHOUT_HANDLER + * JERRY_PROMISE_EVENT_CATCH_HANDLER_ADDED */ + JERRY_PROMISE_EVENT_FILTER_REACTION_JOB = (1 << 2), /**< enables the following events: + * JERRY_PROMISE_EVENT_BEFORE_REACTION_JOB + * JERRY_PROMISE_EVENT_AFTER_REACTION_JOB */ + JERRY_PROMISE_EVENT_FILTER_ASYNC_MAIN = (1 << 3), /**< enables the following events: + * JERRY_PROMISE_EVENT_ASYNC_AWAIT */ + JERRY_PROMISE_EVENT_FILTER_ASYNC_REACTION_JOB = (1 << 4), /**< enables the following events: + * JERRY_PROMISE_EVENT_ASYNC_BEFORE_RESOLVE + * JERRY_PROMISE_EVENT_ASYNC_BEFORE_REJECT + * JERRY_PROMISE_EVENT_ASYNC_AFTER_RESOLVE + * JERRY_PROMISE_EVENT_ASYNC_AFTER_REJECT */ +} jerry_promise_event_filter_t; + +/** + * Notification callback for tracking Promise and async function operations. + */ +typedef void (*jerry_promise_callback_t) (jerry_promise_event_type_t event_type, + const jerry_value_t object, const jerry_value_t value, + void *user_p); + +/** + * Symbol related types. + */ + +/** + * List of well-known symbols. + */ +typedef enum +{ + JERRY_SYMBOL_ASYNC_ITERATOR, /**< @@asyncIterator well-known symbol */ + JERRY_SYMBOL_HAS_INSTANCE, /**< @@hasInstance well-known symbol */ + JERRY_SYMBOL_IS_CONCAT_SPREADABLE, /**< @@isConcatSpreadable well-known symbol */ + JERRY_SYMBOL_ITERATOR, /**< @@iterator well-known symbol */ + JERRY_SYMBOL_MATCH, /**< @@match well-known symbol */ + JERRY_SYMBOL_REPLACE, /**< @@replace well-known symbol */ + JERRY_SYMBOL_SEARCH, /**< @@search well-known symbol */ + JERRY_SYMBOL_SPECIES, /**< @@species well-known symbol */ + JERRY_SYMBOL_SPLIT, /**< @@split well-known symbol */ + JERRY_SYMBOL_TO_PRIMITIVE, /**< @@toPrimitive well-known symbol */ + JERRY_SYMBOL_TO_STRING_TAG, /**< @@toStringTag well-known symbol */ + JERRY_SYMBOL_UNSCOPABLES, /**< @@unscopables well-known symbol */ + JERRY_SYMBOL_MATCH_ALL, /**< @@matchAll well-known symbol */ +} jerry_well_known_symbol_t; + +/** + * TypedArray related types. + */ + +/** + * TypedArray types. + */ +typedef enum +{ + JERRY_TYPEDARRAY_INVALID = 0, + JERRY_TYPEDARRAY_UINT8, + JERRY_TYPEDARRAY_UINT8CLAMPED, + JERRY_TYPEDARRAY_INT8, + JERRY_TYPEDARRAY_UINT16, + JERRY_TYPEDARRAY_INT16, + JERRY_TYPEDARRAY_UINT32, + JERRY_TYPEDARRAY_INT32, + JERRY_TYPEDARRAY_FLOAT32, + JERRY_TYPEDARRAY_FLOAT64, + JERRY_TYPEDARRAY_BIGINT64, + JERRY_TYPEDARRAY_BIGUINT64, +} jerry_typedarray_type_t; + +/** + * Container types. + */ +typedef enum +{ + JERRY_CONTAINER_TYPE_INVALID = 0, /**< Invalid container */ + JERRY_CONTAINER_TYPE_MAP, /**< Map type */ + JERRY_CONTAINER_TYPE_SET, /**< Set type */ + JERRY_CONTAINER_TYPE_WEAKMAP, /**< WeakMap type */ + JERRY_CONTAINER_TYPE_WEAKSET, /**< WeakSet type */ +} jerry_container_type_t; + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* !JERRYSCRIPT_TYPES_H */ diff --git a/jerry-core/jcontext/jcontext.h b/jerry-core/jcontext/jcontext.h index de8917d3d..ded8b1ebf 100644 --- a/jerry-core/jcontext/jcontext.h +++ b/jerry-core/jcontext/jcontext.h @@ -23,11 +23,9 @@ #include "ecma-builtins.h" #include "ecma-helpers.h" #include "ecma-jobqueue.h" -#include "jerryscript-port.h" #include "jmem.h" #include "re-bytecode.h" #include "vm-defines.h" -#include "jerryscript.h" #include "jerryscript-debugger-transport.h" #include "js-parser-internal.h" diff --git a/jerry-core/parser/js/js-parser-module.c b/jerry-core/parser/js/js-parser-module.c index 9ddce8078..27462de0c 100644 --- a/jerry-core/parser/js/js-parser-module.c +++ b/jerry-core/parser/js/js-parser-module.c @@ -17,7 +17,6 @@ #if JERRY_MODULE_SYSTEM #include "jcontext.h" -#include "jerryscript-port.h" #include "ecma-function-object.h" #include "ecma-gc.h" diff --git a/tests/unit-core/test-number-converter.c b/tests/unit-core/test-number-converter.c index 683d13810..d026e027f 100644 --- a/tests/unit-core/test-number-converter.c +++ b/tests/unit-core/test-number-converter.c @@ -13,8 +13,7 @@ * limitations under the License. */ -#include "ecma-globals.h" -#include "ecma-helpers.h" +#include "jerryscript.h" #include "test-common.h" diff --git a/tools/version.py b/tools/version.py index 9cce9ff79..263723cd2 100755 --- a/tools/version.py +++ b/tools/version.py @@ -32,7 +32,7 @@ def main(): ) _ = parser.parse_args() - with open(os.path.join(settings.PROJECT_DIR, 'jerry-core', 'include', 'jerryscript-core.h'), 'r') as header: + with open(os.path.join(settings.PROJECT_DIR, 'jerry-core', 'include', 'jerryscript-types.h'), 'r') as header: version = {} version_re = re.compile(r'\s*#define\s+JERRY_API_(?PMAJOR|MINOR|PATCH)_VERSION\s+(?P\S+)') for line in header: