1/* Copyright JS Foundation and other contributors, http://js.foundation 2 * 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#ifndef JERRYSCRIPT_CORE_H 17#define JERRYSCRIPT_CORE_H 18 19#include <stdbool.h> 20#include <stddef.h> 21#include <stdint.h> 22 23#include "jerryscript-compiler.h" 24 25#ifdef __cplusplus 26extern "C" 27{ 28#endif /* __cplusplus */ 29 30/** \addtogroup jerry Jerry engine interface 31 * @{ 32 */ 33 34/** 35 * Major version of JerryScript API. 36 */ 37#define JERRY_API_MAJOR_VERSION 2 38 39/** 40 * Minor version of JerryScript API. 41 */ 42#define JERRY_API_MINOR_VERSION 3 43 44/** 45 * Patch version of JerryScript API. 46 */ 47#define JERRY_API_PATCH_VERSION 0 48 49/** 50 * JerryScript init flags. 51 */ 52typedef enum 53{ 54 JERRY_INIT_EMPTY = (0u), /**< empty flag set */ 55 JERRY_INIT_SHOW_OPCODES = (1u << 0), /**< dump byte-code to log after parse */ 56 JERRY_INIT_SHOW_REGEXP_OPCODES = (1u << 1), /**< dump regexp byte-code to log after compilation */ 57 JERRY_INIT_MEM_STATS = (1u << 2), /**< dump memory statistics */ 58 JERRY_INIT_MEM_STATS_SEPARATE = (1u << 3), /**< deprecated, an unused placeholder now */ 59 JERRY_INIT_DEBUGGER = (1u << 4), /**< deprecated, an unused placeholder now */ 60} jerry_init_flag_t; 61 62/** 63 * JerryScript API Error object types. 64 */ 65typedef enum 66{ 67 JERRY_ERROR_NONE = 0, /**< No Error */ 68 69 JERRY_ERROR_COMMON, /**< Error */ 70 JERRY_ERROR_EVAL, /**< EvalError */ 71 JERRY_ERROR_RANGE, /**< RangeError */ 72 JERRY_ERROR_REFERENCE, /**< ReferenceError */ 73 JERRY_ERROR_SYNTAX, /**< SyntaxError */ 74 JERRY_ERROR_TYPE, /**< TypeError */ 75 JERRY_ERROR_URI /**< URIError */ 76} jerry_error_t; 77 78/** 79 * JerryScript feature types. 80 */ 81typedef enum 82{ 83 JERRY_FEATURE_CPOINTER_32_BIT, /**< 32 bit compressed pointers */ 84 JERRY_FEATURE_ERROR_MESSAGES, /**< error messages */ 85 JERRY_FEATURE_JS_PARSER, /**< js-parser */ 86 JERRY_FEATURE_MEM_STATS, /**< memory statistics */ 87 JERRY_FEATURE_PARSER_DUMP, /**< parser byte-code dumps */ 88 JERRY_FEATURE_REGEXP_DUMP, /**< regexp byte-code dumps */ 89 JERRY_FEATURE_SNAPSHOT_SAVE, /**< saving snapshot files */ 90 JERRY_FEATURE_SNAPSHOT_EXEC, /**< executing snapshot files */ 91 JERRY_FEATURE_DEBUGGER, /**< debugging */ 92 JERRY_FEATURE_VM_EXEC_STOP, /**< stopping ECMAScript execution */ 93 JERRY_FEATURE_JSON, /**< JSON support */ 94 JERRY_FEATURE_PROMISE, /**< promise support */ 95 JERRY_FEATURE_TYPEDARRAY, /**< Typedarray support */ 96 JERRY_FEATURE_DATE, /**< Date support */ 97 JERRY_FEATURE_REGEXP, /**< Regexp support */ 98 JERRY_FEATURE_LINE_INFO, /**< line info available */ 99 JERRY_FEATURE_LOGGING, /**< logging */ 100 JERRY_FEATURE_SYMBOL, /**< symbol support */ 101 JERRY_FEATURE_DATAVIEW, /**< DataView support */ 102 JERRY_FEATURE_PROXY, /**< Proxy support */ 103 JERRY_FEATURE_MAP, /**< Map support */ 104 JERRY_FEATURE_SET, /**< Set support */ 105 JERRY_FEATURE_WEAKMAP, /**< WeakMap support */ 106 JERRY_FEATURE_WEAKSET, /**< WeakSet support */ 107 JERRY_FEATURE__COUNT /**< number of features. NOTE: must be at the end of the list */ 108} jerry_feature_t; 109 110/** 111 * Option flags for jerry_parse and jerry_parse_function functions. 112 */ 113typedef enum 114{ 115 JERRY_PARSE_NO_OPTS = 0, /**< no options passed */ 116 JERRY_PARSE_STRICT_MODE = (1 << 0) /**< enable strict mode */ 117} jerry_parse_opts_t; 118 119/** 120 * GC operational modes. 121 */ 122typedef enum 123{ 124 JERRY_GC_PRESSURE_LOW, /**< free unused objects, but keep memory 125 * allocated for performance improvements 126 * such as property hash tables for large objects */ 127 JERRY_GC_PRESSURE_HIGH /**< free as much memory as possible */ 128} jerry_gc_mode_t; 129 130/** 131 * Jerry regexp flags. 132 */ 133typedef enum 134{ 135 JERRY_REGEXP_FLAG_GLOBAL = (1u << 1), /**< Globally scan string */ 136 JERRY_REGEXP_FLAG_IGNORE_CASE = (1u << 2), /**< Ignore case */ 137 JERRY_REGEXP_FLAG_MULTILINE = (1u << 3) /**< Multiline string scan */ 138} jerry_regexp_flags_t; 139 140/** 141 * Character type of JerryScript. 142 */ 143typedef uint8_t jerry_char_t; 144 145/** 146 * Size type of JerryScript. 147 */ 148typedef uint32_t jerry_size_t; 149 150/** 151 * Length type of JerryScript. 152 */ 153typedef uint32_t jerry_length_t; 154 155/** 156 * Description of a JerryScript value. 157 */ 158typedef uint32_t jerry_value_t; 159 160/** 161 * Description of ECMA property descriptor. 162 */ 163typedef struct 164{ 165 /** Is [[Value]] defined? */ 166 bool is_value_defined; 167 168 /** Is [[Get]] defined? */ 169 bool is_get_defined; 170 171 /** Is [[Set]] defined? */ 172 bool is_set_defined; 173 174 /** Is [[Writable]] defined? */ 175 bool is_writable_defined; 176 177 /** [[Writable]] */ 178 bool is_writable; 179 180 /** Is [[Enumerable]] defined? */ 181 bool is_enumerable_defined; 182 183 /** [[Enumerable]] */ 184 bool is_enumerable; 185 186 /** Is [[Configurable]] defined? */ 187 bool is_configurable_defined; 188 189 /** [[Configurable]] */ 190 bool is_configurable; 191 192 /** [[Value]] */ 193 jerry_value_t value; 194 195 /** [[Get]] */ 196 jerry_value_t getter; 197 198 /** [[Set]] */ 199 jerry_value_t setter; 200} jerry_property_descriptor_t; 201 202/** 203 * Description of JerryScript heap memory stats. 204 * It is for memory profiling. 205 */ 206typedef struct 207{ 208 size_t version; /**< the version of the stats struct */ 209 size_t size; /**< heap total size */ 210 size_t allocated_bytes; /**< currently allocated bytes */ 211 size_t peak_allocated_bytes; /**< peak allocated bytes */ 212 size_t reserved[4]; /**< padding for future extensions */ 213} jerry_heap_stats_t; 214 215/** 216 * Type of an external function handler. 217 */ 218typedef jerry_value_t (*jerry_external_handler_t) (const jerry_value_t function_obj, 219 const jerry_value_t this_val, 220 const jerry_value_t args_p[], 221 const jerry_length_t args_count); 222 223/** 224 * Native free callback of an object. 225 */ 226typedef void (*jerry_object_native_free_callback_t) (void *native_p); 227 228/** 229 * Callback which tells whether the ECMAScript execution should be stopped. 230 * 231 * As long as the function returns with undefined the execution continues. 232 * When a non-undefined value is returned the execution stops and the value 233 * is thrown by the engine (if the error flag is not set for the returned 234 * value the engine automatically sets it). 235 * 236 * Note: if the function returns with a non-undefined value it 237 * must return with the same value for future calls. 238 */ 239typedef jerry_value_t (*jerry_vm_exec_stop_callback_t) (void *user_p); 240 241/** 242 * Function type applied for each data property of an object. 243 */ 244typedef bool (*jerry_object_property_foreach_t) (const jerry_value_t property_name, 245 const jerry_value_t property_value, 246 void *user_data_p); 247/** 248 * Function type applied for each object in the engine. 249 */ 250typedef bool (*jerry_objects_foreach_t) (const jerry_value_t object, 251 void *user_data_p); 252 253/** 254 * Function type applied for each matching object in the engine. 255 */ 256typedef bool (*jerry_objects_foreach_by_native_info_t) (const jerry_value_t object, 257 void *object_data_p, 258 void *user_data_p); 259 260/** 261 * User context item manager 262 */ 263typedef struct 264{ 265 /** 266 * Callback responsible for initializing a context item, or NULL to zero out the memory. This is called lazily, the 267 * first time jerry_get_context_data () is called with this manager. 268 * 269 * @param [in] data The buffer that JerryScript allocated for the manager. The buffer is zeroed out. The size is 270 * determined by the bytes_needed field. The buffer is kept alive until jerry_cleanup () is called. 271 */ 272 void (*init_cb) (void *data); 273 274 /** 275 * Callback responsible for deinitializing a context item, or NULL. This is called as part of jerry_cleanup (), 276 * right *before* the VM has been cleaned up. This is a good place to release strong references to jerry_value_t's 277 * that the manager may be holding. 278 * Note: because the VM has not been fully cleaned up yet, jerry_object_native_info_t free_cb's can still get called 279 * *after* all deinit_cb's have been run. See finalize_cb for a callback that is guaranteed to run *after* all 280 * free_cb's have been run. 281 * 282 * @param [in] data The buffer that JerryScript allocated for the manager. 283 */ 284 void (*deinit_cb) (void *data); 285 286 /** 287 * Callback responsible for finalizing a context item, or NULL. This is called as part of jerry_cleanup (), 288 * right *after* the VM has been cleaned up and destroyed and jerry_... APIs cannot be called any more. At this point, 289 * all values in the VM have been cleaned up. This is a good place to clean up native state that can only be cleaned 290 * up at the very end when there are no more VM values around that may need to access that state. 291 * 292 * @param [in] data The buffer that JerryScript allocated for the manager. After returning from this callback, 293 * the data pointer may no longer be used. 294 */ 295 void (*finalize_cb) (void *data); 296 297 /** 298 * Number of bytes to allocate for this manager. This is the size of the buffer that JerryScript will allocate on 299 * behalf of the manager. The pointer to this buffer is passed into init_cb, deinit_cb and finalize_cb. It is also 300 * returned from the jerry_get_context_data () API. 301 */ 302 size_t bytes_needed; 303} jerry_context_data_manager_t; 304 305/** 306 * Function type for allocating buffer for JerryScript context. 307 */ 308typedef void *(*jerry_context_alloc_t) (size_t size, void *cb_data_p); 309 310/** 311 * Type information of a native pointer. 312 */ 313typedef struct 314{ 315 jerry_object_native_free_callback_t free_cb; /**< the free callback of the native pointer */ 316} jerry_object_native_info_t; 317 318/** 319 * An opaque declaration of the JerryScript context structure. 320 */ 321typedef struct jerry_context_t jerry_context_t; 322 323/** 324 * Enum that contains the supported binary operation types 325 */ 326typedef enum 327{ 328 JERRY_BIN_OP_EQUAL = 0u, /**< equal comparison (==) */ 329 JERRY_BIN_OP_STRICT_EQUAL, /**< strict equal comparison (===) */ 330 JERRY_BIN_OP_LESS, /**< less relation (<) */ 331 JERRY_BIN_OP_LESS_EQUAL, /**< less or equal relation (<=) */ 332 JERRY_BIN_OP_GREATER, /**< greater relation (>) */ 333 JERRY_BIN_OP_GREATER_EQUAL, /**< greater or equal relation (>=)*/ 334 JERRY_BIN_OP_INSTANCEOF, /**< instanceof operation */ 335 JERRY_BIN_OP_ADD, /**< addition operator (+) */ 336 JERRY_BIN_OP_SUB, /**< subtraction operator (-) */ 337 JERRY_BIN_OP_MUL, /**< multiplication operator (*) */ 338 JERRY_BIN_OP_DIV, /**< division operator (/) */ 339 JERRY_BIN_OP_REM, /**< remainder operator (%) */ 340} jerry_binary_operation_t; 341 342/** 343 * General engine functions. 344 */ 345 346#ifdef JERRY_FOR_IAR_CONFIG 347char* jerry_vla_malloc (uint32_t size); 348void jerry_vla_free (char* p); 349#endif 350 351void jerry_init (jerry_init_flag_t flags); 352void jerry_cleanup (void); 353void jerry_register_magic_strings (const jerry_char_t * const *ex_str_items_p, 354 uint32_t count, 355 const jerry_length_t *str_lengths_p); 356void jerry_gc (jerry_gc_mode_t mode); 357void *jerry_get_context_data (const jerry_context_data_manager_t *manager_p); 358 359bool jerry_get_memory_stats (jerry_heap_stats_t *out_stats_p); 360 361/** 362 * Parser and executor functions. 363 */ 364bool jerry_run_simple (const jerry_char_t *script_source_p, size_t script_source_size, jerry_init_flag_t flags); 365jerry_value_t jerry_parse (const jerry_char_t *resource_name_p, size_t resource_name_length, 366 const jerry_char_t *source_p, size_t source_size, uint32_t parse_opts); 367jerry_value_t jerry_parse_function (const jerry_char_t *resource_name_p, size_t resource_name_length, 368 const jerry_char_t *arg_list_p, size_t arg_list_size, 369 const jerry_char_t *source_p, size_t source_size, uint32_t parse_opts); 370jerry_value_t jerry_run (const jerry_value_t func_val); 371jerry_value_t jerry_eval (const jerry_char_t *source_p, size_t source_size, uint32_t parse_opts); 372 373jerry_value_t jerry_run_all_enqueued_jobs (void); 374 375/** 376 * Get the global context. 377 */ 378jerry_value_t jerry_get_global_object (void); 379 380/** 381 * Checker functions of 'jerry_value_t'. 382 */ 383bool jerry_value_is_abort (const jerry_value_t value); 384bool jerry_value_is_array (const jerry_value_t value); 385bool jerry_value_is_boolean (const jerry_value_t value); 386bool jerry_value_is_constructor (const jerry_value_t value); 387bool jerry_value_is_error (const jerry_value_t value); 388bool jerry_value_is_function (const jerry_value_t value); 389bool jerry_value_is_number (const jerry_value_t value); 390bool jerry_value_is_null (const jerry_value_t value); 391bool jerry_value_is_object (const jerry_value_t value); 392bool jerry_value_is_promise (const jerry_value_t value); 393bool jerry_value_is_proxy (const jerry_value_t value); 394bool jerry_value_is_string (const jerry_value_t value); 395bool jerry_value_is_symbol (const jerry_value_t value); 396bool jerry_value_is_undefined (const jerry_value_t value); 397 398/** 399 * JerryScript API value type information. 400 */ 401typedef enum 402{ 403 JERRY_TYPE_NONE = 0u, /**< no type information */ 404 JERRY_TYPE_UNDEFINED, /**< undefined type */ 405 JERRY_TYPE_NULL, /**< null type */ 406 JERRY_TYPE_BOOLEAN, /**< boolean type */ 407 JERRY_TYPE_NUMBER, /**< number type */ 408 JERRY_TYPE_STRING, /**< string type */ 409 JERRY_TYPE_OBJECT, /**< object type */ 410 JERRY_TYPE_FUNCTION, /**< function type */ 411 JERRY_TYPE_ERROR, /**< error/abort type */ 412 JERRY_TYPE_SYMBOL, /**< symbol type */ 413} jerry_type_t; 414 415jerry_type_t jerry_value_get_type (const jerry_value_t value); 416 417/** 418 * Checker function of whether the specified compile feature is enabled. 419 */ 420bool jerry_is_feature_enabled (const jerry_feature_t feature); 421 422/** 423 * Binary operations 424 */ 425jerry_value_t jerry_binary_operation (jerry_binary_operation_t op, 426 const jerry_value_t lhs, 427 const jerry_value_t rhs); 428 429/** 430 * Error manipulation functions. 431 */ 432jerry_value_t jerry_create_abort_from_value (jerry_value_t value, bool release); 433jerry_value_t jerry_create_error_from_value (jerry_value_t value, bool release); 434jerry_value_t jerry_get_value_from_error (jerry_value_t value, bool release); 435 436/** 437 * Error object function(s). 438 */ 439jerry_error_t jerry_get_error_type (jerry_value_t value); 440 441/** 442 * Getter functions of 'jerry_value_t'. 443 */ 444bool jerry_get_boolean_value (const jerry_value_t value); 445double jerry_get_number_value (const jerry_value_t value); 446 447/** 448 * Functions for string values. 449 */ 450jerry_size_t jerry_get_string_size (const jerry_value_t value); 451jerry_size_t jerry_get_utf8_string_size (const jerry_value_t value); 452jerry_length_t jerry_get_string_length (const jerry_value_t value); 453jerry_length_t jerry_get_utf8_string_length (const jerry_value_t value); 454jerry_size_t jerry_string_to_char_buffer (const jerry_value_t value, jerry_char_t *buffer_p, jerry_size_t buffer_size); 455jerry_size_t jerry_string_to_utf8_char_buffer (const jerry_value_t value, 456 jerry_char_t *buffer_p, 457 jerry_size_t buffer_size); 458jerry_size_t jerry_substring_to_char_buffer (const jerry_value_t value, 459 jerry_length_t start_pos, 460 jerry_length_t end_pos, 461 jerry_char_t *buffer_p, 462 jerry_size_t buffer_size); 463jerry_size_t jerry_substring_to_utf8_char_buffer (const jerry_value_t value, 464 jerry_length_t start_pos, 465 jerry_length_t end_pos, 466 jerry_char_t *buffer_p, 467 jerry_size_t buffer_size); 468 469/** 470 * Functions for array object values. 471 */ 472uint32_t jerry_get_array_length (const jerry_value_t value); 473 474/** 475 * Converters of 'jerry_value_t'. 476 */ 477bool jerry_value_to_boolean (const jerry_value_t value); 478jerry_value_t jerry_value_to_number (const jerry_value_t value); 479jerry_value_t jerry_value_to_object (const jerry_value_t value); 480jerry_value_t jerry_value_to_primitive (const jerry_value_t value); 481jerry_value_t jerry_value_to_string (const jerry_value_t value); 482 483/** 484 * Acquire types with reference counter (increase the references). 485 */ 486jerry_value_t jerry_acquire_value (jerry_value_t value); 487 488/** 489 * Release the referenced values. 490 */ 491void jerry_release_value (jerry_value_t value); 492 493/** 494 * Create functions of API values. 495 */ 496jerry_value_t jerry_create_array (uint32_t size); 497jerry_value_t jerry_create_boolean (bool value); 498jerry_value_t jerry_create_error (jerry_error_t error_type, const jerry_char_t *message_p); 499jerry_value_t jerry_create_error_sz (jerry_error_t error_type, const jerry_char_t *message_p, 500 jerry_size_t message_size); 501jerry_value_t jerry_create_external_function (jerry_external_handler_t handler_p); 502jerry_value_t jerry_create_number (double value); 503jerry_value_t jerry_create_number_infinity (bool sign); 504jerry_value_t jerry_create_number_nan (void); 505jerry_value_t jerry_create_null (void); 506jerry_value_t jerry_create_object (void); 507jerry_value_t jerry_create_promise (void); 508jerry_value_t jerry_create_proxy (const jerry_value_t target, const jerry_value_t handler); 509jerry_value_t jerry_create_regexp (const jerry_char_t *pattern, uint16_t flags); 510jerry_value_t jerry_create_regexp_sz (const jerry_char_t *pattern, jerry_size_t pattern_size, uint16_t flags); 511jerry_value_t jerry_create_string_from_utf8 (const jerry_char_t *str_p); 512jerry_value_t jerry_create_string_sz_from_utf8 (const jerry_char_t *str_p, jerry_size_t str_size); 513jerry_value_t jerry_create_string (const jerry_char_t *str_p); 514jerry_value_t jerry_create_string_sz (const jerry_char_t *str_p, jerry_size_t str_size); 515jerry_value_t jerry_create_symbol (const jerry_value_t value); 516jerry_value_t jerry_create_undefined (void); 517 518/** 519 * General API functions of JS objects. 520 */ 521jerry_value_t jerry_has_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); 522jerry_value_t jerry_has_own_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); 523bool jerry_has_internal_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); 524bool jerry_delete_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); 525bool jerry_delete_property_by_index (const jerry_value_t obj_val, uint32_t index); 526bool jerry_delete_internal_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); 527 528jerry_value_t jerry_get_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); 529jerry_value_t jerry_get_property_by_index (const jerry_value_t obj_val, uint32_t index); 530jerry_value_t jerry_get_internal_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); 531jerry_value_t jerry_set_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val, 532 const jerry_value_t value_to_set); 533jerry_value_t jerry_set_property_by_index (const jerry_value_t obj_val, uint32_t index, 534 const jerry_value_t value_to_set); 535bool jerry_set_internal_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val, 536 const jerry_value_t value_to_set); 537 538void jerry_init_property_descriptor_fields (jerry_property_descriptor_t *prop_desc_p); 539jerry_value_t jerry_define_own_property (const jerry_value_t obj_val, 540 const jerry_value_t prop_name_val, 541 const jerry_property_descriptor_t *prop_desc_p); 542 543bool jerry_get_own_property_descriptor (const jerry_value_t obj_val, 544 const jerry_value_t prop_name_val, 545 jerry_property_descriptor_t *prop_desc_p); 546void jerry_free_property_descriptor_fields (const jerry_property_descriptor_t *prop_desc_p); 547 548jerry_value_t jerry_call_function (const jerry_value_t func_obj_val, const jerry_value_t this_val, 549 const jerry_value_t args_p[], jerry_size_t args_count); 550jerry_value_t jerry_construct_object (const jerry_value_t func_obj_val, const jerry_value_t args_p[], 551 jerry_size_t args_count); 552 553jerry_value_t jerry_get_object_keys (const jerry_value_t obj_val); 554jerry_value_t jerry_get_prototype (const jerry_value_t obj_val); 555jerry_value_t jerry_set_prototype (const jerry_value_t obj_val, const jerry_value_t proto_obj_val); 556 557bool jerry_get_object_native_pointer (const jerry_value_t obj_val, 558 void **out_native_pointer_p, 559 const jerry_object_native_info_t *native_pointer_info_p); 560void jerry_set_object_native_pointer (const jerry_value_t obj_val, 561 void *native_pointer_p, 562 const jerry_object_native_info_t *native_info_p); 563bool jerry_delete_object_native_pointer (const jerry_value_t obj_val, 564 const jerry_object_native_info_t *native_info_p); 565 566bool jerry_objects_foreach (jerry_objects_foreach_t foreach_p, 567 void *user_data); 568bool jerry_objects_foreach_by_native_info (const jerry_object_native_info_t *native_info_p, 569 jerry_objects_foreach_by_native_info_t foreach_p, 570 void *user_data_p); 571 572bool jerry_foreach_object_property (const jerry_value_t obj_val, jerry_object_property_foreach_t foreach_p, 573 void *user_data_p); 574 575/** 576 * Promise functions. 577 */ 578jerry_value_t jerry_resolve_or_reject_promise (jerry_value_t promise, jerry_value_t argument, bool is_resolve); 579 580/** 581 * Enum values representing various Promise states. 582 */ 583typedef enum 584{ 585 JERRY_PROMISE_STATE_NONE = 0u, /**< Invalid/Unknown state (possibly called on a non-promise object). */ 586 JERRY_PROMISE_STATE_PENDING, /**< Promise is in "Pending" state. */ 587 JERRY_PROMISE_STATE_FULFILLED, /**< Promise is in "Fulfilled" state. */ 588 JERRY_PROMISE_STATE_REJECTED, /**< Promise is in "Rejected" state. */ 589} jerry_promise_state_t; 590 591jerry_value_t jerry_get_promise_result (const jerry_value_t promise); 592jerry_promise_state_t jerry_get_promise_state (const jerry_value_t promise); 593 594/** 595 * Symbol functions. 596 */ 597jerry_value_t jerry_get_symbol_descriptive_string (const jerry_value_t symbol); 598 599/** 600 * Input validator functions. 601 */ 602bool jerry_is_valid_utf8_string (const jerry_char_t *utf8_buf_p, jerry_size_t buf_size); 603bool jerry_is_valid_cesu8_string (const jerry_char_t *cesu8_buf_p, jerry_size_t buf_size); 604 605/* 606 * Dynamic memory management functions. 607 */ 608void *jerry_heap_alloc (size_t size); 609void jerry_heap_free (void *mem_p, size_t size); 610 611/* 612 * External context functions. 613 */ 614jerry_context_t *jerry_create_context (uint32_t heap_size, jerry_context_alloc_t alloc, void *cb_data_p); 615 616/** 617 * Miscellaneous functions. 618 */ 619void jerry_set_vm_exec_stop_callback (jerry_vm_exec_stop_callback_t stop_cb, void *user_p, uint32_t frequency); 620jerry_value_t jerry_get_backtrace (uint32_t max_depth); 621jerry_value_t jerry_get_resource_name (const jerry_value_t value); 622jerry_value_t jerry_get_new_target (void); 623 624/** 625 * Array buffer components. 626 */ 627bool jerry_value_is_arraybuffer (const jerry_value_t value); 628jerry_value_t jerry_create_arraybuffer (const jerry_length_t size); 629jerry_value_t jerry_create_arraybuffer_external (const jerry_length_t size, 630 uint8_t *buffer_p, 631 jerry_object_native_free_callback_t free_cb); 632jerry_length_t jerry_arraybuffer_write (const jerry_value_t value, 633 jerry_length_t offset, 634 const uint8_t *buf_p, 635 jerry_length_t buf_size); 636jerry_length_t jerry_arraybuffer_read (const jerry_value_t value, 637 jerry_length_t offset, 638 uint8_t *buf_p, 639 jerry_length_t buf_size); 640jerry_length_t jerry_get_arraybuffer_byte_length (const jerry_value_t value); 641uint8_t *jerry_get_arraybuffer_pointer (const jerry_value_t value); 642jerry_value_t jerry_is_arraybuffer_detachable (const jerry_value_t value); 643jerry_value_t jerry_detach_arraybuffer (const jerry_value_t value); 644 645/** 646 * DataView functions. 647 */ 648jerry_value_t 649jerry_create_dataview (const jerry_value_t value, 650 const jerry_length_t byte_offset, 651 const jerry_length_t byte_length); 652 653bool 654jerry_value_is_dataview (const jerry_value_t value); 655 656jerry_value_t 657jerry_get_dataview_buffer (const jerry_value_t dataview, 658 jerry_length_t *byte_offset, 659 jerry_length_t *byte_length); 660 661/** 662 * TypedArray functions. 663 */ 664 665/** 666 * TypedArray types. 667 */ 668typedef enum 669{ 670 JERRY_TYPEDARRAY_INVALID = 0, 671 JERRY_TYPEDARRAY_UINT8, 672 JERRY_TYPEDARRAY_UINT8CLAMPED, 673 JERRY_TYPEDARRAY_INT8, 674 JERRY_TYPEDARRAY_UINT16, 675 JERRY_TYPEDARRAY_INT16, 676 JERRY_TYPEDARRAY_UINT32, 677 JERRY_TYPEDARRAY_INT32, 678 JERRY_TYPEDARRAY_FLOAT32, 679 JERRY_TYPEDARRAY_FLOAT64, 680} jerry_typedarray_type_t; 681 682/** 683 * Container types. 684 */ 685typedef enum 686{ 687 JERRY_CONTAINER_TYPE_INVALID = 0, /**< Invalid container */ 688 JERRY_CONTAINER_TYPE_MAP, /**< Map type */ 689 JERRY_CONTAINER_TYPE_SET, /**< Set type */ 690 JERRY_CONTAINER_TYPE_WEAKMAP, /**< WeakMap type */ 691 JERRY_CONTAINER_TYPE_WEAKSET, /**< WeakSet type */ 692} jerry_container_type_t; 693 694bool jerry_value_is_typedarray (jerry_value_t value); 695jerry_value_t jerry_create_typedarray (jerry_typedarray_type_t type_name, jerry_length_t length); 696jerry_value_t jerry_create_typedarray_for_arraybuffer_sz (jerry_typedarray_type_t type_name, 697 const jerry_value_t arraybuffer, 698 jerry_length_t byte_offset, 699 jerry_length_t length); 700jerry_value_t jerry_create_typedarray_for_arraybuffer (jerry_typedarray_type_t type_name, 701 const jerry_value_t arraybuffer); 702jerry_typedarray_type_t jerry_get_typedarray_type (jerry_value_t value); 703jerry_length_t jerry_get_typedarray_length (jerry_value_t value); 704jerry_value_t jerry_get_typedarray_buffer (jerry_value_t value, 705 jerry_length_t *byte_offset, 706 jerry_length_t *byte_length); 707jerry_value_t jerry_json_parse (const jerry_char_t *string_p, jerry_size_t string_size); 708jerry_value_t jerry_json_stringify (const jerry_value_t object_to_stringify); 709jerry_value_t jerry_create_container (jerry_container_type_t container_type, 710 const jerry_value_t *arguments_list_p, 711 jerry_length_t arguments_list_len); 712jerry_container_type_t jerry_get_container_type (const jerry_value_t value); 713 714#if defined(JERRY_HEAPDUMP) 715void JerryHeapdumpRun(const char* filepath); 716#endif 717 718#if defined(JERRY_REF_TRACKER) 719void JerryRefTrackerStart(const char* filepath); 720void JerryRefTrackerStop(void); 721#endif 722 723/** 724 * @} 725 */ 726 727#ifdef __cplusplus 728} 729#endif /* __cplusplus */ 730#endif /* !JERRYSCRIPT_CORE_H */ 731