1# jsvm_types.h 2 3 4## Overview 5 6JSVM-API type definitions. 7 8Through the APIs, independent, standard, and complete JavaScript engine capabilities are provided, including managing the engine lifecycle, compiling and running JS code, implementing JS/C++ cross-language invoking, and taking snapshots. 9 10**Library**: libjsvm.so 11 12**System capability**: SystemCapability.ArkCompiler.JSVM 13 14**Since**: 11 15 16**Related module**: [JSVM](_j_s_v_m.md) 17 18 19## Summary 20 21 22### Structs 23 24| Name| Description| 25| -------- | -------- | 26| struct [JSVM_CallbackStruct](_j_s_v_m___callback_struct.md) | Pointer to and data of the native callbacks provided by the user. These functions are exposed to JavaScript via JSVM-API. | 27| struct [JSVM_HeapStatistics](_j_s_v_m___heap_statistics.md) | Heap statistics struct, which is used to store statistics about JavaScript heap memory usage. | 28| struct [JSVM_InitOptions](_j_s_v_m___init_options.md) | Options for initializing a JavaScript VM. | 29| struct [JSVM_CreateVMOptions](_j_s_v_m___create_v_m_options.md) | Options for creating a JavaScript VM. | 30| struct [JSVM_VMInfo](_j_s_v_m___v_m_info.md) | JavaScript VM information. | 31| struct [JSVM_PropertyDescriptor](_j_s_v_m___property_descriptor.md) | Property descriptor. | 32| struct [JSVM_ExtendedErrorInfo](_j_s_v_m___extended_error_info.md) | Extended error information. | 33| struct [JSVM_TypeTag](_j_s_v_m___type_tag.md) | Type tag, stored as a 128-bit value of two unsigned 64-bit integers. This tag can be used as a UUID, so that JavaScript objects can be tagged, to ensure that their types remain unchanged. | 34| struct [JSVM_PropertyHandlerConfigurationStruct](_j_s_v_m___property_handler_configuration_struct.md) | Struct for triggering the corresponding function callback in the struct when the getter, setter, deleter, or enumerator of an object is executed. | 35| struct [JSVM_ScriptOrigin](_j_s_v_m___script_origin.md) | Source code information. | 36 37 38### Types 39 40| Name| Description| 41| -------- | -------- | 42| typedef uint16_t **char16_t** | | 43| typedef struct JSVM_VM__ \* [JSVM_VM](_j_s_v_m.md#jsvm_vm) | JavaScript VM instance. | 44| typedef struct JSVM_VMScope__ \* [JSVM_VMScope](_j_s_v_m.md#jsvm_vmscope) | JavaScript VM scope. | 45| typedef struct JSVM_EnvScope__ \* [JSVM_EnvScope](_j_s_v_m.md#jsvm_envscope) | Environment scope of the current VM instance. The environment is available to the VM instance of the thread only after the thread enters JSVM_EnvScope of the environment through OH_JSVM_OpenEnvScope. | 46| typedef struct JSVM_Script__ \* [JSVM_Script](_j_s_v_m.md#jsvm_script) | JavaScript code. | 47| typedef struct JSVM_Env__ \* [JSVM_Env](_j_s_v_m.md#jsvm_env) | Context of a specific VM state. It needs to be passed as a parameter when the native function is called and passed to any subsequent JSVM-API nested invoking. | 48| typedef struct JSVM_CpuProfiler__ \* [JSVM_CpuProfiler](_j_s_v_m.md#jsvm_cpuprofiler) | JavaScript CPU profiler. | 49| typedef struct JSVM_Value__ \* [JSVM_Value](_j_s_v_m.md#jsvm_value) | JavaScript value. | 50| typedef struct JSVM_Ref__ \* [JSVM_Ref](_j_s_v_m.md#jsvm_ref) | Reference to the JavaScript value. | 51| typedef struct JSVM_HandleScope__ \* [JSVM_HandleScope](_j_s_v_m.md#jsvm_handlescope) | Scope of the JavaScript value. It is used to control and modify the lifecycle of an object created in a specific scope. Typically, the JSVM-API value is created in the context of JSVM_HandleScope. When the native method is called from JavaScript, the default JSVM_HandleScope exists. If the user does not explicitly create a new JSVM_HandleScope, the JSVM-API value is created in the default JSVM_HandleScope. For any code call other than native method execution (for example, libuv callback), the module needs to create a scope before calling any function that may cause JavaScript value creation. JSVM_HandleScope is created using OH_JSVM_OpenHandleScope and destroyed using OH_JSVM_CloseHandleScope. Closing the scope represents indicating to the GC that all JSVM_Values created during the lifecycle of JSVM_HandleScope will no longer be referenced from the stack frame of the current heap. | 52| typedef struct JSVM_EscapableHandleScope__ \* [JSVM_EscapableHandleScope](_j_s_v_m.md#jsvm_escapablehandlescope) | A special type of handle scope, which is used to return the value created in a specific handle scope to the parent scope. | 53| typedef struct JSVM_CallbackInfo__ \* [JSVM_CallbackInfo](_j_s_v_m.md#jsvm_callbackinfo) | An opaque data type passed to the callback. It can be used to obtain additional information about the context in which the function is called. | 54| typedef struct JSVM_Deferred__ \* [JSVM_Deferred](_j_s_v_m.md#jsvm_deferred) | Promise deferred object. | 55| typedef [JSVM_CallbackStruct](_j_s_v_m___callback_struct.md) \* [JSVM_Callback](_j_s_v_m.md#jsvm_callback) | Pointer types of the native functions provided by user. These functions are exposed to JavaScript via JSVM-API. | 56| typedef void(JSVM_CDECL \* [JSVM_Finalize](_j_s_v_m.md#jsvm_finalize)) ([JSVM_Env](_j_s_v_m.md#jsvm_env) env, void \*finalizeData, void \*finalizeHint) | Function pointer type. It is passed in when a native object or data is associated with a JavaScript object. This function is called when the associated JavaScript object is reclaimed by the GC to execute the native cleanup action. | 57| typedef bool(JSVM_CDECL \* [JSVM_OutputStream](_j_s_v_m.md#jsvm_outputstream)) (const char \*data, int size, void \*streamData) | Pointer to the callback of the ASCII output stream. **data** indicates the pointer to the output data. **size** indicates the size of the output data. **void** points to the end of the stream. **streamData** indicates the pointer passed to the API function together with the callback. The API function generates data to the output stream. If **true** is returned, the stream can continue to receive data. Otherwise, it aborts the stream. | 58| typedef [JSVM_PropertyHandlerConfigurationStruct](_j_s_v_m___property_handler_configuration_struct.md) \* [JSVM_PropertyHandlerCfg](_j_s_v_m.md#jsvm_propertyhandlercfg) | Pointer type of the struct that contains the property listening callback. | 59 60 61### Enums 62 63| Name| Description| 64| -------- | -------- | 65| [JSVM_PropertyAttributes](_j_s_v_m.md#jsvm_propertyattributes) {<br>[JSVM_DEFAULT](_j_s_v_m.md) = 0, [JSVM_WRITABLE](_j_s_v_m.md) = 1 << 0, [JSVM_ENUMERABLE](_j_s_v_m.md) = 1 << 1, [JSVM_CONFIGURABLE](_j_s_v_m.md) = 1 << 2,<br>[JSVM_STATIC](_j_s_v_m.md) = 1 << 10, [JSVM_DEFAULT_METHOD](_j_s_v_m.md) = JSVM_WRITABLE \| JSVM_CONFIGURABLE, [JSVM_DEFAULT_JSPROPERTY](_j_s_v_m.md) = JSVM_WRITABLE \| JSVM_ENUMERABLE \| JSVM_CONFIGURABLE<br>} | Control over the behavior of JavaScript object properties. | 66| [JSVM_ValueType](_j_s_v_m.md#jsvm_valuetype) {<br>[JSVM_UNDEFINED](_j_s_v_m.md), [JSVM_NULL](_j_s_v_m.md), [JSVM_BOOLEAN](_j_s_v_m.md), [JSVM_NUMBER](_j_s_v_m.md),<br>[JSVM_STRING](_j_s_v_m.md), [JSVM_SYMBOL](_j_s_v_m.md), [JSVM_OBJECT](_j_s_v_m.md), [JSVM_FUNCTION](_j_s_v_m.md),<br>[JSVM_EXTERNAL](_j_s_v_m.md), [JSVM_BIGINT](_j_s_v_m.md)<br>} | JSVM_Value type. | 67| [JSVM_TypedarrayType](_j_s_v_m.md#jsvm_typedarraytype) {<br>[JSVM_INT8_ARRAY](_j_s_v_m.md), [JSVM_UINT8_ARRAY](_j_s_v_m.md), [JSVM_UINT8_CLAMPED_ARRAY](_j_s_v_m.md), [JSVM_INT16_ARRAY](_j_s_v_m.md),<br>[JSVM_UINT16_ARRAY](_j_s_v_m.md), [JSVM_INT32_ARRAY](_j_s_v_m.md), [JSVM_UINT32_ARRAY](_j_s_v_m.md), [JSVM_FLOAT32_ARRAY](_j_s_v_m.md),<br>[JSVM_FLOAT64_ARRAY](_j_s_v_m.md), [JSVM_BIGINT64_ARRAY](_j_s_v_m.md), [JSVM_BIGUINT64_ARRAY](_j_s_v_m.md)<br>} | TypedArray type. | 68| [JSVM_Status](_j_s_v_m.md#jsvm_status) {<br>[JSVM_OK](_j_s_v_m.md), [JSVM_INVALID_ARG](_j_s_v_m.md), [JSVM_OBJECT_EXPECTED](_j_s_v_m.md), [JSVM_STRING_EXPECTED](_j_s_v_m.md),<br>[JSVM_NAME_EXPECTED](_j_s_v_m.md), [JSVM_FUNCTION_EXPECTED](_j_s_v_m.md), [JSVM_NUMBER_EXPECTED](_j_s_v_m.md), [JSVM_BOOLEAN_EXPECTED](_j_s_v_m.md),<br>[JSVM_ARRAY_EXPECTED](_j_s_v_m.md), [JSVM_GENERIC_FAILURE](_j_s_v_m.md), [JSVM_PENDING_EXCEPTION](_j_s_v_m.md), [JSVM_CANCELLED](_j_s_v_m.md),<br>[JSVM_ESCAPE_CALLED_TWICE](_j_s_v_m.md), [JSVM_HANDLE_SCOPE_MISMATCH](_j_s_v_m.md), [JSVM_CALLBACK_SCOPE_MISMATCH](_j_s_v_m.md), [JSVM_QUEUE_FULL](_j_s_v_m.md),<br>[JSVM_CLOSING](_j_s_v_m.md), [JSVM_BIGINT_EXPECTED](_j_s_v_m.md), [JSVM_DATE_EXPECTED](_j_s_v_m.md), [JSVM_ARRAYBUFFER_EXPECTED](_j_s_v_m.md),<br>[JSVM_DETACHABLE_ARRAYBUFFER_EXPECTED](_j_s_v_m.md), [JSVM_WOULD_DEADLOCK](_j_s_v_m.md), [JSVM_NO_EXTERNAL_BUFFERS_ALLOWED](_j_s_v_m.md), [JSVM_CANNOT_RUN_JS](_j_s_v_m.md)<br>} | Complete status code indicating whether the JSVM-API call is successful or fails. | 69| [JSVM_KeyCollectionMode](_j_s_v_m.md#jsvm_keycollectionmode) { [JSVM_KEY_INCLUDE_PROTOTYPES](_j_s_v_m.md), [JSVM_KEY_OWN_ONLY](_j_s_v_m.md) } | Limited range of properties to be searched for. | 70| [JSVM_KeyFilter](_j_s_v_m.md#jsvm_keyfilter) {<br>[JSVM_KEY_ALL_PROPERTIES](_j_s_v_m.md) = 0, [JSVM_KEY_WRITABLE](_j_s_v_m.md) = 1, [JSVM_KEY_ENUMERABLE](_j_s_v_m.md) = 1 << 1, [JSVM_KEY_CONFIGURABLE](_j_s_v_m.md) = 1 << 2,<br>[JSVM_KEY_SKIP_STRINGS](_j_s_v_m.md) = 1 << 3, [JSVM_KEY_SKIP_SYMBOLS](_j_s_v_m.md) = 1 << 4<br>} | Property filter. You can use OR to construct a composite filter. | 71| [JSVM_KeyConversion](_j_s_v_m.md#jsvm_keyconversion) { [JSVM_KEY_KEEP_NUMBERS](_j_s_v_m.md), [JSVM_KEY_NUMBERS_TO_STRINGS](_j_s_v_m.md) } | Key conversion option. | 72| [JSVM_MemoryPressureLevel](_j_s_v_m.md#jsvm_memorypressurelevel) { [JSVM_MEMORY_PRESSURE_LEVEL_NONE](_j_s_v_m.md), [JSVM_MEMORY_PRESSURE_LEVEL_MODERATE](_j_s_v_m.md), [JSVM_MEMORY_PRESSURE_LEVEL_CRITICAL](_j_s_v_m.md) } | Memory pressure level. | 73| [JSVM_RegExpFlags](_j_s_v_m.md#jsvm_regexpflags) {<br>[JSVM_REGEXP_NONE](_j_s_v_m.md) = 0, [JSVM_REGEXP_GLOBAL](_j_s_v_m.md) = 1 << 0, [JSVM_REGEXP_IGNORE_CASE](_j_s_v_m.md) = 1 << 1, [JSVM_REGEXP_MULTILINE](_j_s_v_m.md) = 1 << 2,<br>[JSVM_REGEXP_STICKY](_j_s_v_m.md) = 1 << 3, [JSVM_REGEXP_UNICODE](_j_s_v_m.md) = 1 << 4, [JSVM_REGEXP_DOT_ALL](_j_s_v_m.md) = 1 << 5, [JSVM_REGEXP_LINEAR](_j_s_v_m.md) = 1 << 6,<br>[JSVM_REGEXP_HAS_INDICES](_j_s_v_m.md) = 1 << 7, [JSVM_REGEXP_UNICODE_SETS](_j_s_v_m.md) = 1 << 8<br>} | Regular expression flags. They can be used to enable a set of flags. | 74| [JSVM_InitializedFlag](_j_s_v_m.md#jsvm_initializedflag) { [JSVM_ZERO_INITIALIZED](_j_s_v_m.md), [JSVM_UNINITIALIZED](_j_s_v_m.md) } | Initialization flag. | 75| [JSVM_WasmOptLevel](_j_s_v_m.md#jsvm_wasmoptlevel) { [JSVM_WASM_OPT_BASELINE](_j_s_v_m.md) = 10, [JSVM_WASM_OPT_HIGH](_j_s_v_m.md) = 20 } | WebAssembly function optimization level. | 76| [JSVM_CacheType](_j_s_v_m.md#jsvm_cachetype) { [JSVM_CACHE_TYPE_JS](_j_s_v_m.md), [JSVM_CACHE_TYPE_WASM](_j_s_v_m.md) } | Cache type. | 77