1425bb815Sopenharmony_ci# JerryScript types
2425bb815Sopenharmony_ci
3425bb815Sopenharmony_ci## jerry_init_flag_t
4425bb815Sopenharmony_ci
5425bb815Sopenharmony_ciEnum that contains the following elements:
6425bb815Sopenharmony_ci
7425bb815Sopenharmony_ci - JERRY_INIT_EMPTY - empty flag set
8425bb815Sopenharmony_ci - JERRY_INIT_SHOW_OPCODES - dump byte-code to log after parse
9425bb815Sopenharmony_ci - JERRY_INIT_SHOW_REGEXP_OPCODES - dump regexp byte-code to log after compilation
10425bb815Sopenharmony_ci - JERRY_INIT_MEM_STATS - dump memory statistics
11425bb815Sopenharmony_ci - JERRY_INIT_MEM_STATS_SEPARATE - **deprecated**, dump memory statistics and reset peak values after parse
12425bb815Sopenharmony_ci - JERRY_INIT_DEBUGGER - **deprecated**, an unused placeholder now
13425bb815Sopenharmony_ci
14425bb815Sopenharmony_ci*Changed in version 2.0*: JERRY_INIT_MEM_STATS_SEPARATE and JERRY_INIT_DEBUGGER are now deprecated and not used internally.
15425bb815Sopenharmony_ci
16425bb815Sopenharmony_ci## jerry_type_t
17425bb815Sopenharmony_ci
18425bb815Sopenharmony_ciEnum that contains JerryScript API value types:
19425bb815Sopenharmony_ci
20425bb815Sopenharmony_ci - JERRY_TYPE_NONE - no type information
21425bb815Sopenharmony_ci - JERRY_TYPE_UNDEFINED - undefined type
22425bb815Sopenharmony_ci - JERRY_TYPE_NULL - null type
23425bb815Sopenharmony_ci - JERRY_TYPE_BOOLEAN - boolean type
24425bb815Sopenharmony_ci - JERRY_TYPE_NUMBER - number type
25425bb815Sopenharmony_ci - JERRY_TYPE_STRING - string type
26425bb815Sopenharmony_ci - JERRY_TYPE_OBJECT - object type
27425bb815Sopenharmony_ci - JERRY_TYPE_FUNCTION - function type
28425bb815Sopenharmony_ci - JERRY_TYPE_ERROR - error/abort type
29425bb815Sopenharmony_ci - JERRY_TYPE_SYMBOL - symbol type
30425bb815Sopenharmony_ci
31425bb815Sopenharmony_ci*New in version 2.0*.
32425bb815Sopenharmony_ci
33425bb815Sopenharmony_ci## jerry_error_t
34425bb815Sopenharmony_ci
35425bb815Sopenharmony_ciPossible types of an error:
36425bb815Sopenharmony_ci
37425bb815Sopenharmony_ci - JERRY_ERROR_COMMON - common error
38425bb815Sopenharmony_ci - JERRY_ERROR_EVAL - eval error
39425bb815Sopenharmony_ci - JERRY_ERROR_RANGE - range error
40425bb815Sopenharmony_ci - JERRY_ERROR_REFERENCE - reference error
41425bb815Sopenharmony_ci - JERRY_ERROR_SYNTAX - syntax error
42425bb815Sopenharmony_ci - JERRY_ERROR_TYPE - type error
43425bb815Sopenharmony_ci - JERRY_ERROR_URI - URI error
44425bb815Sopenharmony_ci
45425bb815Sopenharmony_ciThere is also a special value `JERRY_ERROR_NONE` which is not an error type
46425bb815Sopenharmony_cithis value can only be returned by the [jerry_get_error_type](#jerry_get_error_type).
47425bb815Sopenharmony_ci
48425bb815Sopenharmony_ci*Changed in version 2.0*: The `JERRY_ERROR_NONE` was added to be used by the [jerry_get_error_type](#jerry_get_error_type) method.
49425bb815Sopenharmony_ci
50425bb815Sopenharmony_ci## jerry_feature_t
51425bb815Sopenharmony_ci
52425bb815Sopenharmony_ciPossible compile time enabled feature types:
53425bb815Sopenharmony_ci
54425bb815Sopenharmony_ci - JERRY_FEATURE_CPOINTER_32_BIT - 32 bit compressed pointers
55425bb815Sopenharmony_ci - JERRY_FEATURE_ERROR_MESSAGES - error messages
56425bb815Sopenharmony_ci - JERRY_FEATURE_JS_PARSER - js-parser
57425bb815Sopenharmony_ci - JERRY_FEATURE_MEM_STATS - memory statistics
58425bb815Sopenharmony_ci - JERRY_FEATURE_PARSER_DUMP - parser byte-code dumps
59425bb815Sopenharmony_ci - JERRY_FEATURE_REGEXP_DUMP - regexp byte-code dumps
60425bb815Sopenharmony_ci - JERRY_FEATURE_SNAPSHOT_SAVE - saving snapshot files
61425bb815Sopenharmony_ci - JERRY_FEATURE_SNAPSHOT_EXEC - executing snapshot files
62425bb815Sopenharmony_ci - JERRY_FEATURE_DEBUGGER - debugging
63425bb815Sopenharmony_ci - JERRY_FEATURE_VM_EXEC_STOP - stopping ECMAScript execution
64425bb815Sopenharmony_ci - JERRY_FEATURE_JSON - JSON support
65425bb815Sopenharmony_ci - JERRY_FEATURE_PROMISE - promise support
66425bb815Sopenharmony_ci - JERRY_FEATURE_TYPEDARRAY - Typedarray support
67425bb815Sopenharmony_ci - JERRY_FEATURE_DATE - Date support
68425bb815Sopenharmony_ci - JERRY_FEATURE_REGEXP - RegExp support
69425bb815Sopenharmony_ci - JERRY_FEATURE_LINE_INFO - line info available
70425bb815Sopenharmony_ci - JERRY_FEATURE_LOGGING - logging
71425bb815Sopenharmony_ci - JERRY_FEATURE_SYMBOL - symbol support
72425bb815Sopenharmony_ci - JERRY_FEATURE_DATAVIEW - DataView support
73425bb815Sopenharmony_ci - JERRY_FEATURE_PROXY - Proxy support
74425bb815Sopenharmony_ci - JERRY_FEATURE_MAP - Map support
75425bb815Sopenharmony_ci - JERRY_FEATURE_SET - Set support
76425bb815Sopenharmony_ci - JERRY_FEATURE_WEAKMAP - WeakMap support
77425bb815Sopenharmony_ci - JERRY_FEATURE_WEAKSET - WeakSet support
78425bb815Sopenharmony_ci
79425bb815Sopenharmony_ci*New in version 2.0*.
80425bb815Sopenharmony_ci*Changed in version 2.3* : Added `JERRY_FEATURE_WEAKMAP`, `JERRY_FEATURE_WEAKSET` values.
81425bb815Sopenharmony_ci
82425bb815Sopenharmony_ci## jerry_container_type_t
83425bb815Sopenharmony_ci
84425bb815Sopenharmony_ciContainer object types:
85425bb815Sopenharmony_ci
86425bb815Sopenharmony_ci - JERRY_CONTAINER_TYPE_INVALID - Invalid container
87425bb815Sopenharmony_ci - JERRY_CONTAINER_TYPE_MAP - Map type
88425bb815Sopenharmony_ci - JERRY_CONTAINER_TYPE_SET - Set type
89425bb815Sopenharmony_ci - JERRY_CONTAINER_TYPE_WEAKMAP - WeakMap type
90425bb815Sopenharmony_ci - JERRY_CONTAINER_TYPE_WEAKSET - WeakSet type
91425bb815Sopenharmony_ci
92425bb815Sopenharmony_ci *New in version 2.3*.
93425bb815Sopenharmony_ci
94425bb815Sopenharmony_ci## jerry_regexp_flags_t
95425bb815Sopenharmony_ci
96425bb815Sopenharmony_ciRegExp object optional flags:
97425bb815Sopenharmony_ci
98425bb815Sopenharmony_ci  - JERRY_REGEXP_FLAG_GLOBAL - global match; find all matches rather than stopping after the first match
99425bb815Sopenharmony_ci  - JERRY_REGEXP_FLAG_IGNORE_CASE - ignore case
100425bb815Sopenharmony_ci  - JERRY_REGEXP_FLAG_MULTILINE - multiline; treat beginning and end characters (^ and $) as working over
101425bb815Sopenharmony_ci  multiple lines (i.e., match the beginning or end of each line (delimited by \n or \r), not only the
102425bb815Sopenharmony_ci  very beginning or end of the whole input string)
103425bb815Sopenharmony_ci
104425bb815Sopenharmony_ci*New in version 2.0*.
105425bb815Sopenharmony_ci
106425bb815Sopenharmony_ci## jerry_parse_opts_t
107425bb815Sopenharmony_ci
108425bb815Sopenharmony_ciOption bits for [jerry_parse](#jerry_parse) and
109425bb815Sopenharmony_ci[jerry_parse_function](#jerry_parse_function) functions:
110425bb815Sopenharmony_ci
111425bb815Sopenharmony_ci - JERRY_PARSE_NO_OPTS - no options passed
112425bb815Sopenharmony_ci - JERRY_PARSE_STRICT_MODE - enable strict mode
113425bb815Sopenharmony_ci
114425bb815Sopenharmony_ci*New in version 2.0*.
115425bb815Sopenharmony_ci
116425bb815Sopenharmony_ci## jerry_gc_mode_t
117425bb815Sopenharmony_ci
118425bb815Sopenharmony_ciSet garbage collection operational mode
119425bb815Sopenharmony_ci
120425bb815Sopenharmony_ci - JERRY_GC_PRESSURE_LOW - free unused objects
121425bb815Sopenharmony_ci - JERRY_GC_PRESSURE_HIGH - free as much memory as possible
122425bb815Sopenharmony_ci
123425bb815Sopenharmony_ciThe difference between `JERRY_GC_PRESSURE_LOW` and `JERRY_GC_PRESSURE_HIGH`
124425bb815Sopenharmony_ciis that the former keeps memory allocated for performance improvements such
125425bb815Sopenharmony_cias property hash tables for large objects. The latter frees all possible
126425bb815Sopenharmony_cimemory blocks but the performance may drop after the garbage collection.
127425bb815Sopenharmony_ci
128425bb815Sopenharmony_ci*New in version 2.0*.
129425bb815Sopenharmony_ci
130425bb815Sopenharmony_ci## jerry_generate_snapshot_opts_t
131425bb815Sopenharmony_ci
132425bb815Sopenharmony_ciFlags for [jerry_generate_snapshot](#jerry_generate_snapshot) and
133425bb815Sopenharmony_ci[jerry_generate_function_snapshot](#jerry_generate_function_snapshot) functions:
134425bb815Sopenharmony_ci
135425bb815Sopenharmony_ci - JERRY_SNAPSHOT_SAVE_STATIC - generate static snapshot (see below)
136425bb815Sopenharmony_ci - JERRY_SNAPSHOT_SAVE_STRICT - strict source code provided
137425bb815Sopenharmony_ci
138425bb815Sopenharmony_ci**Generate static snapshots**
139425bb815Sopenharmony_ciSnapshots contain literal pools, and these literal pools contain references
140425bb815Sopenharmony_cito constant literals (strings, numbers, etc.). When a snapshot is executed,
141425bb815Sopenharmony_cithese literals are converted to jerry values and the literal pool entries
142425bb815Sopenharmony_ciare changed to their corresponding jerry value. To support this conversion,
143425bb815Sopenharmony_cithe literals and literal pools are copied into RAM even if the
144425bb815Sopenharmony_ci`JERRY_SNAPSHOT_EXEC_COPY_DATA` option is passed to
145425bb815Sopenharmony_ci[jerry_exec_snapshot](#jerry_exec_snapshot). This non-negligible memory
146425bb815Sopenharmony_ciconsumption can be avoided by using static snapshots. The literals of
147425bb815Sopenharmony_cithese snapshots are limited to magic strings and 28 bit signed integers,
148425bb815Sopenharmony_ciso their constant pools do not need to be loaded into the memory.
149425bb815Sopenharmony_ciHence these snapshots can be executed from ROM.
150425bb815Sopenharmony_ci
151425bb815Sopenharmony_ci***Important note:*** The [jerry_exec_snapshot](#jerry_exec_snapshot)
152425bb815Sopenharmony_cifunction rejects static snaphots unless the `JERRY_SNAPSHOT_EXEC_ALLOW_STATIC`
153425bb815Sopenharmony_cioption bit is set. The caller must also ensure that the same magic
154425bb815Sopenharmony_cistrings are set by [jerry_register_magic_strings](#jerry_register_magic_strings)
155425bb815Sopenharmony_ciwhen the snapshot is generated and executed. Furthermore the
156425bb815Sopenharmony_ci`JERRY_SNAPSHOT_EXEC_COPY_DATA` option is not allowed.
157425bb815Sopenharmony_ci
158425bb815Sopenharmony_ci*New in version 2.0*.
159425bb815Sopenharmony_ci
160425bb815Sopenharmony_ci## jerry_exec_snapshot_opts_t
161425bb815Sopenharmony_ci
162425bb815Sopenharmony_ciFlags for [jerry_exec_snapshot](#jerry_exec_snapshot) and
163425bb815Sopenharmony_ci[jerry_load_function_snapshot](#jerry_load_function_snapshot) functions:
164425bb815Sopenharmony_ci
165425bb815Sopenharmony_ci - JERRY_SNAPSHOT_EXEC_COPY_DATA - copy snapshot data into memory (see below)
166425bb815Sopenharmony_ci - JERRY_SNAPSHOT_EXEC_ALLOW_STATIC - allow executing static snapshots
167425bb815Sopenharmony_ci
168425bb815Sopenharmony_ci**Copy snapshot data into memory**
169425bb815Sopenharmony_ci
170425bb815Sopenharmony_ciBy default the snapshot buffer is expected to be present in memory until
171425bb815Sopenharmony_ci[jerry_cleanup](#jerry_cleanup) is called. For example `static const` buffers
172425bb815Sopenharmony_cicompiled into the application binary satisfy this requirement.
173425bb815Sopenharmony_ci
174425bb815Sopenharmony_ciIf the snapshot buffer is freed after [jerry_exec_snapshot](#jerry_exec_snapshot)
175425bb815Sopenharmony_ciis called the `JERRY_SNAPSHOT_EXEC_COPY_DATA` must be passed to copy the necessary
176425bb815Sopenharmony_ciparts of the snapshot buffer into memory.
177425bb815Sopenharmony_ci
178425bb815Sopenharmony_ciThe `JERRY_SNAPSHOT_EXEC_COPY_DATA` option is not allowed for static snapshots.
179425bb815Sopenharmony_ci
180425bb815Sopenharmony_ci*New in version 2.0*.
181425bb815Sopenharmony_ci
182425bb815Sopenharmony_ci## jerry_char_t
183425bb815Sopenharmony_ci
184425bb815Sopenharmony_ci**Summary**
185425bb815Sopenharmony_ci
186425bb815Sopenharmony_ciJerry's char value
187425bb815Sopenharmony_ci
188425bb815Sopenharmony_ci**Prototype**
189425bb815Sopenharmony_ci
190425bb815Sopenharmony_ci```c
191425bb815Sopenharmony_citypedef uint8_t jerry_char_t;
192425bb815Sopenharmony_ci```
193425bb815Sopenharmony_ci
194425bb815Sopenharmony_ci## jerry_size_t
195425bb815Sopenharmony_ci
196425bb815Sopenharmony_ci**Summary**
197425bb815Sopenharmony_ci
198425bb815Sopenharmony_ciJerry's size
199425bb815Sopenharmony_ci
200425bb815Sopenharmony_ci**Prototype**
201425bb815Sopenharmony_ci
202425bb815Sopenharmony_ci```c
203425bb815Sopenharmony_citypedef uint32_t jerry_size_t;
204425bb815Sopenharmony_ci```
205425bb815Sopenharmony_ci
206425bb815Sopenharmony_ci## jerry_length_t
207425bb815Sopenharmony_ci
208425bb815Sopenharmony_ci**Summary**
209425bb815Sopenharmony_ci
210425bb815Sopenharmony_ciJerry's length
211425bb815Sopenharmony_ci
212425bb815Sopenharmony_ci**Prototype**
213425bb815Sopenharmony_ci
214425bb815Sopenharmony_ci```c
215425bb815Sopenharmony_citypedef uint32_t jerry_length_t;
216425bb815Sopenharmony_ci```
217425bb815Sopenharmony_ci
218425bb815Sopenharmony_ci## jerry_value_t
219425bb815Sopenharmony_ci
220425bb815Sopenharmony_ci**Summary**
221425bb815Sopenharmony_ci
222425bb815Sopenharmony_ciJerryScript value can be a boolean, number, null, object, string or undefined. The value has an error flag,
223425bb815Sopenharmony_cithat indicates whether is an error or not. Every type has an error flag not only objects. The error flag should
224425bb815Sopenharmony_cibe cleared before the value is passed as an argument, otherwise it can lead to a type error. The error objects
225425bb815Sopenharmony_cicreated by API functions has the error flag set.
226425bb815Sopenharmony_ci
227425bb815Sopenharmony_ciReturned and created values by the API functions must be freed with
228425bb815Sopenharmony_ci[jerry_release_value](#jerry_release_value) when they are no longer needed.
229425bb815Sopenharmony_ci
230425bb815Sopenharmony_ci**Prototype**
231425bb815Sopenharmony_ci
232425bb815Sopenharmony_ci```c
233425bb815Sopenharmony_citypedef uint32_t jerry_value_t;
234425bb815Sopenharmony_ci```
235425bb815Sopenharmony_ci
236425bb815Sopenharmony_ci## jerry_context_data_manager_t
237425bb815Sopenharmony_ci
238425bb815Sopenharmony_ci**Summary**
239425bb815Sopenharmony_ci
240425bb815Sopenharmony_ciStructure that defines how a context data item will be initialized and deinitialized. JerryScript zeroes out the memory
241425bb815Sopenharmony_cifor the item by default, and if the `init_cb` field is not NULL, it will be called with the pointer to the memory as
242425bb815Sopenharmony_cian additional custom initializer. The `deinit_cb` (if non-`NULL`) is called during a call to `jerry_cleanup ()` to run
243425bb815Sopenharmony_ciany custom deinitialization *before* the VM has been fully cleaned up. The `finalize_cb` (if non-`NULL`) is also called
244425bb815Sopenharmony_ciduring a call to `jerry_cleanup ()` to run any custom deinitialization *after* the VM has been fully cleaned up.
245425bb815Sopenharmony_ciIf bytes_needed field is 0, no buffer is allocated for the manager, callback functions are called with NULL pointer.
246425bb815Sopenharmony_ci
247425bb815Sopenharmony_ci**Prototype**
248425bb815Sopenharmony_ci
249425bb815Sopenharmony_ci```c
250425bb815Sopenharmony_citypedef struct
251425bb815Sopenharmony_ci{
252425bb815Sopenharmony_ci  /**
253425bb815Sopenharmony_ci   * Callback responsible for initializing a context item, or NULL to zero out the memory. This is called lazily, the
254425bb815Sopenharmony_ci   * first time jerry_get_context_data () is called with this manager.
255425bb815Sopenharmony_ci   *
256425bb815Sopenharmony_ci   * @param [in] data The buffer that JerryScript allocated for the manager. The buffer is zeroed out. The size is
257425bb815Sopenharmony_ci   * determined by the bytes_needed field. The buffer is kept alive until jerry_cleanup () is called.
258425bb815Sopenharmony_ci   */
259425bb815Sopenharmony_ci  void (*init_cb) (void *data);
260425bb815Sopenharmony_ci
261425bb815Sopenharmony_ci  /**
262425bb815Sopenharmony_ci   * Callback responsible for deinitializing a context item, or NULL. This is called as part of jerry_cleanup (),
263425bb815Sopenharmony_ci   * right *before* the VM has been cleaned up. This is a good place to release strong references to jerry_value_t's
264425bb815Sopenharmony_ci   * that the manager may be holding.
265425bb815Sopenharmony_ci   * Note: because the VM has not been fully cleaned up yet, jerry_object_native_info_t free_cb's can still get called
266425bb815Sopenharmony_ci   * *after* all deinit_cb's have been run. See finalize_cb for a callback that is guaranteed to run *after* all
267425bb815Sopenharmony_ci   * free_cb's have been run.
268425bb815Sopenharmony_ci   *
269425bb815Sopenharmony_ci   * @param [in] data The buffer that JerryScript allocated for the manager.
270425bb815Sopenharmony_ci   */
271425bb815Sopenharmony_ci  void (*deinit_cb) (void *data);
272425bb815Sopenharmony_ci
273425bb815Sopenharmony_ci  /**
274425bb815Sopenharmony_ci   * Callback responsible for finalizing a context item, or NULL. This is called as part of jerry_cleanup (),
275425bb815Sopenharmony_ci   * right *after* the VM has been cleaned up and destroyed and jerry_... APIs cannot be called any more. At this point,
276425bb815Sopenharmony_ci   * all values in the VM have been cleaned up. This is a good place to clean up native state that can only be cleaned
277425bb815Sopenharmony_ci   * up at the very end when there are no more VM values around that may need to access that state.
278425bb815Sopenharmony_ci   *
279425bb815Sopenharmony_ci   * @param [in] data The buffer that JerryScript allocated for the manager. After returning from this callback,
280425bb815Sopenharmony_ci   * the data pointer may no longer be used.
281425bb815Sopenharmony_ci   */
282425bb815Sopenharmony_ci  void (*finalize_cb) (void *data);
283425bb815Sopenharmony_ci
284425bb815Sopenharmony_ci  /**
285425bb815Sopenharmony_ci   * Number of bytes to allocate for this manager. This is the size of the buffer that JerryScript will allocate on
286425bb815Sopenharmony_ci   * behalf of the manager. The pointer to this buffer is passed into init_cb, deinit_cb and finalize_cb. It is also
287425bb815Sopenharmony_ci   * returned from the jerry_get_context_data () API.
288425bb815Sopenharmony_ci   */
289425bb815Sopenharmony_ci  size_t bytes_needed;
290425bb815Sopenharmony_ci} jerry_context_data_manager_t;
291425bb815Sopenharmony_ci```
292425bb815Sopenharmony_ci
293425bb815Sopenharmony_ci*New in version 2.0*.
294425bb815Sopenharmony_ci
295425bb815Sopenharmony_ci## jerry_context_alloc_t
296425bb815Sopenharmony_ci
297425bb815Sopenharmony_ci**Summary**
298425bb815Sopenharmony_ci
299425bb815Sopenharmony_ciFunction type for allocating buffer for JerryScript context.
300425bb815Sopenharmony_ci
301425bb815Sopenharmony_ci**Prototype**
302425bb815Sopenharmony_ci
303425bb815Sopenharmony_ci```c
304425bb815Sopenharmony_citypedef void *(*jerry_context_alloc_t) (size_t size, void *cb_data_p);
305425bb815Sopenharmony_ci```
306425bb815Sopenharmony_ci
307425bb815Sopenharmony_ci- `size` - allocation size
308425bb815Sopenharmony_ci- `cb_data_p` - pointer to user data
309425bb815Sopenharmony_ci
310425bb815Sopenharmony_ci*New in version 2.0*.
311425bb815Sopenharmony_ci
312425bb815Sopenharmony_ci## jerry_context_t
313425bb815Sopenharmony_ci
314425bb815Sopenharmony_ci**Summary**
315425bb815Sopenharmony_ci
316425bb815Sopenharmony_ciAn opaque declaration of the JerryScript context structure.
317425bb815Sopenharmony_ci
318425bb815Sopenharmony_ci**Prototype**
319425bb815Sopenharmony_ci
320425bb815Sopenharmony_ci```c
321425bb815Sopenharmony_citypedef struct jerry_context_t jerry_context_t;
322425bb815Sopenharmony_ci```
323425bb815Sopenharmony_ci
324425bb815Sopenharmony_ci*New in version 2.0*.
325425bb815Sopenharmony_ci
326425bb815Sopenharmony_ci
327425bb815Sopenharmony_ci## jerry_binary_operation_t
328425bb815Sopenharmony_ci
329425bb815Sopenharmony_ciEnum that contains the supported binary operation types
330425bb815Sopenharmony_ci - JERRY_BIN_OP_EQUAL - equal comparison (==)
331425bb815Sopenharmony_ci - JERRY_BIN_OP_STRICT_EQUAL - strict equal comparison (===)
332425bb815Sopenharmony_ci - JERRY_BIN_OP_LESS - less relation (<)
333425bb815Sopenharmony_ci - JERRY_BIN_OP_LESS_EQUAL - less or equal relation (<=)
334425bb815Sopenharmony_ci - JERRY_BIN_OP_GREATER - greater relation (>)
335425bb815Sopenharmony_ci - JERRY_BIN_OP_GREATER_EQUAL - greater or equal relation (>=)
336425bb815Sopenharmony_ci - JERRY_BIN_OP_INSTANCEOF - instanceof operation
337425bb815Sopenharmony_ci - JERRY_BIN_OP_ADD - addition operator (+)
338425bb815Sopenharmony_ci - JERRY_BIN_OP_SUB - subtraction operator (-)
339425bb815Sopenharmony_ci - JERRY_BIN_OP_MUL - multiplication operator (*)
340425bb815Sopenharmony_ci - JERRY_BIN_OP_DIV - division operator (/)
341425bb815Sopenharmony_ci - JERRY_BIN_OP_REM - remainder operator (%)
342425bb815Sopenharmony_ci
343425bb815Sopenharmony_ci*New in version 2.0*.
344425bb815Sopenharmony_ci
345425bb815Sopenharmony_ci**See also**
346425bb815Sopenharmony_ci
347425bb815Sopenharmony_ci- [jerry_binary_operation](#jerry_binary_operation)
348425bb815Sopenharmony_ci
349425bb815Sopenharmony_ci## jerry_property_descriptor_t
350425bb815Sopenharmony_ci
351425bb815Sopenharmony_ci**Summary**
352425bb815Sopenharmony_ci
353425bb815Sopenharmony_ciDescription of ECMA property descriptor. This struct can be used
354425bb815Sopenharmony_cifor the [jerry_define_own_property](#jerry_define_own_property) method to
355425bb815Sopenharmony_ciconfigure how the property should be registered.
356425bb815Sopenharmony_ci
357425bb815Sopenharmony_ciThe naming scheme is similar to the JavaScript `Object.defineProperty` method.
358425bb815Sopenharmony_ci
359425bb815Sopenharmony_ciFields should be used in pairs. That is if the `is_value_defined` is set to `true`
360425bb815Sopenharmony_cithe `value` field should contain the value for the property.
361425bb815Sopenharmony_ci
362425bb815Sopenharmony_ci**Prototype**
363425bb815Sopenharmony_ci
364425bb815Sopenharmony_ci```c
365425bb815Sopenharmony_citypedef struct
366425bb815Sopenharmony_ci{
367425bb815Sopenharmony_ci  /** Is [[Value]] defined? */
368425bb815Sopenharmony_ci  bool is_value_defined;
369425bb815Sopenharmony_ci
370425bb815Sopenharmony_ci  /** Is [[Get]] defined? */
371425bb815Sopenharmony_ci  bool is_get_defined;
372425bb815Sopenharmony_ci
373425bb815Sopenharmony_ci  /** Is [[Set]] defined? */
374425bb815Sopenharmony_ci  bool is_set_defined;
375425bb815Sopenharmony_ci
376425bb815Sopenharmony_ci  /** Is [[Writable]] defined? */
377425bb815Sopenharmony_ci  bool is_writable_defined;
378425bb815Sopenharmony_ci
379425bb815Sopenharmony_ci  /** [[Writable]] */
380425bb815Sopenharmony_ci  bool is_writable;
381425bb815Sopenharmony_ci
382425bb815Sopenharmony_ci  /** Is [[Enumerable]] defined? */
383425bb815Sopenharmony_ci  bool is_enumerable_defined;
384425bb815Sopenharmony_ci
385425bb815Sopenharmony_ci  /** [[Enumerable]] */
386425bb815Sopenharmony_ci  bool is_enumerable;
387425bb815Sopenharmony_ci
388425bb815Sopenharmony_ci  /** Is [[Configurable]] defined? */
389425bb815Sopenharmony_ci  bool is_configurable_defined;
390425bb815Sopenharmony_ci
391425bb815Sopenharmony_ci  /** [[Configurable]] */
392425bb815Sopenharmony_ci  bool is_configurable;
393425bb815Sopenharmony_ci
394425bb815Sopenharmony_ci  /** [[Value]] */
395425bb815Sopenharmony_ci  jerry_value_t value;
396425bb815Sopenharmony_ci
397425bb815Sopenharmony_ci  /** [[Get]] */
398425bb815Sopenharmony_ci  jerry_value_t getter;
399425bb815Sopenharmony_ci
400425bb815Sopenharmony_ci  /** [[Set]] */
401425bb815Sopenharmony_ci  jerry_value_t setter;
402425bb815Sopenharmony_ci} jerry_property_descriptor_t;
403425bb815Sopenharmony_ci```
404425bb815Sopenharmony_ci
405425bb815Sopenharmony_ci**See also**
406425bb815Sopenharmony_ci
407425bb815Sopenharmony_ci- [jerry_define_own_property](#jerry_define_own_property)
408425bb815Sopenharmony_ci
409425bb815Sopenharmony_ci## jerry_heap_stats_t
410425bb815Sopenharmony_ci
411425bb815Sopenharmony_ci**Summary**
412425bb815Sopenharmony_ci
413425bb815Sopenharmony_ciDescription of JerryScript heap memory stats.
414425bb815Sopenharmony_ciIt is for memory profiling.
415425bb815Sopenharmony_ci
416425bb815Sopenharmony_ci**Prototype**
417425bb815Sopenharmony_ci
418425bb815Sopenharmony_ci```c
419425bb815Sopenharmony_citypedef struct
420425bb815Sopenharmony_ci{
421425bb815Sopenharmony_ci  size_t version /**< the version of the stats struct */
422425bb815Sopenharmony_ci  size_t size; /**< heap total size */
423425bb815Sopenharmony_ci  size_t allocated_bytes; /**< currently allocated bytes */
424425bb815Sopenharmony_ci  size_t peak_allocated_bytes; /**< peak allocated bytes */
425425bb815Sopenharmony_ci  size_t reserved[4]; /**< padding for future extensions */
426425bb815Sopenharmony_ci} jerry_heap_stats_t;
427425bb815Sopenharmony_ci```
428425bb815Sopenharmony_ci
429425bb815Sopenharmony_ci*New in version 2.0*.
430425bb815Sopenharmony_ci
431425bb815Sopenharmony_ci**See also**
432425bb815Sopenharmony_ci
433425bb815Sopenharmony_ci- [jerry_get_memory_stats](#jerry_get_memory_stats)
434425bb815Sopenharmony_ci
435425bb815Sopenharmony_ci## jerry_external_handler_t
436425bb815Sopenharmony_ci
437425bb815Sopenharmony_ci**Summary**
438425bb815Sopenharmony_ci
439425bb815Sopenharmony_ciType of an external function handler
440425bb815Sopenharmony_ci
441425bb815Sopenharmony_ci**Prototype**
442425bb815Sopenharmony_ci
443425bb815Sopenharmony_ci```c
444425bb815Sopenharmony_citypedef jerry_value_t (*jerry_external_handler_t) (const jerry_value_t function_obj,
445425bb815Sopenharmony_ci                                                   const jerry_value_t this_val,
446425bb815Sopenharmony_ci                                                   const jerry_value_t args_p[],
447425bb815Sopenharmony_ci                                                   const jerry_length_t args_count);
448425bb815Sopenharmony_ci```
449425bb815Sopenharmony_ci
450425bb815Sopenharmony_ci- `function_object` - the JavaScript function object which was invoked.
451425bb815Sopenharmony_ci- `this_val` - the `this` value provided for the function call.
452425bb815Sopenharmony_ci- `args_p` - the function arguments, array of JavaScript values.
453425bb815Sopenharmony_ci- `args_count` - the number of arguments.
454425bb815Sopenharmony_ci- return value
455425bb815Sopenharmony_ci  - The function's return value. If there is no return value, use [jerry_create_undefined()](#jerry_create_undefined).
456425bb815Sopenharmony_ci
457425bb815Sopenharmony_ci**See also**
458425bb815Sopenharmony_ci
459425bb815Sopenharmony_ci- [jerry_create_external_function](#jerry_create_external_function)
460425bb815Sopenharmony_ci
461425bb815Sopenharmony_ci## jerry_object_native_free_callback_t
462425bb815Sopenharmony_ci
463425bb815Sopenharmony_ci**Summary**
464425bb815Sopenharmony_ci
465425bb815Sopenharmony_ciNative free callback of an object. It is used in `jerry_object_native_info_t` and for external Array buffers.
466425bb815Sopenharmony_ci
467425bb815Sopenharmony_ci*Note*:
468425bb815Sopenharmony_ci - Referred values by this method must have at least 1 reference. (Correct API usage satisfies this condition)
469425bb815Sopenharmony_ci
470425bb815Sopenharmony_ci**Prototype**
471425bb815Sopenharmony_ci
472425bb815Sopenharmony_ci```c
473425bb815Sopenharmony_citypedef void (*jerry_object_native_free_callback_t) (void *native_p);
474425bb815Sopenharmony_ci```
475425bb815Sopenharmony_ci
476425bb815Sopenharmony_ci*New in version 2.0*: Renamed from `jerry_object_free_callback_t`.
477425bb815Sopenharmony_ci*Changed in version 2.2*: API calls are once again allowed. (See note)
478425bb815Sopenharmony_ci
479425bb815Sopenharmony_ci**See also**
480425bb815Sopenharmony_ci
481425bb815Sopenharmony_ci- [jerry_object_native_info_t](#jerry_object_native_info_t)
482425bb815Sopenharmony_ci- [jerry_create_arraybuffer_external](#jerry_create_arraybuffer_external)
483425bb815Sopenharmony_ci
484425bb815Sopenharmony_ci## jerry_object_native_info_t
485425bb815Sopenharmony_ci
486425bb815Sopenharmony_ci**Summary**
487425bb815Sopenharmony_ci
488425bb815Sopenharmony_ciThe type information of the native pointer.
489425bb815Sopenharmony_ciIt includes the free callback that will be called when associated JavaScript object is garbage collected. It can be left NULL in case it is not needed.
490425bb815Sopenharmony_ci
491425bb815Sopenharmony_ciTypically, one would create a `static const jerry_object_native_info_t` for
492425bb815Sopenharmony_cieach distinct C type for which a pointer is used with
493425bb815Sopenharmony_ci`jerry_set_object_native_pointer ()` and `jerry_get_object_native_pointer ()`.
494425bb815Sopenharmony_ciThis way, each `const jerry_object_native_info_t *` pointer address value itself
495425bb815Sopenharmony_ciuniquely identifies the C type of the native pointer.
496425bb815Sopenharmony_ci
497425bb815Sopenharmony_ciSee [jerry_get_object_native_pointer](#jerry_get_object_native_pointer)
498425bb815Sopenharmony_cifor a best-practice code example.
499425bb815Sopenharmony_ci
500425bb815Sopenharmony_ci**Prototype**
501425bb815Sopenharmony_ci
502425bb815Sopenharmony_ci```c
503425bb815Sopenharmony_citypedef struct
504425bb815Sopenharmony_ci{
505425bb815Sopenharmony_ci  jerry_object_native_free_callback_t free_cb;
506425bb815Sopenharmony_ci} jerry_object_native_info_t;
507425bb815Sopenharmony_ci```
508425bb815Sopenharmony_ci
509425bb815Sopenharmony_ci*New in version 2.0*.
510425bb815Sopenharmony_ci
511425bb815Sopenharmony_ci**See also**
512425bb815Sopenharmony_ci
513425bb815Sopenharmony_ci- [jerry_set_object_native_pointer](#jerry_set_object_native_pointer)
514425bb815Sopenharmony_ci- [jerry_get_object_native_pointer](#jerry_get_object_native_pointer)
515425bb815Sopenharmony_ci
516425bb815Sopenharmony_ci## jerry_object_property_foreach_t
517425bb815Sopenharmony_ci
518425bb815Sopenharmony_ci**Summary**
519425bb815Sopenharmony_ci
520425bb815Sopenharmony_ciFunction type used as a callback for the [jerry_foreach_object_property](#jerry_foreach_object_property)
521425bb815Sopenharmony_cimethod. A function with this type must return "true" to continue the iteration or "false" to finish the
522425bb815Sopenharmony_ciiteration on the object's properties.
523425bb815Sopenharmony_ci
524425bb815Sopenharmony_ci**Prototype**
525425bb815Sopenharmony_ci
526425bb815Sopenharmony_ci```c
527425bb815Sopenharmony_citypedef bool (*jerry_object_property_foreach_t) (const jerry_value_t property_name,
528425bb815Sopenharmony_ci                                                 const jerry_value_t property_value,
529425bb815Sopenharmony_ci                                                 void *user_data_p);
530425bb815Sopenharmony_ci```
531425bb815Sopenharmony_ci
532425bb815Sopenharmony_ci- `property_name` - a property name, this is not always a string.
533425bb815Sopenharmony_ci- `property_value` - the value for the given property.
534425bb815Sopenharmony_ci- `user_data_p` - optional user data pointer supplied via the (jerry_foreach_object_property)[#jerry_foreach_object_property] method.
535425bb815Sopenharmony_ci- return value
536425bb815Sopenharmony_ci  - true, to continue the iteration
537425bb815Sopenharmony_ci  - false, to stop the iteration
538425bb815Sopenharmony_ci
539425bb815Sopenharmony_ci**See also**
540425bb815Sopenharmony_ci
541425bb815Sopenharmony_ci- [jerry_foreach_object_property](#jerry_foreach_object_property)
542425bb815Sopenharmony_ci
543425bb815Sopenharmony_ci## jerry_objects_foreach_t
544425bb815Sopenharmony_ci
545425bb815Sopenharmony_ci**Summary**
546425bb815Sopenharmony_ci
547425bb815Sopenharmony_ciFunction type used as a callback for the (jerry_objects_foreach)[#jerry_objects_foreach] method.
548425bb815Sopenharmony_ciA function with this type must return "true" to continue the iteration or "false" to finish the
549425bb815Sopenharmony_ciiteration on the object's properties.
550425bb815Sopenharmony_ci
551425bb815Sopenharmony_ci**Prototype**
552425bb815Sopenharmony_ci
553425bb815Sopenharmony_ci```c
554425bb815Sopenharmony_citypedef bool (*jerry_objects_foreach_t) (const jerry_value_t object,
555425bb815Sopenharmony_ci                                         void *user_data_p);
556425bb815Sopenharmony_ci```
557425bb815Sopenharmony_ci
558425bb815Sopenharmony_ci- `object` - the current JavaScript object in the for-each iteration.
559425bb815Sopenharmony_ci- `user_data_p` - optional user data pointer supplied via the (jerry_objects_foreach)[#jerry_objects_foreach] method.
560425bb815Sopenharmony_ci- return value
561425bb815Sopenharmony_ci  - true, to continue the iteration
562425bb815Sopenharmony_ci  - false, to stop the iteration
563425bb815Sopenharmony_ci
564425bb815Sopenharmony_ci*New in version 2.0*.
565425bb815Sopenharmony_ci
566425bb815Sopenharmony_ci**See also**
567425bb815Sopenharmony_ci
568425bb815Sopenharmony_ci- [jerry_objects_foreach](#jerry_objects_foreach)
569425bb815Sopenharmony_ci
570425bb815Sopenharmony_ci## jerry_objects_foreach_by_native_info_t
571425bb815Sopenharmony_ci
572425bb815Sopenharmony_ci**Summary**
573425bb815Sopenharmony_ci
574425bb815Sopenharmony_ciFunction type used as a callback for the (jerry_objects_foreach_by_native_info)[#jerry_objects_foreach_by_native_info]
575425bb815Sopenharmony_cimethod. A function with this type must return "true" to continue the iteration or "false" to finish the
576425bb815Sopenharmony_ciiteration on the object's properties.
577425bb815Sopenharmony_ci
578425bb815Sopenharmony_ci**Prototype**
579425bb815Sopenharmony_ci
580425bb815Sopenharmony_ci```c
581425bb815Sopenharmony_citypedef bool (*jerry_objects_foreach_by_native_info_t) (const jerry_value_t object,
582425bb815Sopenharmony_ci                                                        void *object_data_p,
583425bb815Sopenharmony_ci                                                        void *user_data_p);
584425bb815Sopenharmony_ci```
585425bb815Sopenharmony_ci
586425bb815Sopenharmony_ci- `object` - the current JavaScript object in the for-each iteration.
587425bb815Sopenharmony_ci- `object_data_p` - the current object's native data pointer.
588425bb815Sopenharmony_ci- `user_data_p` - optional user data pointer supplied via the (jerry_objects_foreach_by_native_info)[#jerry_objects_foreach_by_native_info] method.
589425bb815Sopenharmony_ci- return value
590425bb815Sopenharmony_ci  - true, to continue the iteration
591425bb815Sopenharmony_ci  - false, to stop the iteration
592425bb815Sopenharmony_ci
593425bb815Sopenharmony_ci*New in version 2.0*.
594425bb815Sopenharmony_ci
595425bb815Sopenharmony_ci**See also**
596425bb815Sopenharmony_ci
597425bb815Sopenharmony_ci- [jerry_objects_foreach_by_native_info](#jerry_objects_foreach_by_native_info)
598425bb815Sopenharmony_ci
599425bb815Sopenharmony_ci## jerry_vm_exec_stop_callback_t
600425bb815Sopenharmony_ci
601425bb815Sopenharmony_ci**Summary**
602425bb815Sopenharmony_ci
603425bb815Sopenharmony_ciCallback which tells whether the ECMAScript execution should be stopped.
604425bb815Sopenharmony_ciIf it returns with undefined value the ECMAScript execution continues.
605425bb815Sopenharmony_ciOtherwise the result is thrown by the engine (if the error flag is not
606425bb815Sopenharmony_ciset for the returned value the engine automatically sets it). The
607425bb815Sopenharmony_cicallback function might be called again even if it threw an error.
608425bb815Sopenharmony_ciIn this case the function must throw the same error again.
609425bb815Sopenharmony_ci
610425bb815Sopenharmony_ci**Prototype**
611425bb815Sopenharmony_ci
612425bb815Sopenharmony_ci```c
613425bb815Sopenharmony_citypedef jerry_value_t (*jerry_vm_exec_stop_callback_t) (void *user_p);
614425bb815Sopenharmony_ci```
615425bb815Sopenharmony_ci
616425bb815Sopenharmony_ci*New in version 2.0*.
617425bb815Sopenharmony_ci
618425bb815Sopenharmony_ci**See also**
619425bb815Sopenharmony_ci
620425bb815Sopenharmony_ci- [jerry_set_vm_exec_stop_callback](#jerry_set_vm_exec_stop_callback)
621425bb815Sopenharmony_ci
622425bb815Sopenharmony_ci## jerry_promise_state_t
623425bb815Sopenharmony_ci
624425bb815Sopenharmony_ciEnum which describes the state of a Promise.
625425bb815Sopenharmony_ci
626425bb815Sopenharmony_ciPossible values:
627425bb815Sopenharmony_ci
628425bb815Sopenharmony_ci - JERRY_PROMISE_STATE_NONE - Invalid/Unknown state (possibly called on a non-promise object).
629425bb815Sopenharmony_ci - JERRY_PROMISE_STATE_PENDING - Promise is in "Pending" state.
630425bb815Sopenharmony_ci - JERRY_PROMISE_STATE_FULFILLED - Promise is in "Fulfilled" state.
631425bb815Sopenharmony_ci - JERRY_PROMISE_STATE_REJECTED - Promise is in "Rejected" state.
632425bb815Sopenharmony_ci
633425bb815Sopenharmony_ci*New in version 2.2*.
634425bb815Sopenharmony_ci
635425bb815Sopenharmony_ci**See also**
636425bb815Sopenharmony_ci
637425bb815Sopenharmony_ci- [jerry_get_promise_result](#jerry_get_promise_result)
638425bb815Sopenharmony_ci
639425bb815Sopenharmony_ci## jerry_typedarray_type_t
640425bb815Sopenharmony_ci
641425bb815Sopenharmony_ciEnum which describes the TypedArray types.
642425bb815Sopenharmony_ciPossible values:
643425bb815Sopenharmony_ci
644425bb815Sopenharmony_ci - JERRY_TYPEDARRAY_UINT8 - represents the Uint8Array TypedArray
645425bb815Sopenharmony_ci - JERRY_TYPEDARRAY_UINT8CLAMPED - represents the Uint8ClampedArray TypedArray
646425bb815Sopenharmony_ci - JERRY_TYPEDARRAY_INT8 - represents the Int8Array TypedArray
647425bb815Sopenharmony_ci - JERRY_TYPEDARRAY_UINT16 - represents the Uint16Array TypedArray
648425bb815Sopenharmony_ci - JERRY_TYPEDARRAY_INT16 - represents the Int16Array TypedArray
649425bb815Sopenharmony_ci - JERRY_TYPEDARRAY_UINT32 - represents the Uint32Array TypedArray
650425bb815Sopenharmony_ci - JERRY_TYPEDARRAY_INT32 - represents the Int32Array TypedArray
651425bb815Sopenharmony_ci - JERRY_TYPEDARRAY_FLOAT32 - represents the Float32Array TypedArray
652425bb815Sopenharmony_ci - JERRY_TYPEDARRAY_FLOAT64 - represents the Float64Array TypedArray
653425bb815Sopenharmony_ci - JERRY_TYPEDARRAY_INVALID - represents an invalid TypedArray
654425bb815Sopenharmony_ci
655425bb815Sopenharmony_ciAPI functions can return the `JERRY_TYPEDARRAY_INVALID` value if the
656425bb815Sopenharmony_ciTypedArray support is not in the engine.
657425bb815Sopenharmony_ci
658425bb815Sopenharmony_ci*New in version 2.0*.
659425bb815Sopenharmony_ci
660425bb815Sopenharmony_ci**See also**
661425bb815Sopenharmony_ci
662425bb815Sopenharmony_ci- [jerry_get_typedarray_type](#jerry_get_typedarray_type)
663425bb815Sopenharmony_ci
664425bb815Sopenharmony_ci
665425bb815Sopenharmony_ci# General engine functions
666425bb815Sopenharmony_ci
667425bb815Sopenharmony_ci## jerry_init
668425bb815Sopenharmony_ci
669425bb815Sopenharmony_ci**Summary**
670425bb815Sopenharmony_ci
671425bb815Sopenharmony_ciInitializes the JerryScript engine, making it possible to run JavaScript code and perform operations
672425bb815Sopenharmony_cion JavaScript values. This is required for almost all API functions.
673425bb815Sopenharmony_ci
674425bb815Sopenharmony_ci**Prototype**
675425bb815Sopenharmony_ci
676425bb815Sopenharmony_ci```c
677425bb815Sopenharmony_civoid
678425bb815Sopenharmony_cijerry_init (jerry_init_flag_t flags)
679425bb815Sopenharmony_ci```
680425bb815Sopenharmony_ci
681425bb815Sopenharmony_ci`flags` - combination of various engine configuration flags [jerry_init_flag_t](#jerry_init_flag_t).
682425bb815Sopenharmony_ci
683425bb815Sopenharmony_ci**Example**
684425bb815Sopenharmony_ci
685425bb815Sopenharmony_ci[doctest]: # ()
686425bb815Sopenharmony_ci
687425bb815Sopenharmony_ci```c
688425bb815Sopenharmony_ci#include "jerryscript.h"
689425bb815Sopenharmony_ci
690425bb815Sopenharmony_ciint
691425bb815Sopenharmony_cimain (void)
692425bb815Sopenharmony_ci{
693425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_SHOW_OPCODES | JERRY_INIT_SHOW_REGEXP_OPCODES);
694425bb815Sopenharmony_ci
695425bb815Sopenharmony_ci  // ...
696425bb815Sopenharmony_ci
697425bb815Sopenharmony_ci  jerry_cleanup ();
698425bb815Sopenharmony_ci  return 0;
699425bb815Sopenharmony_ci}
700425bb815Sopenharmony_ci```
701425bb815Sopenharmony_ci
702425bb815Sopenharmony_ci**See also**
703425bb815Sopenharmony_ci
704425bb815Sopenharmony_ci- [jerry_init_flag_t](#jerry_init_flag_t)
705425bb815Sopenharmony_ci- [jerry_cleanup](#jerry_cleanup)
706425bb815Sopenharmony_ci
707425bb815Sopenharmony_ci
708425bb815Sopenharmony_ci## jerry_cleanup
709425bb815Sopenharmony_ci
710425bb815Sopenharmony_ci**Summary**
711425bb815Sopenharmony_ci
712425bb815Sopenharmony_ciFinish JavaScript engine execution, freeing memory and JavaScript values.
713425bb815Sopenharmony_ci
714425bb815Sopenharmony_ci*Note*: JavaScript values, received from engine, will be inaccessible after the cleanup.
715425bb815Sopenharmony_ci
716425bb815Sopenharmony_ci**Prototype**
717425bb815Sopenharmony_ci
718425bb815Sopenharmony_ci```c
719425bb815Sopenharmony_civoid
720425bb815Sopenharmony_cijerry_cleanup (void);
721425bb815Sopenharmony_ci```
722425bb815Sopenharmony_ci
723425bb815Sopenharmony_ci**See also**
724425bb815Sopenharmony_ci
725425bb815Sopenharmony_ci- [jerry_init](#jerry_init)
726425bb815Sopenharmony_ci
727425bb815Sopenharmony_ci
728425bb815Sopenharmony_ci## jerry_get_context_data
729425bb815Sopenharmony_ci
730425bb815Sopenharmony_ci**Summary**
731425bb815Sopenharmony_ci
732425bb815Sopenharmony_ciRetrieve a pointer to the item stored within the current context by the given manager.
733425bb815Sopenharmony_ci
734425bb815Sopenharmony_ci*Note*: Since internally the pointer to a manager's context data item is linked to the next such pointer in a linked
735425bb815Sopenharmony_ci        list, it is inadvisable to invoke too many different managers, because doing so will increase the time it takes
736425bb815Sopenharmony_ci        to retrieve a manager's context data item, degrading performance. For example, try to keep the number of
737425bb815Sopenharmony_ci        managers below five.
738425bb815Sopenharmony_ci
739425bb815Sopenharmony_ci**Prototype**
740425bb815Sopenharmony_ci
741425bb815Sopenharmony_ci```c
742425bb815Sopenharmony_civoid *
743425bb815Sopenharmony_cijerry_get_context_data (const jerry_context_data_manager *manager_p);
744425bb815Sopenharmony_ci```
745425bb815Sopenharmony_ci
746425bb815Sopenharmony_ci- `manager_p`: the manager of this context data item.
747425bb815Sopenharmony_ci- return value: the item created by `manager_p` when `jerry_get_context_data ()` was first called, or a new item created
748425bb815Sopenharmony_ci  by `manager_p`, which will be stored for future identical calls to `jerry_get_context_data ()`, and which will be
749425bb815Sopenharmony_ci  deinitialized using the `deinit_cb` callback provided by `manager_p` when the context will be destroyed.
750425bb815Sopenharmony_ci
751425bb815Sopenharmony_ci*New in version 2.0*.
752425bb815Sopenharmony_ci
753425bb815Sopenharmony_ci**Example**
754425bb815Sopenharmony_ci
755425bb815Sopenharmony_ci[doctest]: # (test="compile")
756425bb815Sopenharmony_ci
757425bb815Sopenharmony_ci```c
758425bb815Sopenharmony_ci#include "jerryscript.h"
759425bb815Sopenharmony_ci
760425bb815Sopenharmony_citypedef struct
761425bb815Sopenharmony_ci{
762425bb815Sopenharmony_ci  int my_data1;
763425bb815Sopenharmony_ci  double my_data2;
764425bb815Sopenharmony_ci  char *my_data3;
765425bb815Sopenharmony_ci} my_context_data_t;
766425bb815Sopenharmony_ci
767425bb815Sopenharmony_ci/* Define how context items will be initialized. */
768425bb815Sopenharmony_cistatic void
769425bb815Sopenharmony_cimy_context_data_new (void *user_data_p)
770425bb815Sopenharmony_ci{
771425bb815Sopenharmony_ci  my_context_data_t *my_data_p = (my_context_data_t *) user_data_p;
772425bb815Sopenharmony_ci
773425bb815Sopenharmony_ci  /*
774425bb815Sopenharmony_ci   * Initialize my_data_p. JerryScript will store it on the current context and return it whenever
775425bb815Sopenharmony_ci   * jerry_get_context_data () is called with a pointer to my_manager as defined below.
776425bb815Sopenharmony_ci   */
777425bb815Sopenharmony_ci}
778425bb815Sopenharmony_ci
779425bb815Sopenharmony_ci/* Define how context items will be deinitialized */
780425bb815Sopenharmony_cistatic void
781425bb815Sopenharmony_cimy_context_data_free (void *user_data_p)
782425bb815Sopenharmony_ci{
783425bb815Sopenharmony_ci  my_context_data_t *my_data_p = ((my_context_data_t *) user_data_p);
784425bb815Sopenharmony_ci
785425bb815Sopenharmony_ci  /* Perform any necessary cleanup on my_data. JerryScript will free the pointer after this function completes. */
786425bb815Sopenharmony_ci}
787425bb815Sopenharmony_ci
788425bb815Sopenharmony_ci/* Wrap the creation and destruction functions into a manager */
789425bb815Sopenharmony_cistatic const jerry_context_data_manager_t my_manager =
790425bb815Sopenharmony_ci{
791425bb815Sopenharmony_ci  .init_cb = my_context_data_new,
792425bb815Sopenharmony_ci  .deinit_cb = my_context_data_free,
793425bb815Sopenharmony_ci  .bytes_needed = sizeof (my_context_data_t)
794425bb815Sopenharmony_ci};
795425bb815Sopenharmony_ci
796425bb815Sopenharmony_ci/*
797425bb815Sopenharmony_ci * Then, in some function in your code, you can retrieve an item of type my_context_data_t from the currently active
798425bb815Sopenharmony_ci * context such that JerryScript will create and store such an item if one was not previously created
799425bb815Sopenharmony_ci */
800425bb815Sopenharmony_cistatic void
801425bb815Sopenharmony_cisomeplace_in_the_code (void)
802425bb815Sopenharmony_ci{
803425bb815Sopenharmony_ci  my_context_data_t *my_data = (my_context_data_t *) jerry_get_context_data (&my_manager);
804425bb815Sopenharmony_ci  /* Perform useful things using the data found in my_data */
805425bb815Sopenharmony_ci}
806425bb815Sopenharmony_ci```
807425bb815Sopenharmony_ci
808425bb815Sopenharmony_ci
809425bb815Sopenharmony_ci## jerry_register_magic_strings
810425bb815Sopenharmony_ci
811425bb815Sopenharmony_ci**Summary**
812425bb815Sopenharmony_ci
813425bb815Sopenharmony_ciRegisters an external magic string array.
814425bb815Sopenharmony_ci
815425bb815Sopenharmony_ci*Notes*:
816425bb815Sopenharmony_ci  - The strings in the array must be sorted by size at first, then lexicographically.
817425bb815Sopenharmony_ci  - The maximum number of external magic strings is limited to 2147483648 (UINT32_MAX / 2).
818425bb815Sopenharmony_ci    If there are more than 2147483648 external magic strings the extra is cropped.
819425bb815Sopenharmony_ci
820425bb815Sopenharmony_ci**Prototype**
821425bb815Sopenharmony_ci
822425bb815Sopenharmony_ci```c
823425bb815Sopenharmony_civoid
824425bb815Sopenharmony_cijerry_register_magic_strings  (const jerry_char_t * const *ex_str_items_p,
825425bb815Sopenharmony_ci                               uint32_t count,
826425bb815Sopenharmony_ci                               const jerry_length_t *str_lengths_p);
827425bb815Sopenharmony_ci```
828425bb815Sopenharmony_ci
829425bb815Sopenharmony_ci- `ex_str_items_p` - character arrays, representing external magic strings' contents
830425bb815Sopenharmony_ci- `count` - number of elements in `ext_str_items_p` array
831425bb815Sopenharmony_ci- `str_lengths_p` - array of lengths for each magic string
832425bb815Sopenharmony_ci
833425bb815Sopenharmony_ci*Changed in version 2.0*: The first function argument type was changed.
834425bb815Sopenharmony_ci
835425bb815Sopenharmony_ci**Example**
836425bb815Sopenharmony_ci
837425bb815Sopenharmony_ci[doctest]: # ()
838425bb815Sopenharmony_ci
839425bb815Sopenharmony_ci```c
840425bb815Sopenharmony_ci#include "jerryscript.h"
841425bb815Sopenharmony_ci
842425bb815Sopenharmony_ciint
843425bb815Sopenharmony_cimain (void)
844425bb815Sopenharmony_ci{
845425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
846425bb815Sopenharmony_ci
847425bb815Sopenharmony_ci  // must be static, because 'jerry_register_magic_strings' does not copy
848425bb815Sopenharmony_ci  // the items must be sorted by size at first, then lexicographically
849425bb815Sopenharmony_ci  static const jerry_char_t * const magic_string_items[] = {
850425bb815Sopenharmony_ci                                                             (const jerry_char_t *) "magicstring1",
851425bb815Sopenharmony_ci                                                             (const jerry_char_t *) "magicstring2",
852425bb815Sopenharmony_ci                                                             (const jerry_char_t *) "magicstring3"
853425bb815Sopenharmony_ci                                                           };
854425bb815Sopenharmony_ci  uint32_t num_magic_string_items = (uint32_t) (sizeof (magic_string_items) / sizeof (jerry_char_t *));
855425bb815Sopenharmony_ci
856425bb815Sopenharmony_ci  // must be static, because 'jerry_register_magic_strings' does not copy
857425bb815Sopenharmony_ci  static const jerry_length_t magic_string_lengths[] = {
858425bb815Sopenharmony_ci                                                         12,
859425bb815Sopenharmony_ci                                                         12,
860425bb815Sopenharmony_ci                                                         12
861425bb815Sopenharmony_ci                                                       };
862425bb815Sopenharmony_ci  jerry_register_magic_strings (magic_string_items, num_magic_string_items, magic_string_lengths);
863425bb815Sopenharmony_ci}
864425bb815Sopenharmony_ci```
865425bb815Sopenharmony_ci
866425bb815Sopenharmony_ci**See also**
867425bb815Sopenharmony_ci
868425bb815Sopenharmony_ci- [jerry_init](#jerry_init)
869425bb815Sopenharmony_ci- [jerry_cleanup](#jerry_cleanup)
870425bb815Sopenharmony_ci- [jerry_get_literals_from_snapshot](#jerry_get_literals_from_snapshot)
871425bb815Sopenharmony_ci
872425bb815Sopenharmony_ci
873425bb815Sopenharmony_ci## jerry_get_memory_stats
874425bb815Sopenharmony_ci
875425bb815Sopenharmony_ci**Summary**
876425bb815Sopenharmony_ci
877425bb815Sopenharmony_ciGet heap memory stats.
878425bb815Sopenharmony_ci
879425bb815Sopenharmony_ci**Notes**:
880425bb815Sopenharmony_ci- The engine must be initialized with the `JERRY_INIT_MEM_STATS` option to allow
881425bb815Sopenharmony_ci  heap statistic collections. See [jerry_init](#jerry_init)
882425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_MEM_STATS`) and can be checked
883425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_MEM_STATS` feature enum value,
884425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
885425bb815Sopenharmony_ci
886425bb815Sopenharmony_ci
887425bb815Sopenharmony_ci**Prototype**
888425bb815Sopenharmony_ci
889425bb815Sopenharmony_ci```c
890425bb815Sopenharmony_cibool
891425bb815Sopenharmony_cijerry_get_memory_stats (jerry_heap_stats_t *out_stats_p);
892425bb815Sopenharmony_ci```
893425bb815Sopenharmony_ci
894425bb815Sopenharmony_ci- `out_stats_p` - out parameter, that provides the heap statistics.
895425bb815Sopenharmony_ci- return value
896425bb815Sopenharmony_ci  - true, if stats were written into the `out_stats_p` pointer.
897425bb815Sopenharmony_ci  - false, otherwise. Usually it is because the `JERRY_FEATURE_MEM_STATS` feature is not enabled.
898425bb815Sopenharmony_ci
899425bb815Sopenharmony_ci*New in version 2.0*.
900425bb815Sopenharmony_ci
901425bb815Sopenharmony_ci**Example**
902425bb815Sopenharmony_ci
903425bb815Sopenharmony_ci```c
904425bb815Sopenharmony_cijerry_init (JERRY_INIT_MEM_STATS);
905425bb815Sopenharmony_ci// ...
906425bb815Sopenharmony_ci
907425bb815Sopenharmony_cijerry_heap_stats_t stats = {0};
908425bb815Sopenharmony_cibool get_stats_ret = jerry_get_memory_stats (&stats);
909425bb815Sopenharmony_ci```
910425bb815Sopenharmony_ci
911425bb815Sopenharmony_ci**See also**
912425bb815Sopenharmony_ci
913425bb815Sopenharmony_ci- [jerry_init](#jerry_init)
914425bb815Sopenharmony_ci
915425bb815Sopenharmony_ci
916425bb815Sopenharmony_ci## jerry_gc
917425bb815Sopenharmony_ci
918425bb815Sopenharmony_ci**Summary**
919425bb815Sopenharmony_ci
920425bb815Sopenharmony_ciPerforms garbage collection.
921425bb815Sopenharmony_ci
922425bb815Sopenharmony_ci**Prototype**
923425bb815Sopenharmony_ci
924425bb815Sopenharmony_ci```c
925425bb815Sopenharmony_civoid
926425bb815Sopenharmony_cijerry_gc (jerry_gc_mode_t mode);
927425bb815Sopenharmony_ci```
928425bb815Sopenharmony_ci
929425bb815Sopenharmony_ci- `mode` - operational mode, see [jerry_gc_mode_t](#jerry_gc_mode_t)
930425bb815Sopenharmony_ci
931425bb815Sopenharmony_ci*Changed in version 2.0*: Added `mode` argument.
932425bb815Sopenharmony_ci
933425bb815Sopenharmony_ci**Example**
934425bb815Sopenharmony_ci
935425bb815Sopenharmony_ci[doctest]: # ()
936425bb815Sopenharmony_ci
937425bb815Sopenharmony_ci```c
938425bb815Sopenharmony_ci#include "jerryscript.h"
939425bb815Sopenharmony_ci
940425bb815Sopenharmony_ciint
941425bb815Sopenharmony_cimain (void)
942425bb815Sopenharmony_ci{
943425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
944425bb815Sopenharmony_ci
945425bb815Sopenharmony_ci  jerry_value_t object_value = jerry_create_object ();
946425bb815Sopenharmony_ci  jerry_release_value (object_value);
947425bb815Sopenharmony_ci
948425bb815Sopenharmony_ci  jerry_gc (JERRY_GC_PRESSURE_LOW);
949425bb815Sopenharmony_ci
950425bb815Sopenharmony_ci  jerry_cleanup ();
951425bb815Sopenharmony_ci}
952425bb815Sopenharmony_ci```
953425bb815Sopenharmony_ci
954425bb815Sopenharmony_ci**See also**
955425bb815Sopenharmony_ci
956425bb815Sopenharmony_ci- [jerry_gc_mode_t](#jerry_gc_mode_t)
957425bb815Sopenharmony_ci- [jerry_init](#jerry_init)
958425bb815Sopenharmony_ci- [jerry_cleanup](#jerry_cleanup)
959425bb815Sopenharmony_ci
960425bb815Sopenharmony_ci# Parser and executor functions
961425bb815Sopenharmony_ci
962425bb815Sopenharmony_ciFunctions to parse and run JavaScript source code.
963425bb815Sopenharmony_ci
964425bb815Sopenharmony_ci## jerry_run_simple
965425bb815Sopenharmony_ci
966425bb815Sopenharmony_ci**Summary**
967425bb815Sopenharmony_ci
968425bb815Sopenharmony_ciThe simplest way to run JavaScript.
969425bb815Sopenharmony_ci
970425bb815Sopenharmony_ci**Prototype**
971425bb815Sopenharmony_ci
972425bb815Sopenharmony_ci```c
973425bb815Sopenharmony_cibool
974425bb815Sopenharmony_cijerry_run_simple (const jerry_char_t *script_source_p,
975425bb815Sopenharmony_ci                  size_t script_source_size,
976425bb815Sopenharmony_ci                  jerry_init_flag_t flags);
977425bb815Sopenharmony_ci```
978425bb815Sopenharmony_ci
979425bb815Sopenharmony_ci- `script_source_p` - source code, it must be a valid utf8 string.
980425bb815Sopenharmony_ci- `script_source_size` - size of source code buffer, in bytes.
981425bb815Sopenharmony_ci- `jerry_init_flag_t` - combination of various engine configuration flags
982425bb815Sopenharmony_ci- return value
983425bb815Sopenharmony_ci  - true, if run was successful
984425bb815Sopenharmony_ci  - false, otherwise
985425bb815Sopenharmony_ci
986425bb815Sopenharmony_ci**Example**
987425bb815Sopenharmony_ci
988425bb815Sopenharmony_ci[doctest]: # ()
989425bb815Sopenharmony_ci
990425bb815Sopenharmony_ci```c
991425bb815Sopenharmony_ci#include "jerryscript.h"
992425bb815Sopenharmony_ci
993425bb815Sopenharmony_ciint
994425bb815Sopenharmony_cimain (void)
995425bb815Sopenharmony_ci{
996425bb815Sopenharmony_ci  const jerry_char_t script[] = "print ('Hello, World!');";
997425bb815Sopenharmony_ci
998425bb815Sopenharmony_ci  jerry_run_simple (script, sizeof (script) - 1, JERRY_INIT_EMPTY);
999425bb815Sopenharmony_ci  return 0;
1000425bb815Sopenharmony_ci}
1001425bb815Sopenharmony_ci```
1002425bb815Sopenharmony_ci
1003425bb815Sopenharmony_ci**See also**
1004425bb815Sopenharmony_ci
1005425bb815Sopenharmony_ci- [jerry_init](#jerry_init)
1006425bb815Sopenharmony_ci- [jerry_cleanup](#jerry_cleanup)
1007425bb815Sopenharmony_ci- [jerry_parse](#jerry_parse)
1008425bb815Sopenharmony_ci- [jerry_run](#jerry_run)
1009425bb815Sopenharmony_ci
1010425bb815Sopenharmony_ci
1011425bb815Sopenharmony_ci## jerry_parse
1012425bb815Sopenharmony_ci
1013425bb815Sopenharmony_ci**Summary**
1014425bb815Sopenharmony_ci
1015425bb815Sopenharmony_ciParse script and construct an EcmaScript function. The lexical environment is
1016425bb815Sopenharmony_ciset to the global lexical environment. The resource name can be used by
1017425bb815Sopenharmony_cidebugging systems to provide line / backtrace info.
1018425bb815Sopenharmony_ci
1019425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
1020425bb815Sopenharmony_ciis no longer needed.
1021425bb815Sopenharmony_ci
1022425bb815Sopenharmony_ci**Prototype**
1023425bb815Sopenharmony_ci
1024425bb815Sopenharmony_ci```c
1025425bb815Sopenharmony_cijerry_value_t
1026425bb815Sopenharmony_cijerry_parse (const jerry_char_t *resource_name_p, /**< resource name (usually a file name) */
1027425bb815Sopenharmony_ci             size_t resource_name_length, /**< length of resource name */
1028425bb815Sopenharmony_ci             const jerry_char_t *source_p,
1029425bb815Sopenharmony_ci             size_t source_size,
1030425bb815Sopenharmony_ci             uint32_t parse_opts);
1031425bb815Sopenharmony_ci```
1032425bb815Sopenharmony_ci
1033425bb815Sopenharmony_ci- `resource_name_p` - resource name, usually a file name (must be a valid UTF8 string).
1034425bb815Sopenharmony_ci- `resource_name_length` - size of the resource name, in bytes.
1035425bb815Sopenharmony_ci- `source_p` - string, containing source code to parse (must be a valid UTF8 string).
1036425bb815Sopenharmony_ci- `source_size` - size of the string, in bytes.
1037425bb815Sopenharmony_ci- `parse_opts` - any combination of [jerry_parse_opts_t](#jerry_parse_opts_t) flags.
1038425bb815Sopenharmony_ci- return value
1039425bb815Sopenharmony_ci  - function object value, if script was parsed successfully,
1040425bb815Sopenharmony_ci  - thrown error, otherwise
1041425bb815Sopenharmony_ci
1042425bb815Sopenharmony_ci*Changed in version 2.0*: Added `resource_name_p`, and `resource_name_length` arguments.
1043425bb815Sopenharmony_ci
1044425bb815Sopenharmony_ci**Example**
1045425bb815Sopenharmony_ci
1046425bb815Sopenharmony_ci[doctest]: # ()
1047425bb815Sopenharmony_ci
1048425bb815Sopenharmony_ci```c
1049425bb815Sopenharmony_ci#include "jerryscript.h"
1050425bb815Sopenharmony_ci
1051425bb815Sopenharmony_ciint
1052425bb815Sopenharmony_cimain (void)
1053425bb815Sopenharmony_ci{
1054425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
1055425bb815Sopenharmony_ci
1056425bb815Sopenharmony_ci  const jerry_char_t script[] = "print ('Hello, World!');";
1057425bb815Sopenharmony_ci
1058425bb815Sopenharmony_ci  jerry_value_t parsed_code = jerry_parse (NULL, 0, script, sizeof (script) - 1, JERRY_PARSE_NO_OPTS);
1059425bb815Sopenharmony_ci  jerry_release_value (parsed_code);
1060425bb815Sopenharmony_ci
1061425bb815Sopenharmony_ci  jerry_cleanup ();
1062425bb815Sopenharmony_ci  return 0;
1063425bb815Sopenharmony_ci}
1064425bb815Sopenharmony_ci```
1065425bb815Sopenharmony_ci
1066425bb815Sopenharmony_ci**See also**
1067425bb815Sopenharmony_ci
1068425bb815Sopenharmony_ci- [jerry_run](#jerry_run)
1069425bb815Sopenharmony_ci- [jerry_parse_function](#jerry_parse_function)
1070425bb815Sopenharmony_ci
1071425bb815Sopenharmony_ci## jerry_parse_function
1072425bb815Sopenharmony_ci
1073425bb815Sopenharmony_ci**Summary**
1074425bb815Sopenharmony_ci
1075425bb815Sopenharmony_ciParse function source code and construct an ECMAScript
1076425bb815Sopenharmony_cifunction. The function arguments and function body are
1077425bb815Sopenharmony_cipassed as separated arguments. The lexical environment
1078425bb815Sopenharmony_ciis set to the global lexical environment. The resource
1079425bb815Sopenharmony_ciname (usually a file name) is also passed to this function
1080425bb815Sopenharmony_ciwhich is used by the debugger to find the source code.
1081425bb815Sopenharmony_ci
1082425bb815Sopenharmony_ci*Note*: The returned value must be freed with [jerry_release_value](#jerry_release_value) when it
1083425bb815Sopenharmony_ciis no longer needed.
1084425bb815Sopenharmony_ci
1085425bb815Sopenharmony_ci**Prototype**
1086425bb815Sopenharmony_ci
1087425bb815Sopenharmony_ci```c
1088425bb815Sopenharmony_cijerry_value_t
1089425bb815Sopenharmony_cijerry_parse_function (const jerry_char_t *resource_name_p, /**< resource name (usually a file name) */
1090425bb815Sopenharmony_ci                      size_t resource_name_length, /**< length of resource name */
1091425bb815Sopenharmony_ci                      const jerry_char_t *arg_list_p, /**< script source */
1092425bb815Sopenharmony_ci                      size_t arg_list_size, /**< script source size */
1093425bb815Sopenharmony_ci                      const jerry_char_t *source_p, /**< script source */
1094425bb815Sopenharmony_ci                      size_t source_size, /**< script source size */
1095425bb815Sopenharmony_ci                      uint32_t parse_opts) /**< strict mode */
1096425bb815Sopenharmony_ci```
1097425bb815Sopenharmony_ci
1098425bb815Sopenharmony_ci- `resource_name_p` - resource name, usually a file name (must be a valid UTF8 string).
1099425bb815Sopenharmony_ci- `resource_name_length` - size of the resource name, in bytes.
1100425bb815Sopenharmony_ci- `arg_list_p` - argument list of the function (must be a valid UTF8 string).
1101425bb815Sopenharmony_ci- `arg_list_size` - size of the argument list, in bytes.
1102425bb815Sopenharmony_ci- `source_p` - string, containing source code to parse (must be a valid UTF8 string).
1103425bb815Sopenharmony_ci- `source_size` - size of the string, in bytes.
1104425bb815Sopenharmony_ci- `parse_opts` - any combination of [jerry_parse_opts_t](#jerry_parse_opts_t) flags.
1105425bb815Sopenharmony_ci- return value
1106425bb815Sopenharmony_ci  - function object value, if script was parsed successfully,
1107425bb815Sopenharmony_ci  - thrown error, otherwise
1108425bb815Sopenharmony_ci
1109425bb815Sopenharmony_ci*New in version 2.0*.
1110425bb815Sopenharmony_ci
1111425bb815Sopenharmony_ci**Example**
1112425bb815Sopenharmony_ci
1113425bb815Sopenharmony_ci[doctest]: # (name="02.API-REFERENCE-parse-func.c")
1114425bb815Sopenharmony_ci
1115425bb815Sopenharmony_ci```c
1116425bb815Sopenharmony_ci#include <stdio.h>
1117425bb815Sopenharmony_ci#include <string.h>
1118425bb815Sopenharmony_ci#include "jerryscript.h"
1119425bb815Sopenharmony_ci
1120425bb815Sopenharmony_ciint
1121425bb815Sopenharmony_cimain (void)
1122425bb815Sopenharmony_ci{
1123425bb815Sopenharmony_ci  int return_value = 1;
1124425bb815Sopenharmony_ci
1125425bb815Sopenharmony_ci  /* Initialize engine */
1126425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
1127425bb815Sopenharmony_ci
1128425bb815Sopenharmony_ci  /* Parse the 'function (a,b) { return a + b; }' function */
1129425bb815Sopenharmony_ci  const char function_args[] = "a, b";
1130425bb815Sopenharmony_ci  const char function_source[] = "return a + b";
1131425bb815Sopenharmony_ci
1132425bb815Sopenharmony_ci  jerry_value_t parsed_function = jerry_parse_function (NULL,
1133425bb815Sopenharmony_ci                                                        0,
1134425bb815Sopenharmony_ci                                                        (const jerry_char_t *) function_args,
1135425bb815Sopenharmony_ci                                                        strlen (function_args),
1136425bb815Sopenharmony_ci                                                        (const jerry_char_t *) function_source,
1137425bb815Sopenharmony_ci                                                        strlen (function_source),
1138425bb815Sopenharmony_ci                                                        JERRY_PARSE_NO_OPTS);
1139425bb815Sopenharmony_ci
1140425bb815Sopenharmony_ci  if (!jerry_value_is_error (parsed_function))
1141425bb815Sopenharmony_ci  {
1142425bb815Sopenharmony_ci    /* Run the parsed function */
1143425bb815Sopenharmony_ci    jerry_value_t args[] = {
1144425bb815Sopenharmony_ci        jerry_create_number (3),
1145425bb815Sopenharmony_ci        jerry_create_number (55),
1146425bb815Sopenharmony_ci    };
1147425bb815Sopenharmony_ci    jerry_size_t argc = sizeof (args) / sizeof (args[0]);
1148425bb815Sopenharmony_ci    jerry_value_t ret_value = jerry_call_function (parsed_function,
1149425bb815Sopenharmony_ci                                                   jerry_create_undefined(),
1150425bb815Sopenharmony_ci                                                   args,
1151425bb815Sopenharmony_ci                                                   argc);
1152425bb815Sopenharmony_ci
1153425bb815Sopenharmony_ci    /* Process result value */
1154425bb815Sopenharmony_ci    if (jerry_value_is_number (ret_value)) {
1155425bb815Sopenharmony_ci        double value = jerry_get_number_value (ret_value);
1156425bb815Sopenharmony_ci        printf ("Function result: %lf\n", value);
1157425bb815Sopenharmony_ci
1158425bb815Sopenharmony_ci        return_value = !(value == (3 + 55));
1159425bb815Sopenharmony_ci    }
1160425bb815Sopenharmony_ci
1161425bb815Sopenharmony_ci    /* Release the function arguments */
1162425bb815Sopenharmony_ci    for (jerry_size_t idx = 0; idx < argc; idx++) {
1163425bb815Sopenharmony_ci        jerry_release_value (args[idx]);
1164425bb815Sopenharmony_ci    }
1165425bb815Sopenharmony_ci
1166425bb815Sopenharmony_ci    /* Returned value must be freed */
1167425bb815Sopenharmony_ci    jerry_release_value (ret_value);
1168425bb815Sopenharmony_ci  }
1169425bb815Sopenharmony_ci
1170425bb815Sopenharmony_ci  /* Parsed function must be freed */
1171425bb815Sopenharmony_ci  jerry_release_value (parsed_function);
1172425bb815Sopenharmony_ci
1173425bb815Sopenharmony_ci  /* Cleanup engine */
1174425bb815Sopenharmony_ci  jerry_cleanup ();
1175425bb815Sopenharmony_ci
1176425bb815Sopenharmony_ci  return return_value;
1177425bb815Sopenharmony_ci}
1178425bb815Sopenharmony_ci```
1179425bb815Sopenharmony_ci
1180425bb815Sopenharmony_ci**See also**
1181425bb815Sopenharmony_ci
1182425bb815Sopenharmony_ci- [jerry_call_function](#jerry_call_function)
1183425bb815Sopenharmony_ci
1184425bb815Sopenharmony_ci
1185425bb815Sopenharmony_ci## jerry_run
1186425bb815Sopenharmony_ci
1187425bb815Sopenharmony_ci**Summary**
1188425bb815Sopenharmony_ci
1189425bb815Sopenharmony_ciRun an EcmaScript function created by `jerry_parse`.
1190425bb815Sopenharmony_ci
1191425bb815Sopenharmony_ci*Notes*:
1192425bb815Sopenharmony_ci  - The code should be previously parsed with `jerry_parse`.
1193425bb815Sopenharmony_ci  - Returned value must be freed with [jerry_release_value](#jerry_release_value)
1194425bb815Sopenharmony_ci    when it is no longer needed.
1195425bb815Sopenharmony_ci
1196425bb815Sopenharmony_ci**Prototype**
1197425bb815Sopenharmony_ci
1198425bb815Sopenharmony_ci```c
1199425bb815Sopenharmony_cijerry_value_t
1200425bb815Sopenharmony_cijerry_run (const jerry_value_t func_val);
1201425bb815Sopenharmony_ci```
1202425bb815Sopenharmony_ci
1203425bb815Sopenharmony_ci- `func_val` - function to run
1204425bb815Sopenharmony_ci- return value
1205425bb815Sopenharmony_ci  - result of bytecode, if run was successful
1206425bb815Sopenharmony_ci  - thrown error, otherwise
1207425bb815Sopenharmony_ci
1208425bb815Sopenharmony_ci**Example**
1209425bb815Sopenharmony_ci
1210425bb815Sopenharmony_ci[doctest]: # ()
1211425bb815Sopenharmony_ci
1212425bb815Sopenharmony_ci```c
1213425bb815Sopenharmony_ci#include "jerryscript.h"
1214425bb815Sopenharmony_ci
1215425bb815Sopenharmony_ciint
1216425bb815Sopenharmony_cimain (void)
1217425bb815Sopenharmony_ci{
1218425bb815Sopenharmony_ci  const jerry_char_t script[] = "print ('Hello, World!');";
1219425bb815Sopenharmony_ci
1220425bb815Sopenharmony_ci  /* Initialize engine */
1221425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
1222425bb815Sopenharmony_ci
1223425bb815Sopenharmony_ci  /* Setup Global scope code */
1224425bb815Sopenharmony_ci  jerry_value_t parsed_code = jerry_parse (NULL, 0, script, sizeof (script) - 1, JERRY_PARSE_NO_OPTS);
1225425bb815Sopenharmony_ci
1226425bb815Sopenharmony_ci  if (!jerry_value_is_error (parsed_code))
1227425bb815Sopenharmony_ci  {
1228425bb815Sopenharmony_ci    /* Execute the parsed source code in the Global scope */
1229425bb815Sopenharmony_ci    jerry_value_t ret_value = jerry_run (parsed_code);
1230425bb815Sopenharmony_ci
1231425bb815Sopenharmony_ci    /* Returned value must be freed */
1232425bb815Sopenharmony_ci    jerry_release_value (ret_value);
1233425bb815Sopenharmony_ci  }
1234425bb815Sopenharmony_ci
1235425bb815Sopenharmony_ci  /* Parsed source code must be freed */
1236425bb815Sopenharmony_ci  jerry_release_value (parsed_code);
1237425bb815Sopenharmony_ci
1238425bb815Sopenharmony_ci  /* Cleanup engine */
1239425bb815Sopenharmony_ci  jerry_cleanup ();
1240425bb815Sopenharmony_ci}
1241425bb815Sopenharmony_ci```
1242425bb815Sopenharmony_ci
1243425bb815Sopenharmony_ci**See also**
1244425bb815Sopenharmony_ci
1245425bb815Sopenharmony_ci- [jerry_parse](#jerry_parse)
1246425bb815Sopenharmony_ci
1247425bb815Sopenharmony_ci
1248425bb815Sopenharmony_ci## jerry_eval
1249425bb815Sopenharmony_ci
1250425bb815Sopenharmony_ci**Summary**
1251425bb815Sopenharmony_ci
1252425bb815Sopenharmony_ciPerform JavaScript `eval` function call (ECMA-262 v5.1 sec-15.1.2.1).
1253425bb815Sopenharmony_ci
1254425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
1255425bb815Sopenharmony_ciis no longer needed.
1256425bb815Sopenharmony_ci
1257425bb815Sopenharmony_ci**Prototype**
1258425bb815Sopenharmony_ci
1259425bb815Sopenharmony_ci```c
1260425bb815Sopenharmony_cijerry_value_t
1261425bb815Sopenharmony_cijerry_eval (const jerry_char_t *source_p,
1262425bb815Sopenharmony_ci            size_t source_size,
1263425bb815Sopenharmony_ci            uint32_t parse_opts);
1264425bb815Sopenharmony_ci```
1265425bb815Sopenharmony_ci
1266425bb815Sopenharmony_ci- `source_p` - source code to evaluate, it must be a valid utf8 string.
1267425bb815Sopenharmony_ci- `source_size` - length of the source code
1268425bb815Sopenharmony_ci- `parse_opts` - any combination of [jerry_parse_opts_t](#jerry_parse_opts_t) flags.
1269425bb815Sopenharmony_ci- return value - result of eval, may be an error value.
1270425bb815Sopenharmony_ci
1271425bb815Sopenharmony_ci**Example**
1272425bb815Sopenharmony_ci
1273425bb815Sopenharmony_ci```c
1274425bb815Sopenharmony_ci{
1275425bb815Sopenharmony_ci  jerry_value_t ret_val = jerry_eval (str_to_eval,
1276425bb815Sopenharmony_ci                                      strlen (str_to_eval),
1277425bb815Sopenharmony_ci                                      JERRY_PARSE_NO_OPTS);
1278425bb815Sopenharmony_ci}
1279425bb815Sopenharmony_ci```
1280425bb815Sopenharmony_ci
1281425bb815Sopenharmony_ci**See also**
1282425bb815Sopenharmony_ci
1283425bb815Sopenharmony_ci- [jerry_create_external_function](#jerry_create_external_function)
1284425bb815Sopenharmony_ci- [jerry_external_handler_t](#jerry_external_handler_t)
1285425bb815Sopenharmony_ci
1286425bb815Sopenharmony_ci## jerry_run_all_enqueued_jobs
1287425bb815Sopenharmony_ci
1288425bb815Sopenharmony_ci**Summary**
1289425bb815Sopenharmony_ci
1290425bb815Sopenharmony_ciRun enqueued Promise jobs until the first thrown error or until all get executed.
1291425bb815Sopenharmony_ci
1292425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
1293425bb815Sopenharmony_ciis no longer needed.
1294425bb815Sopenharmony_ci
1295425bb815Sopenharmony_ci**Prototype**
1296425bb815Sopenharmony_ci
1297425bb815Sopenharmony_ci```c
1298425bb815Sopenharmony_cijerry_value_t
1299425bb815Sopenharmony_cijerry_run_all_enqueued_jobs (void)
1300425bb815Sopenharmony_ci```
1301425bb815Sopenharmony_ci
1302425bb815Sopenharmony_ci- return value - result of last executed job, may be error value.
1303425bb815Sopenharmony_ci
1304425bb815Sopenharmony_ci*New in version 2.0*.
1305425bb815Sopenharmony_ci
1306425bb815Sopenharmony_ci**Example**
1307425bb815Sopenharmony_ci
1308425bb815Sopenharmony_ci[doctest]: # ()
1309425bb815Sopenharmony_ci
1310425bb815Sopenharmony_ci```c
1311425bb815Sopenharmony_ci#include "jerryscript.h"
1312425bb815Sopenharmony_ci
1313425bb815Sopenharmony_ciint
1314425bb815Sopenharmony_cimain (void)
1315425bb815Sopenharmony_ci{
1316425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
1317425bb815Sopenharmony_ci
1318425bb815Sopenharmony_ci  const jerry_char_t script[] = "new Promise(function(f,r) { f('Hello, World!'); }).then(function(x) { print(x); });";
1319425bb815Sopenharmony_ci
1320425bb815Sopenharmony_ci  jerry_value_t parsed_code = jerry_parse (NULL, 0, script, sizeof (script) - 1, JERRY_PARSE_NO_OPTS);
1321425bb815Sopenharmony_ci  jerry_value_t script_value = jerry_run (parsed_code);
1322425bb815Sopenharmony_ci  jerry_value_t job_value = jerry_run_all_enqueued_jobs ();
1323425bb815Sopenharmony_ci
1324425bb815Sopenharmony_ci  jerry_release_value (job_value);
1325425bb815Sopenharmony_ci  jerry_release_value (script_value);
1326425bb815Sopenharmony_ci  jerry_release_value (parsed_code);
1327425bb815Sopenharmony_ci
1328425bb815Sopenharmony_ci  jerry_cleanup ();
1329425bb815Sopenharmony_ci  return 0;
1330425bb815Sopenharmony_ci}
1331425bb815Sopenharmony_ci```
1332425bb815Sopenharmony_ci
1333425bb815Sopenharmony_ci
1334425bb815Sopenharmony_ci# Get the global context
1335425bb815Sopenharmony_ci
1336425bb815Sopenharmony_ci## jerry_get_global_object
1337425bb815Sopenharmony_ci
1338425bb815Sopenharmony_ci**Summary**
1339425bb815Sopenharmony_ci
1340425bb815Sopenharmony_ciGet the Global object.
1341425bb815Sopenharmony_ci
1342425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
1343425bb815Sopenharmony_ciis no longer needed.
1344425bb815Sopenharmony_ci
1345425bb815Sopenharmony_ci**Prototype**
1346425bb815Sopenharmony_ci
1347425bb815Sopenharmony_ci```c
1348425bb815Sopenharmony_cijerry_value_t
1349425bb815Sopenharmony_cijerry_get_global_object (void);
1350425bb815Sopenharmony_ci```
1351425bb815Sopenharmony_ci
1352425bb815Sopenharmony_ci- return value - api value of global object
1353425bb815Sopenharmony_ci
1354425bb815Sopenharmony_ci**Example**
1355425bb815Sopenharmony_ci
1356425bb815Sopenharmony_ci```c
1357425bb815Sopenharmony_ci{
1358425bb815Sopenharmony_ci  jerry_value_t glob_obj_val = jerry_get_global_object ();
1359425bb815Sopenharmony_ci
1360425bb815Sopenharmony_ci  ... // Do something with global object, ex: add properties
1361425bb815Sopenharmony_ci
1362425bb815Sopenharmony_ci  jerry_release_value (glob_obj_val);
1363425bb815Sopenharmony_ci}
1364425bb815Sopenharmony_ci```
1365425bb815Sopenharmony_ci
1366425bb815Sopenharmony_ci**See also**
1367425bb815Sopenharmony_ci
1368425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
1369425bb815Sopenharmony_ci- [jerry_define_own_property](#jerry_define_own_property)
1370425bb815Sopenharmony_ci
1371425bb815Sopenharmony_ci
1372425bb815Sopenharmony_ci# Checker functions
1373425bb815Sopenharmony_ci
1374425bb815Sopenharmony_ciFunctions to check the type of an API value ([jerry_value_t](#jerry_value_t)).
1375425bb815Sopenharmony_ci
1376425bb815Sopenharmony_ci## jerry_value_is_abort
1377425bb815Sopenharmony_ci
1378425bb815Sopenharmony_ci**Summary**
1379425bb815Sopenharmony_ci
1380425bb815Sopenharmony_ciReturns whether the given `jerry_value_t` has the error and abort value set.
1381425bb815Sopenharmony_ci
1382425bb815Sopenharmony_ci**Prototype**
1383425bb815Sopenharmony_ci
1384425bb815Sopenharmony_ci```c
1385425bb815Sopenharmony_cibool
1386425bb815Sopenharmony_cijerry_value_is_abort (const jerry_value_t value);
1387425bb815Sopenharmony_ci```
1388425bb815Sopenharmony_ci
1389425bb815Sopenharmony_ci- `value` - api value
1390425bb815Sopenharmony_ci- return value
1391425bb815Sopenharmony_ci  - true, if the given `jerry_value_t` has the error and abort value set
1392425bb815Sopenharmony_ci  - false, otherwise
1393425bb815Sopenharmony_ci
1394425bb815Sopenharmony_ci*New in version 2.0*.
1395425bb815Sopenharmony_ci
1396425bb815Sopenharmony_ci**Example**
1397425bb815Sopenharmony_ci
1398425bb815Sopenharmony_ci```c
1399425bb815Sopenharmony_ci{
1400425bb815Sopenharmony_ci  jerry_value_t value;
1401425bb815Sopenharmony_ci  ... // create or acquire value
1402425bb815Sopenharmony_ci
1403425bb815Sopenharmony_ci  if (jerry_value_is_abort (value))
1404425bb815Sopenharmony_ci  {
1405425bb815Sopenharmony_ci    ...
1406425bb815Sopenharmony_ci  }
1407425bb815Sopenharmony_ci
1408425bb815Sopenharmony_ci  jerry_release_value (value);
1409425bb815Sopenharmony_ci}
1410425bb815Sopenharmony_ci```
1411425bb815Sopenharmony_ci
1412425bb815Sopenharmony_ci**See also**
1413425bb815Sopenharmony_ci
1414425bb815Sopenharmony_ci- [jerry_value_t](#jerry_value_t)
1415425bb815Sopenharmony_ci- [jerry_value_is_error](#jerry_value_is_error)
1416425bb815Sopenharmony_ci
1417425bb815Sopenharmony_ci## jerry_value_is_array
1418425bb815Sopenharmony_ci
1419425bb815Sopenharmony_ci**Summary**
1420425bb815Sopenharmony_ci
1421425bb815Sopenharmony_ciReturns whether the given `jerry_value_t` is an array.
1422425bb815Sopenharmony_ci
1423425bb815Sopenharmony_ci**Prototype**
1424425bb815Sopenharmony_ci
1425425bb815Sopenharmony_ci```c
1426425bb815Sopenharmony_cibool
1427425bb815Sopenharmony_cijerry_value_is_array (const jerry_value_t value)
1428425bb815Sopenharmony_ci```
1429425bb815Sopenharmony_ci
1430425bb815Sopenharmony_ci- `value` - api value
1431425bb815Sopenharmony_ci- return value
1432425bb815Sopenharmony_ci  - true, if the given `jerry_value_t` is an array
1433425bb815Sopenharmony_ci  - false, otherwise
1434425bb815Sopenharmony_ci
1435425bb815Sopenharmony_ci**Example**
1436425bb815Sopenharmony_ci
1437425bb815Sopenharmony_ci```c
1438425bb815Sopenharmony_ci{
1439425bb815Sopenharmony_ci  jerry_value_t value;
1440425bb815Sopenharmony_ci  ... // create or acquire value
1441425bb815Sopenharmony_ci
1442425bb815Sopenharmony_ci  if (jerry_value_is_array (value))
1443425bb815Sopenharmony_ci  {
1444425bb815Sopenharmony_ci    ...
1445425bb815Sopenharmony_ci  }
1446425bb815Sopenharmony_ci
1447425bb815Sopenharmony_ci  jerry_release_value (value);
1448425bb815Sopenharmony_ci}
1449425bb815Sopenharmony_ci```
1450425bb815Sopenharmony_ci
1451425bb815Sopenharmony_ci**See also**
1452425bb815Sopenharmony_ci
1453425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
1454425bb815Sopenharmony_ci
1455425bb815Sopenharmony_ci## jerry_value_is_arraybuffer
1456425bb815Sopenharmony_ci
1457425bb815Sopenharmony_ci**Summary**
1458425bb815Sopenharmony_ci
1459425bb815Sopenharmony_ciReturns whether the given `jerry_value_t` is an ArrayBuffer object.
1460425bb815Sopenharmony_ci
1461425bb815Sopenharmony_ci*Notes*:
1462425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_ES2015_BUILTIN_TYPEDARRAY`) and can be checked
1463425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_TYPEDARRAY` feature enum value,
1464425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
1465425bb815Sopenharmony_ci- The ES2015-subset profile enables this by default.
1466425bb815Sopenharmony_ci
1467425bb815Sopenharmony_ci**Prototype**
1468425bb815Sopenharmony_ci
1469425bb815Sopenharmony_ci```c
1470425bb815Sopenharmony_cibool
1471425bb815Sopenharmony_cijerry_value_is_arraybuffer (const jerry_value_t value)
1472425bb815Sopenharmony_ci```
1473425bb815Sopenharmony_ci
1474425bb815Sopenharmony_ci- `value` - api value to check.
1475425bb815Sopenharmony_ci- return value
1476425bb815Sopenharmony_ci  - true, if the given `jerry_value_t` is an ArrayBuffer object.
1477425bb815Sopenharmony_ci  - false, otherwise
1478425bb815Sopenharmony_ci
1479425bb815Sopenharmony_ci*New in version 2.0*.
1480425bb815Sopenharmony_ci
1481425bb815Sopenharmony_ci**Example**
1482425bb815Sopenharmony_ci
1483425bb815Sopenharmony_ci```c
1484425bb815Sopenharmony_ci{
1485425bb815Sopenharmony_ci  jerry_value_t value;
1486425bb815Sopenharmony_ci  ... // create or acquire value
1487425bb815Sopenharmony_ci
1488425bb815Sopenharmony_ci  if (jerry_value_is_arraybuffer (value))
1489425bb815Sopenharmony_ci  {
1490425bb815Sopenharmony_ci    ...
1491425bb815Sopenharmony_ci  }
1492425bb815Sopenharmony_ci
1493425bb815Sopenharmony_ci  jerry_release_value (value);
1494425bb815Sopenharmony_ci}
1495425bb815Sopenharmony_ci```
1496425bb815Sopenharmony_ci
1497425bb815Sopenharmony_ci**See also**
1498425bb815Sopenharmony_ci
1499425bb815Sopenharmony_ci- [jerry_create_arraybuffer](#jerry_create_arraybuffer)
1500425bb815Sopenharmony_ci- [jerry_create_arraybuffer_external](#jerry_create_arraybuffer_external)
1501425bb815Sopenharmony_ci
1502425bb815Sopenharmony_ci
1503425bb815Sopenharmony_ci## jerry_value_is_boolean
1504425bb815Sopenharmony_ci
1505425bb815Sopenharmony_ci**Summary**
1506425bb815Sopenharmony_ci
1507425bb815Sopenharmony_ciReturns whether the given `jerry_value_t` is a boolean value.
1508425bb815Sopenharmony_ci
1509425bb815Sopenharmony_ci**Prototype**
1510425bb815Sopenharmony_ci
1511425bb815Sopenharmony_ci```c
1512425bb815Sopenharmony_cibool
1513425bb815Sopenharmony_cijerry_value_is_boolean (const jerry_value_t value)
1514425bb815Sopenharmony_ci```
1515425bb815Sopenharmony_ci
1516425bb815Sopenharmony_ci- `value` - api value
1517425bb815Sopenharmony_ci- return value
1518425bb815Sopenharmony_ci  - true, if the given `jerry_value_t` is a boolean value
1519425bb815Sopenharmony_ci  - false, otherwise
1520425bb815Sopenharmony_ci
1521425bb815Sopenharmony_ci**Example**
1522425bb815Sopenharmony_ci
1523425bb815Sopenharmony_ci```c
1524425bb815Sopenharmony_ci{
1525425bb815Sopenharmony_ci  jerry_value_t value;
1526425bb815Sopenharmony_ci  ... // create or acquire value
1527425bb815Sopenharmony_ci
1528425bb815Sopenharmony_ci  if (jerry_value_is_boolean (value))
1529425bb815Sopenharmony_ci  {
1530425bb815Sopenharmony_ci    ...
1531425bb815Sopenharmony_ci  }
1532425bb815Sopenharmony_ci
1533425bb815Sopenharmony_ci  jerry_release_value (value);
1534425bb815Sopenharmony_ci}
1535425bb815Sopenharmony_ci```
1536425bb815Sopenharmony_ci
1537425bb815Sopenharmony_ci**See also**
1538425bb815Sopenharmony_ci
1539425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
1540425bb815Sopenharmony_ci
1541425bb815Sopenharmony_ci
1542425bb815Sopenharmony_ci## jerry_value_is_constructor
1543425bb815Sopenharmony_ci
1544425bb815Sopenharmony_ci**Summary**
1545425bb815Sopenharmony_ci
1546425bb815Sopenharmony_ciReturns whether the given `jerry_value_t` is a constructor function.
1547425bb815Sopenharmony_ci
1548425bb815Sopenharmony_ci**Prototype**
1549425bb815Sopenharmony_ci
1550425bb815Sopenharmony_ci```c
1551425bb815Sopenharmony_cibool
1552425bb815Sopenharmony_cijerry_value_is_constructor (const jerry_value_t value)
1553425bb815Sopenharmony_ci```
1554425bb815Sopenharmony_ci
1555425bb815Sopenharmony_ci- `value` - api value
1556425bb815Sopenharmony_ci- return value
1557425bb815Sopenharmony_ci  - true, if the given `jerry_value_t` is a constructor
1558425bb815Sopenharmony_ci  - false, otherwise
1559425bb815Sopenharmony_ci
1560425bb815Sopenharmony_ci**Example**
1561425bb815Sopenharmony_ci
1562425bb815Sopenharmony_ci```c
1563425bb815Sopenharmony_ci{
1564425bb815Sopenharmony_ci  jerry_value_t value;
1565425bb815Sopenharmony_ci  ... // create or acquire value
1566425bb815Sopenharmony_ci
1567425bb815Sopenharmony_ci  if (jerry_value_is_constructor (value))
1568425bb815Sopenharmony_ci  {
1569425bb815Sopenharmony_ci    ...
1570425bb815Sopenharmony_ci  }
1571425bb815Sopenharmony_ci
1572425bb815Sopenharmony_ci  jerry_release_value (value);
1573425bb815Sopenharmony_ci}
1574425bb815Sopenharmony_ci```
1575425bb815Sopenharmony_ci
1576425bb815Sopenharmony_ci**See also**
1577425bb815Sopenharmony_ci
1578425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
1579425bb815Sopenharmony_ci
1580425bb815Sopenharmony_ci## jerry_value_is_dataview
1581425bb815Sopenharmony_ci
1582425bb815Sopenharmony_ci**Summary**
1583425bb815Sopenharmony_ci
1584425bb815Sopenharmony_ciReturns whether the given `jerry_value_t` is a DataView object value.
1585425bb815Sopenharmony_ci
1586425bb815Sopenharmony_ci*Notes*:
1587425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_ES2015_BUILTIN_DATAVIEW`) and can be checked
1588425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_DATAVIEW` feature enum value,
1589425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
1590425bb815Sopenharmony_ci- The ES2015-subset profile enables this by default.
1591425bb815Sopenharmony_ci
1592425bb815Sopenharmony_ci**Prototype**
1593425bb815Sopenharmony_ci
1594425bb815Sopenharmony_ci```c
1595425bb815Sopenharmony_cibool
1596425bb815Sopenharmony_cijerry_value_is_dataview (const jerry_value_t value)
1597425bb815Sopenharmony_ci```
1598425bb815Sopenharmony_ci
1599425bb815Sopenharmony_ci- `value` - API value
1600425bb815Sopenharmony_ci- return value
1601425bb815Sopenharmony_ci  - true, if the given `jerry_value_t` is a DataView object
1602425bb815Sopenharmony_ci  - false, otherwise
1603425bb815Sopenharmony_ci
1604425bb815Sopenharmony_ci*New in version 2.0*.
1605425bb815Sopenharmony_ci
1606425bb815Sopenharmony_ci**Example**
1607425bb815Sopenharmony_ci
1608425bb815Sopenharmony_ci[doctest]: # ()
1609425bb815Sopenharmony_ci
1610425bb815Sopenharmony_ci```c
1611425bb815Sopenharmony_ci#include "jerryscript.h"
1612425bb815Sopenharmony_ci
1613425bb815Sopenharmony_ciint
1614425bb815Sopenharmony_cimain (void)
1615425bb815Sopenharmony_ci{
1616425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
1617425bb815Sopenharmony_ci
1618425bb815Sopenharmony_ci  jerry_value_t arraybuffer = jerry_create_arraybuffer (16);
1619425bb815Sopenharmony_ci  jerry_value_t dataview = jerry_create_dataview (arraybuffer, 0, 16);
1620425bb815Sopenharmony_ci
1621425bb815Sopenharmony_ci  if (jerry_value_is_dataview (dataview))
1622425bb815Sopenharmony_ci  {
1623425bb815Sopenharmony_ci    // usage of dataview
1624425bb815Sopenharmony_ci  }
1625425bb815Sopenharmony_ci
1626425bb815Sopenharmony_ci  jerry_release_value (dataview);
1627425bb815Sopenharmony_ci  jerry_release_value (arraybuffer);
1628425bb815Sopenharmony_ci
1629425bb815Sopenharmony_ci  jerry_cleanup ();
1630425bb815Sopenharmony_ci  return 0;
1631425bb815Sopenharmony_ci}
1632425bb815Sopenharmony_ci```
1633425bb815Sopenharmony_ci
1634425bb815Sopenharmony_ci**See also**
1635425bb815Sopenharmony_ci
1636425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
1637425bb815Sopenharmony_ci- [jerry_create_dataview](#jerry_create_dataview)
1638425bb815Sopenharmony_ci
1639425bb815Sopenharmony_ci
1640425bb815Sopenharmony_ci## jerry_value_is_error
1641425bb815Sopenharmony_ci
1642425bb815Sopenharmony_ci**Summary**
1643425bb815Sopenharmony_ci
1644425bb815Sopenharmony_ciReturns whether the given `jerry_value_t` is error value.
1645425bb815Sopenharmony_ci
1646425bb815Sopenharmony_ci**Prototype**
1647425bb815Sopenharmony_ci
1648425bb815Sopenharmony_ci```c
1649425bb815Sopenharmony_cibool
1650425bb815Sopenharmony_cijerry_value_is_error (const jerry_value_t value);
1651425bb815Sopenharmony_ci```
1652425bb815Sopenharmony_ci
1653425bb815Sopenharmony_ci- `value` - api value
1654425bb815Sopenharmony_ci- return value
1655425bb815Sopenharmony_ci  - true, if the given `jerry_value_t` is error value.
1656425bb815Sopenharmony_ci  - false, otherwise
1657425bb815Sopenharmony_ci
1658425bb815Sopenharmony_ci*New in version 2.0*.
1659425bb815Sopenharmony_ci
1660425bb815Sopenharmony_ci**Example**
1661425bb815Sopenharmony_ci
1662425bb815Sopenharmony_ci```c
1663425bb815Sopenharmony_ci{
1664425bb815Sopenharmony_ci  jerry_value_t value;
1665425bb815Sopenharmony_ci  ... // create or acquire value
1666425bb815Sopenharmony_ci
1667425bb815Sopenharmony_ci  if (jerry_value_is_error (value))
1668425bb815Sopenharmony_ci  {
1669425bb815Sopenharmony_ci    ...
1670425bb815Sopenharmony_ci  }
1671425bb815Sopenharmony_ci
1672425bb815Sopenharmony_ci  jerry_release_value (value);
1673425bb815Sopenharmony_ci}
1674425bb815Sopenharmony_ci```
1675425bb815Sopenharmony_ci
1676425bb815Sopenharmony_ci**See also**
1677425bb815Sopenharmony_ci
1678425bb815Sopenharmony_ci- [jerry_value_t](#jerry_value_t)
1679425bb815Sopenharmony_ci- [jerry_value_is_abort](#jerry_value_is_abort)
1680425bb815Sopenharmony_ci
1681425bb815Sopenharmony_ci## jerry_value_is_function
1682425bb815Sopenharmony_ci
1683425bb815Sopenharmony_ci**Summary**
1684425bb815Sopenharmony_ci
1685425bb815Sopenharmony_ciReturns whether the given `jerry_value_t` is a function.
1686425bb815Sopenharmony_ci
1687425bb815Sopenharmony_ci**Prototype**
1688425bb815Sopenharmony_ci
1689425bb815Sopenharmony_ci```c
1690425bb815Sopenharmony_cibool
1691425bb815Sopenharmony_cijerry_value_is_function (const jerry_value_t value)
1692425bb815Sopenharmony_ci```
1693425bb815Sopenharmony_ci
1694425bb815Sopenharmony_ci- `value` - api value
1695425bb815Sopenharmony_ci- return value
1696425bb815Sopenharmony_ci  - true, if the given `jerry_value_t` is a function
1697425bb815Sopenharmony_ci  - false, otherwise
1698425bb815Sopenharmony_ci
1699425bb815Sopenharmony_ci**Example**
1700425bb815Sopenharmony_ci
1701425bb815Sopenharmony_ci```c
1702425bb815Sopenharmony_ci{
1703425bb815Sopenharmony_ci  jerry_value_t value;
1704425bb815Sopenharmony_ci  ... // create or acquire value
1705425bb815Sopenharmony_ci
1706425bb815Sopenharmony_ci  if (jerry_value_is_function (value))
1707425bb815Sopenharmony_ci  {
1708425bb815Sopenharmony_ci    ...
1709425bb815Sopenharmony_ci  }
1710425bb815Sopenharmony_ci
1711425bb815Sopenharmony_ci  jerry_release_value (value);
1712425bb815Sopenharmony_ci}
1713425bb815Sopenharmony_ci```
1714425bb815Sopenharmony_ci
1715425bb815Sopenharmony_ci**See also**
1716425bb815Sopenharmony_ci
1717425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
1718425bb815Sopenharmony_ci
1719425bb815Sopenharmony_ci
1720425bb815Sopenharmony_ci## jerry_value_is_number
1721425bb815Sopenharmony_ci
1722425bb815Sopenharmony_ci**Summary**
1723425bb815Sopenharmony_ci
1724425bb815Sopenharmony_ciReturns whether the given `jerry_value_t` is a number.
1725425bb815Sopenharmony_ci
1726425bb815Sopenharmony_ci**Prototype**
1727425bb815Sopenharmony_ci
1728425bb815Sopenharmony_ci```c
1729425bb815Sopenharmony_cibool
1730425bb815Sopenharmony_cijerry_value_is_number (const jerry_value_t value)
1731425bb815Sopenharmony_ci```
1732425bb815Sopenharmony_ci
1733425bb815Sopenharmony_ci- `value` - api value
1734425bb815Sopenharmony_ci- return value
1735425bb815Sopenharmony_ci  - true, if the given `jerry_value_t` is a number
1736425bb815Sopenharmony_ci  - false, otherwise
1737425bb815Sopenharmony_ci
1738425bb815Sopenharmony_ci**Example**
1739425bb815Sopenharmony_ci
1740425bb815Sopenharmony_ci```c
1741425bb815Sopenharmony_ci{
1742425bb815Sopenharmony_ci  jerry_value_t value;
1743425bb815Sopenharmony_ci  ... // create or acquire value
1744425bb815Sopenharmony_ci
1745425bb815Sopenharmony_ci  if (jerry_value_is_number (value))
1746425bb815Sopenharmony_ci  {
1747425bb815Sopenharmony_ci    ...
1748425bb815Sopenharmony_ci  }
1749425bb815Sopenharmony_ci
1750425bb815Sopenharmony_ci  jerry_release_value (value);
1751425bb815Sopenharmony_ci}
1752425bb815Sopenharmony_ci```
1753425bb815Sopenharmony_ci
1754425bb815Sopenharmony_ci**See also**
1755425bb815Sopenharmony_ci
1756425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
1757425bb815Sopenharmony_ci
1758425bb815Sopenharmony_ci
1759425bb815Sopenharmony_ci## jerry_value_is_null
1760425bb815Sopenharmony_ci
1761425bb815Sopenharmony_ci**Summary**
1762425bb815Sopenharmony_ci
1763425bb815Sopenharmony_ciReturns whether the given `jerry_value_t` is a null value.
1764425bb815Sopenharmony_ci
1765425bb815Sopenharmony_ci**Prototype**
1766425bb815Sopenharmony_ci
1767425bb815Sopenharmony_ci```c
1768425bb815Sopenharmony_cibool
1769425bb815Sopenharmony_cijerry_value_is_null (const jerry_value_t value)
1770425bb815Sopenharmony_ci```
1771425bb815Sopenharmony_ci
1772425bb815Sopenharmony_ci- `value` - api value
1773425bb815Sopenharmony_ci- return value
1774425bb815Sopenharmony_ci  - true, if the given `jerry_value_t` is a null
1775425bb815Sopenharmony_ci  - false, otherwise
1776425bb815Sopenharmony_ci
1777425bb815Sopenharmony_ci**Example**
1778425bb815Sopenharmony_ci
1779425bb815Sopenharmony_ci```c
1780425bb815Sopenharmony_ci{
1781425bb815Sopenharmony_ci  jerry_value_t value;
1782425bb815Sopenharmony_ci  ... // create or acquire value
1783425bb815Sopenharmony_ci
1784425bb815Sopenharmony_ci  if (jerry_value_is_null (value))
1785425bb815Sopenharmony_ci  {
1786425bb815Sopenharmony_ci    ...
1787425bb815Sopenharmony_ci  }
1788425bb815Sopenharmony_ci
1789425bb815Sopenharmony_ci  jerry_release_value (value);
1790425bb815Sopenharmony_ci}
1791425bb815Sopenharmony_ci```
1792425bb815Sopenharmony_ci
1793425bb815Sopenharmony_ci**See also**
1794425bb815Sopenharmony_ci
1795425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
1796425bb815Sopenharmony_ci
1797425bb815Sopenharmony_ci
1798425bb815Sopenharmony_ci## jerry_value_is_object
1799425bb815Sopenharmony_ci
1800425bb815Sopenharmony_ci**Summary**
1801425bb815Sopenharmony_ci
1802425bb815Sopenharmony_ciReturns whether the given `jerry_value_t` is an object value.
1803425bb815Sopenharmony_ci
1804425bb815Sopenharmony_ci**Prototype**
1805425bb815Sopenharmony_ci
1806425bb815Sopenharmony_ci```c
1807425bb815Sopenharmony_cibool
1808425bb815Sopenharmony_cijerry_value_is_object (const jerry_value_t value)
1809425bb815Sopenharmony_ci```
1810425bb815Sopenharmony_ci
1811425bb815Sopenharmony_ci- `value` - api value
1812425bb815Sopenharmony_ci- return value
1813425bb815Sopenharmony_ci  - true, if the given `jerry_value_t` is an object
1814425bb815Sopenharmony_ci  - false, otherwise
1815425bb815Sopenharmony_ci
1816425bb815Sopenharmony_ci**Example**
1817425bb815Sopenharmony_ci
1818425bb815Sopenharmony_ci```c
1819425bb815Sopenharmony_ci{
1820425bb815Sopenharmony_ci  jerry_value_t value;
1821425bb815Sopenharmony_ci  ... // create or acquire value
1822425bb815Sopenharmony_ci
1823425bb815Sopenharmony_ci  if (jerry_value_is_object (value))
1824425bb815Sopenharmony_ci  {
1825425bb815Sopenharmony_ci    ...
1826425bb815Sopenharmony_ci  }
1827425bb815Sopenharmony_ci
1828425bb815Sopenharmony_ci  jerry_release_value (value);
1829425bb815Sopenharmony_ci}
1830425bb815Sopenharmony_ci```
1831425bb815Sopenharmony_ci
1832425bb815Sopenharmony_ci**See also**
1833425bb815Sopenharmony_ci
1834425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
1835425bb815Sopenharmony_ci
1836425bb815Sopenharmony_ci
1837425bb815Sopenharmony_ci## jerry_value_is_promise
1838425bb815Sopenharmony_ci
1839425bb815Sopenharmony_ci**Summary**
1840425bb815Sopenharmony_ci
1841425bb815Sopenharmony_ciReturns whether the given `jerry_value_t` is a promise value.
1842425bb815Sopenharmony_ci
1843425bb815Sopenharmony_ci*Notes*:
1844425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_ES2015_BUILTIN_PROMISE`) and can be checked
1845425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_PROMISE` feature enum value,
1846425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
1847425bb815Sopenharmony_ci- The ES2015-subset profile enables this by default.
1848425bb815Sopenharmony_ci
1849425bb815Sopenharmony_ci
1850425bb815Sopenharmony_ci**Prototype**
1851425bb815Sopenharmony_ci
1852425bb815Sopenharmony_ci```c
1853425bb815Sopenharmony_cibool
1854425bb815Sopenharmony_cijerry_value_is_promise (const jerry_value_t value)
1855425bb815Sopenharmony_ci```
1856425bb815Sopenharmony_ci
1857425bb815Sopenharmony_ci- `value` - api value
1858425bb815Sopenharmony_ci- return value
1859425bb815Sopenharmony_ci  - true, if the given `jerry_value_t` is a promise
1860425bb815Sopenharmony_ci  - false, otherwise
1861425bb815Sopenharmony_ci
1862425bb815Sopenharmony_ci*New in version 2.0*.
1863425bb815Sopenharmony_ci
1864425bb815Sopenharmony_ci**Example**
1865425bb815Sopenharmony_ci
1866425bb815Sopenharmony_ci```c
1867425bb815Sopenharmony_ci{
1868425bb815Sopenharmony_ci  jerry_value_t value;
1869425bb815Sopenharmony_ci  ... // create or acquire value
1870425bb815Sopenharmony_ci
1871425bb815Sopenharmony_ci  if (jerry_value_is_promise (value))
1872425bb815Sopenharmony_ci  {
1873425bb815Sopenharmony_ci    ...
1874425bb815Sopenharmony_ci  }
1875425bb815Sopenharmony_ci
1876425bb815Sopenharmony_ci  jerry_release_value (value);
1877425bb815Sopenharmony_ci}
1878425bb815Sopenharmony_ci```
1879425bb815Sopenharmony_ci
1880425bb815Sopenharmony_ci**See also**
1881425bb815Sopenharmony_ci
1882425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
1883425bb815Sopenharmony_ci- [jerry_create_promise](#jerry_create_promise)
1884425bb815Sopenharmony_ci
1885425bb815Sopenharmony_ci
1886425bb815Sopenharmony_ci## jerry_value_is_proxy
1887425bb815Sopenharmony_ci
1888425bb815Sopenharmony_ci**Summary**
1889425bb815Sopenharmony_ci
1890425bb815Sopenharmony_ciReturns whether the given `jerry_value_t` is a proxy value.
1891425bb815Sopenharmony_ci
1892425bb815Sopenharmony_ci*Notes*:
1893425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_ES2015_BUILTIN_PROXY`) and can be checked
1894425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_PROXY` feature enum value,
1895425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
1896425bb815Sopenharmony_ci- The ES2015-subset profile enables this by default.
1897425bb815Sopenharmony_ci
1898425bb815Sopenharmony_ci
1899425bb815Sopenharmony_ci**Prototype**
1900425bb815Sopenharmony_ci
1901425bb815Sopenharmony_ci```c
1902425bb815Sopenharmony_cibool
1903425bb815Sopenharmony_cijerry_value_is_proxy (const jerry_value_t value)
1904425bb815Sopenharmony_ci```
1905425bb815Sopenharmony_ci
1906425bb815Sopenharmony_ci- `value` - api value
1907425bb815Sopenharmony_ci- return value
1908425bb815Sopenharmony_ci  - true, if the given `jerry_value_t` is a proxy object
1909425bb815Sopenharmony_ci  - false, otherwise
1910425bb815Sopenharmony_ci
1911425bb815Sopenharmony_ci**Example**
1912425bb815Sopenharmony_ci
1913425bb815Sopenharmony_ci*New in version 2.3*.
1914425bb815Sopenharmony_ci
1915425bb815Sopenharmony_ci```c
1916425bb815Sopenharmony_ci{
1917425bb815Sopenharmony_ci  jerry_value_t value;
1918425bb815Sopenharmony_ci  ... // create or acquire value
1919425bb815Sopenharmony_ci
1920425bb815Sopenharmony_ci  if (jerry_value_is_proxy (value))
1921425bb815Sopenharmony_ci  {
1922425bb815Sopenharmony_ci    ...
1923425bb815Sopenharmony_ci  }
1924425bb815Sopenharmony_ci
1925425bb815Sopenharmony_ci  jerry_release_value (value);
1926425bb815Sopenharmony_ci}
1927425bb815Sopenharmony_ci```
1928425bb815Sopenharmony_ci
1929425bb815Sopenharmony_ci**See also**
1930425bb815Sopenharmony_ci
1931425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
1932425bb815Sopenharmony_ci- [jerry_create_proxy](#jerry_create_proxy)
1933425bb815Sopenharmony_ci
1934425bb815Sopenharmony_ci
1935425bb815Sopenharmony_ci## jerry_value_is_string
1936425bb815Sopenharmony_ci
1937425bb815Sopenharmony_ci**Summary**
1938425bb815Sopenharmony_ci
1939425bb815Sopenharmony_ciReturns whether the given `jerry_value_t` is a string value.
1940425bb815Sopenharmony_ci
1941425bb815Sopenharmony_ci**Prototype**
1942425bb815Sopenharmony_ci
1943425bb815Sopenharmony_ci```c
1944425bb815Sopenharmony_cibool
1945425bb815Sopenharmony_cijerry_value_is_string (const jerry_value_t value)
1946425bb815Sopenharmony_ci```
1947425bb815Sopenharmony_ci
1948425bb815Sopenharmony_ci- `value` - api value
1949425bb815Sopenharmony_ci- return value
1950425bb815Sopenharmony_ci  - true, if the given `jerry_value_t` is a string
1951425bb815Sopenharmony_ci  - false, otherwise
1952425bb815Sopenharmony_ci
1953425bb815Sopenharmony_ci**Example**
1954425bb815Sopenharmony_ci
1955425bb815Sopenharmony_ci```c
1956425bb815Sopenharmony_ci{
1957425bb815Sopenharmony_ci  jerry_value_t value;
1958425bb815Sopenharmony_ci  ... // create or acquire value
1959425bb815Sopenharmony_ci
1960425bb815Sopenharmony_ci  if (jerry_value_is_string (value))
1961425bb815Sopenharmony_ci  {
1962425bb815Sopenharmony_ci    ...
1963425bb815Sopenharmony_ci  }
1964425bb815Sopenharmony_ci
1965425bb815Sopenharmony_ci  jerry_release_value (value);
1966425bb815Sopenharmony_ci}
1967425bb815Sopenharmony_ci```
1968425bb815Sopenharmony_ci
1969425bb815Sopenharmony_ci**See also**
1970425bb815Sopenharmony_ci
1971425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
1972425bb815Sopenharmony_ci
1973425bb815Sopenharmony_ci
1974425bb815Sopenharmony_ci## jerry_value_is_symbol
1975425bb815Sopenharmony_ci
1976425bb815Sopenharmony_ci**Summary**
1977425bb815Sopenharmony_ci
1978425bb815Sopenharmony_ciReturns whether the given `jerry_value_t` is a symbol value.
1979425bb815Sopenharmony_ci
1980425bb815Sopenharmony_ci*Notes*:
1981425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_ES2015_BUILTIN_SYMBOL`) and can be checked
1982425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_SYMBOL` feature enum value,
1983425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
1984425bb815Sopenharmony_ci- The ES2015-subset profile enables this by default.
1985425bb815Sopenharmony_ci
1986425bb815Sopenharmony_ci**Prototype**
1987425bb815Sopenharmony_ci
1988425bb815Sopenharmony_ci```c
1989425bb815Sopenharmony_cibool
1990425bb815Sopenharmony_cijerry_value_is_symbol (const jerry_value_t value)
1991425bb815Sopenharmony_ci```
1992425bb815Sopenharmony_ci
1993425bb815Sopenharmony_ci- `value` - API value
1994425bb815Sopenharmony_ci- return value
1995425bb815Sopenharmony_ci  - true, if the given `jerry_value_t` is a symbol
1996425bb815Sopenharmony_ci  - false, otherwise
1997425bb815Sopenharmony_ci
1998425bb815Sopenharmony_ci*New in version 2.0*.
1999425bb815Sopenharmony_ci
2000425bb815Sopenharmony_ci**Example**
2001425bb815Sopenharmony_ci
2002425bb815Sopenharmony_ci[doctest]: # ()
2003425bb815Sopenharmony_ci
2004425bb815Sopenharmony_ci```c
2005425bb815Sopenharmony_ci#include "jerryscript.h"
2006425bb815Sopenharmony_ci
2007425bb815Sopenharmony_ciint
2008425bb815Sopenharmony_cimain (void)
2009425bb815Sopenharmony_ci{
2010425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
2011425bb815Sopenharmony_ci
2012425bb815Sopenharmony_ci  jerry_value_t string_value = jerry_create_string ((const jerry_char_t *) "Symbol description string");
2013425bb815Sopenharmony_ci  jerry_value_t symbol_value = jerry_create_symbol (string_value);
2014425bb815Sopenharmony_ci
2015425bb815Sopenharmony_ci  jerry_release_value (string_value);
2016425bb815Sopenharmony_ci
2017425bb815Sopenharmony_ci  if (jerry_value_is_symbol (symbol_value))
2018425bb815Sopenharmony_ci  {
2019425bb815Sopenharmony_ci    // usage of symbol_value
2020425bb815Sopenharmony_ci  }
2021425bb815Sopenharmony_ci
2022425bb815Sopenharmony_ci  jerry_release_value (symbol_value);
2023425bb815Sopenharmony_ci
2024425bb815Sopenharmony_ci  jerry_cleanup ();
2025425bb815Sopenharmony_ci  return 0;
2026425bb815Sopenharmony_ci}
2027425bb815Sopenharmony_ci```
2028425bb815Sopenharmony_ci
2029425bb815Sopenharmony_ci**See also**
2030425bb815Sopenharmony_ci
2031425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
2032425bb815Sopenharmony_ci- [jerry_create_symbol](#jerry_create_symbol)
2033425bb815Sopenharmony_ci
2034425bb815Sopenharmony_ci## jerry_value_is_typedarray
2035425bb815Sopenharmony_ci
2036425bb815Sopenharmony_ci**Summary**
2037425bb815Sopenharmony_ci
2038425bb815Sopenharmony_ciChecks whether the given `jerry_value_t` is a TypedArray object or not.
2039425bb815Sopenharmony_ci
2040425bb815Sopenharmony_ci*Notes*:
2041425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_ES2015_BUILTIN_TYPEDARRAY`) and can be checked
2042425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_TYPEDARRAY` feature enum value,
2043425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
2044425bb815Sopenharmony_ci- The ES2015-subset profile enables this by default.
2045425bb815Sopenharmony_ci
2046425bb815Sopenharmony_ci**Prototype**
2047425bb815Sopenharmony_ci
2048425bb815Sopenharmony_ci```c
2049425bb815Sopenharmony_cibool
2050425bb815Sopenharmony_cijerry_value_is_typedarray (const jerry_value_t value)
2051425bb815Sopenharmony_ci```
2052425bb815Sopenharmony_ci
2053425bb815Sopenharmony_ci- `value` - object to check
2054425bb815Sopenharmony_ci- return value
2055425bb815Sopenharmony_ci  - true, if the given `jerry_value_t` is a TypedArray object.
2056425bb815Sopenharmony_ci  - false, otherwise
2057425bb815Sopenharmony_ci
2058425bb815Sopenharmony_ci*New in version 2.0*.
2059425bb815Sopenharmony_ci
2060425bb815Sopenharmony_ci**Example**
2061425bb815Sopenharmony_ci
2062425bb815Sopenharmony_ci[doctest]: # ()
2063425bb815Sopenharmony_ci
2064425bb815Sopenharmony_ci```c
2065425bb815Sopenharmony_ci#include "jerryscript.h"
2066425bb815Sopenharmony_ci
2067425bb815Sopenharmony_ciint
2068425bb815Sopenharmony_cimain (void)
2069425bb815Sopenharmony_ci{
2070425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
2071425bb815Sopenharmony_ci
2072425bb815Sopenharmony_ci  jerry_value_t value = jerry_create_typedarray (JERRY_TYPEDARRAY_UINT16, 15);
2073425bb815Sopenharmony_ci
2074425bb815Sopenharmony_ci  if (jerry_value_is_typedarray (value))
2075425bb815Sopenharmony_ci  {
2076425bb815Sopenharmony_ci    /* "value" is a typedarray. */
2077425bb815Sopenharmony_ci  }
2078425bb815Sopenharmony_ci
2079425bb815Sopenharmony_ci  jerry_release_value (value);
2080425bb815Sopenharmony_ci
2081425bb815Sopenharmony_ci  jerry_cleanup ();
2082425bb815Sopenharmony_ci
2083425bb815Sopenharmony_ci  return 0;
2084425bb815Sopenharmony_ci}
2085425bb815Sopenharmony_ci```
2086425bb815Sopenharmony_ci
2087425bb815Sopenharmony_ci**See also**
2088425bb815Sopenharmony_ci
2089425bb815Sopenharmony_ci- [jerry_create_typedarray](#jerry_create_typedarray)
2090425bb815Sopenharmony_ci
2091425bb815Sopenharmony_ci
2092425bb815Sopenharmony_ci## jerry_get_container_type
2093425bb815Sopenharmony_ci
2094425bb815Sopenharmony_ci**Summary**
2095425bb815Sopenharmony_ci
2096425bb815Sopenharmony_ciChecks whether the given `jerry_value_t` is the given `jerry_container_type_t` type container object.
2097425bb815Sopenharmony_ci
2098425bb815Sopenharmony_ci*Notes*
2099425bb815Sopenharmony_ci- This API function depends on a build option (`JERRY_ES2015_BUILTIN_CONTAINER`) and can be checked
2100425bb815Sopenharmony_ci  runtime with the `JERRY_FEATURE_MAP, JERRY_FEATURE_SET, JERRY_FEATURE_WEAKMAP, JERRY_FEATURE_WEAKSET`
2101425bb815Sopenharmony_ci  feature enum values.
2102425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
2103425bb815Sopenharmony_ci- The ES2015-subset profile enables this by default.
2104425bb815Sopenharmony_ci
2105425bb815Sopenharmony_ci*New in version 2.3*.
2106425bb815Sopenharmony_ci
2107425bb815Sopenharmony_ci**Prototype**
2108425bb815Sopenharmony_ci
2109425bb815Sopenharmony_ci```c
2110425bb815Sopenharmony_cijerry_container_type_t
2111425bb815Sopenharmony_cijerry_get_container_type (const jerry_value_t value)
2112425bb815Sopenharmony_ci```
2113425bb815Sopenharmony_ci
2114425bb815Sopenharmony_ci- `value` - Container object
2115425bb815Sopenharmony_ci- return value
2116425bb815Sopenharmony_ci  - The corresponding enum value of `jerry_container_type_t`, or `JERRY_CONTAINER_TYPE_INVALID` if the container
2117425bb815Sopenharmony_ci    was not a valid container object.
2118425bb815Sopenharmony_ci**Example**
2119425bb815Sopenharmony_ci
2120425bb815Sopenharmony_ci[doctest]: # ()
2121425bb815Sopenharmony_ci
2122425bb815Sopenharmony_ci```c
2123425bb815Sopenharmony_ci#include "jerryscript.h"
2124425bb815Sopenharmony_ciint
2125425bb815Sopenharmony_cimain (void)
2126425bb815Sopenharmony_ci{
2127425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
2128425bb815Sopenharmony_ci
2129425bb815Sopenharmony_ci  jerry_value_t value = jerry_create_container (JERRY_CONTAINER_TYPE_MAP, NULL, 0);
2130425bb815Sopenharmony_ci
2131425bb815Sopenharmony_ci  if (jerry_get_container_type (value) == JERRY_CONTAINER_TYPE_MAP)
2132425bb815Sopenharmony_ci  {
2133425bb815Sopenharmony_ci    /* "value" is a map. */
2134425bb815Sopenharmony_ci  }
2135425bb815Sopenharmony_ci
2136425bb815Sopenharmony_ci  jerry_release_value (value);
2137425bb815Sopenharmony_ci
2138425bb815Sopenharmony_ci  jerry_cleanup ();
2139425bb815Sopenharmony_ci
2140425bb815Sopenharmony_ci  return 0;
2141425bb815Sopenharmony_ci}
2142425bb815Sopenharmony_ci```
2143425bb815Sopenharmony_ci
2144425bb815Sopenharmony_ci**See also**
2145425bb815Sopenharmony_ci
2146425bb815Sopenharmony_ci- [jerry_create_container](#jerry_create_container)
2147425bb815Sopenharmony_ci- [jerry_container_type_t](#jerry_container_type_t)
2148425bb815Sopenharmony_ci
2149425bb815Sopenharmony_ci
2150425bb815Sopenharmony_ci## jerry_value_is_undefined
2151425bb815Sopenharmony_ci
2152425bb815Sopenharmony_ci**Summary**
2153425bb815Sopenharmony_ci
2154425bb815Sopenharmony_ciReturns whether the given `jerry_value_t` is an undefined value.
2155425bb815Sopenharmony_ci
2156425bb815Sopenharmony_ci**Prototype**
2157425bb815Sopenharmony_ci
2158425bb815Sopenharmony_ci```c
2159425bb815Sopenharmony_cibool
2160425bb815Sopenharmony_cijerry_value_is_undefined (const jerry_value_t value)
2161425bb815Sopenharmony_ci```
2162425bb815Sopenharmony_ci
2163425bb815Sopenharmony_ci- `value` - api value
2164425bb815Sopenharmony_ci- return value
2165425bb815Sopenharmony_ci  - true, if the given `jerry_value_t` is an undefined value
2166425bb815Sopenharmony_ci  - false, otherwise
2167425bb815Sopenharmony_ci
2168425bb815Sopenharmony_ci**Example**
2169425bb815Sopenharmony_ci
2170425bb815Sopenharmony_ci```c
2171425bb815Sopenharmony_ci{
2172425bb815Sopenharmony_ci  jerry_value_t value;
2173425bb815Sopenharmony_ci  ... // create or acquire value
2174425bb815Sopenharmony_ci
2175425bb815Sopenharmony_ci  if (jerry_value_is_undefined (value))
2176425bb815Sopenharmony_ci  {
2177425bb815Sopenharmony_ci    ...
2178425bb815Sopenharmony_ci  }
2179425bb815Sopenharmony_ci
2180425bb815Sopenharmony_ci  jerry_release_value (value);
2181425bb815Sopenharmony_ci}
2182425bb815Sopenharmony_ci```
2183425bb815Sopenharmony_ci
2184425bb815Sopenharmony_ci**See also**
2185425bb815Sopenharmony_ci
2186425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
2187425bb815Sopenharmony_ci
2188425bb815Sopenharmony_ci## jerry_value_get_type
2189425bb815Sopenharmony_ci
2190425bb815Sopenharmony_ci**Summary**
2191425bb815Sopenharmony_ci
2192425bb815Sopenharmony_ciReturns the JavaScript type
2193425bb815Sopenharmony_cifor a given value as a [jerry_type_t](#jerry_type_t) enum value.
2194425bb815Sopenharmony_ci
2195425bb815Sopenharmony_ciThis is a similar operation to the 'typeof' operator
2196425bb815Sopenharmony_ciin the standard with an exception that the 'null'
2197425bb815Sopenharmony_civalue has its own enum value.
2198425bb815Sopenharmony_ci
2199425bb815Sopenharmony_ci**Prototype**
2200425bb815Sopenharmony_ci
2201425bb815Sopenharmony_ci```c
2202425bb815Sopenharmony_cijerry_type_t
2203425bb815Sopenharmony_cijerry_value_get_type (const jerry_value_t value);
2204425bb815Sopenharmony_ci```
2205425bb815Sopenharmony_ci
2206425bb815Sopenharmony_ci- `value` - JavaScript value to check.
2207425bb815Sopenharmony_ci- return value
2208425bb815Sopenharmony_ci  - One of the [jerry_type_t](#jerry_type_t) value.
2209425bb815Sopenharmony_ci
2210425bb815Sopenharmony_ci*New in version 2.0*.
2211425bb815Sopenharmony_ci
2212425bb815Sopenharmony_ci**Example**
2213425bb815Sopenharmony_ci
2214425bb815Sopenharmony_ci```c
2215425bb815Sopenharmony_ci{
2216425bb815Sopenharmony_ci  jerry_value_t number = jerry_create_number (3.3);
2217425bb815Sopenharmony_ci
2218425bb815Sopenharmony_ci  jerry_type_t type_info = jerry_value_get_type (number);
2219425bb815Sopenharmony_ci
2220425bb815Sopenharmony_ci  if (type_info == JERRY_TYPE_NUMBER)
2221425bb815Sopenharmony_ci  {
2222425bb815Sopenharmony_ci    /* ... */
2223425bb815Sopenharmony_ci  }
2224425bb815Sopenharmony_ci
2225425bb815Sopenharmony_ci  jerry_release_value (number);
2226425bb815Sopenharmony_ci}
2227425bb815Sopenharmony_ci```
2228425bb815Sopenharmony_ci
2229425bb815Sopenharmony_ci**See also**
2230425bb815Sopenharmony_ci
2231425bb815Sopenharmony_ci- [jerry_type_t](#jerry_type_t)
2232425bb815Sopenharmony_ci
2233425bb815Sopenharmony_ci## jerry_is_feature_enabled
2234425bb815Sopenharmony_ci
2235425bb815Sopenharmony_ci**Summary**
2236425bb815Sopenharmony_ci
2237425bb815Sopenharmony_ciReturns whether the specified compile time feature is enabled.
2238425bb815Sopenharmony_ci
2239425bb815Sopenharmony_ci**Prototype**
2240425bb815Sopenharmony_ci
2241425bb815Sopenharmony_ci```c
2242425bb815Sopenharmony_cibool
2243425bb815Sopenharmony_cijerry_is_feature_enabled (const jerry_feature_t feature);
2244425bb815Sopenharmony_ci```
2245425bb815Sopenharmony_ci
2246425bb815Sopenharmony_ci- `feature` - jerry feature
2247425bb815Sopenharmony_ci- return value
2248425bb815Sopenharmony_ci  - true, if the given `jerry_feature_t` is enabled
2249425bb815Sopenharmony_ci  - false, otherwise
2250425bb815Sopenharmony_ci
2251425bb815Sopenharmony_ci*New in version 2.0*.
2252425bb815Sopenharmony_ci
2253425bb815Sopenharmony_ci**Example**
2254425bb815Sopenharmony_ci
2255425bb815Sopenharmony_ci```c
2256425bb815Sopenharmony_ci{
2257425bb815Sopenharmony_ci  /* ... */
2258425bb815Sopenharmony_ci  jerry_feature_t feature = JERRY_FEATURE_SNAPSHOT_SAVE;
2259425bb815Sopenharmony_ci
2260425bb815Sopenharmony_ci  if (jerry_is_feature_enabled (feature))
2261425bb815Sopenharmony_ci  {
2262425bb815Sopenharmony_ci    /* ... */
2263425bb815Sopenharmony_ci  }
2264425bb815Sopenharmony_ci
2265425bb815Sopenharmony_ci}
2266425bb815Sopenharmony_ci```
2267425bb815Sopenharmony_ci
2268425bb815Sopenharmony_ci**See also**
2269425bb815Sopenharmony_ci
2270425bb815Sopenharmony_ci- [jerry_feature_t](#jerry_feature_t)
2271425bb815Sopenharmony_ci
2272425bb815Sopenharmony_ci
2273425bb815Sopenharmony_ci# Binary operations
2274425bb815Sopenharmony_ci
2275425bb815Sopenharmony_ci## jerry_binary_operation
2276425bb815Sopenharmony_ci
2277425bb815Sopenharmony_ci**Summary**
2278425bb815Sopenharmony_ci
2279425bb815Sopenharmony_ciPerform binary operation on the given operands (==, ===, <, >, etc.).
2280425bb815Sopenharmony_ci
2281425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
2282425bb815Sopenharmony_ciis no longer needed.
2283425bb815Sopenharmony_ci
2284425bb815Sopenharmony_ci**Prototype**
2285425bb815Sopenharmony_ci
2286425bb815Sopenharmony_ci```c
2287425bb815Sopenharmony_cijerry_value_t
2288425bb815Sopenharmony_cijerry_binary_operation (jerry_binary_operation_t op,
2289425bb815Sopenharmony_ci                        const jerry_value_t lhs,
2290425bb815Sopenharmony_ci                        const jerry_value_t rhs);
2291425bb815Sopenharmony_ci```
2292425bb815Sopenharmony_ci
2293425bb815Sopenharmony_ci- `op` - binary operation
2294425bb815Sopenharmony_ci- `lhs` - left-hand side operand
2295425bb815Sopenharmony_ci- `rhs` - right-hand side operand
2296425bb815Sopenharmony_ci- return value
2297425bb815Sopenharmony_ci  - error, if argument has an error flag or operation is unsuccessful or unsupported
2298425bb815Sopenharmony_ci  - true/false, the result of the binary operation on the given operands otherwise
2299425bb815Sopenharmony_ci
2300425bb815Sopenharmony_ci*New in version 2.0*.
2301425bb815Sopenharmony_ci
2302425bb815Sopenharmony_ci**Example - JERRY_BIN_OP_EQUAL**
2303425bb815Sopenharmony_ci
2304425bb815Sopenharmony_ci```c
2305425bb815Sopenharmony_ci{
2306425bb815Sopenharmony_ci  jerry_value_t value1;
2307425bb815Sopenharmony_ci  jerry_value_t value2;
2308425bb815Sopenharmony_ci  ... // create or acquire value
2309425bb815Sopenharmony_ci  jerry_value_t result = jerry_binary_operation (JERRY_BIN_OP_EQUAL, value1, value2)
2310425bb815Sopenharmony_ci
2311425bb815Sopenharmony_ci  if (!jerry_value_is_error (result))
2312425bb815Sopenharmony_ci  {
2313425bb815Sopenharmony_ci    if (jerry_get_boolean_value (result))
2314425bb815Sopenharmony_ci    {
2315425bb815Sopenharmony_ci       // value1 and value2 are equal
2316425bb815Sopenharmony_ci    }
2317425bb815Sopenharmony_ci    else
2318425bb815Sopenharmony_ci    {
2319425bb815Sopenharmony_ci      // value1 and value2 are NOT equal
2320425bb815Sopenharmony_ci    }
2321425bb815Sopenharmony_ci  }
2322425bb815Sopenharmony_ci  else
2323425bb815Sopenharmony_ci  {
2324425bb815Sopenharmony_ci    ... // handle error
2325425bb815Sopenharmony_ci  }
2326425bb815Sopenharmony_ci
2327425bb815Sopenharmony_ci  jerry_release_value (value1);
2328425bb815Sopenharmony_ci  jerry_release_value (value2);
2329425bb815Sopenharmony_ci  jerry_release_value (result);
2330425bb815Sopenharmony_ci}
2331425bb815Sopenharmony_ci```
2332425bb815Sopenharmony_ci
2333425bb815Sopenharmony_ci**Example - JERRY_BIN_OP_INSTANCEOF**
2334425bb815Sopenharmony_ci
2335425bb815Sopenharmony_ci[doctest]: # ()
2336425bb815Sopenharmony_ci
2337425bb815Sopenharmony_ci```c
2338425bb815Sopenharmony_ci#include "jerryscript.h"
2339425bb815Sopenharmony_ci
2340425bb815Sopenharmony_cistatic jerry_value_t
2341425bb815Sopenharmony_cimy_constructor (const jerry_value_t func_val,
2342425bb815Sopenharmony_ci                const jerry_value_t this_val,
2343425bb815Sopenharmony_ci                const jerry_value_t argv[],
2344425bb815Sopenharmony_ci                const jerry_length_t argc)
2345425bb815Sopenharmony_ci{
2346425bb815Sopenharmony_ci  return jerry_create_undefined ();
2347425bb815Sopenharmony_ci}
2348425bb815Sopenharmony_ci
2349425bb815Sopenharmony_ciint
2350425bb815Sopenharmony_cimain (void)
2351425bb815Sopenharmony_ci{
2352425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
2353425bb815Sopenharmony_ci
2354425bb815Sopenharmony_ci  jerry_value_t base_obj = jerry_create_object ();
2355425bb815Sopenharmony_ci  jerry_value_t constructor = jerry_create_external_function (my_constructor);
2356425bb815Sopenharmony_ci
2357425bb815Sopenharmony_ci  /* External functions does not have a prototype by default, so we need to create one */
2358425bb815Sopenharmony_ci  jerry_value_t prototype_str = jerry_create_string ((const jerry_char_t *) ("prototype"));
2359425bb815Sopenharmony_ci  jerry_release_value (jerry_set_property (constructor, prototype_str, base_obj));
2360425bb815Sopenharmony_ci  jerry_release_value (prototype_str);
2361425bb815Sopenharmony_ci
2362425bb815Sopenharmony_ci  /* Construct the instance. */
2363425bb815Sopenharmony_ci  jerry_value_t instance_val = jerry_construct_object (constructor, NULL, 0);
2364425bb815Sopenharmony_ci
2365425bb815Sopenharmony_ci  /* Call the API function of 'instanceof'. */
2366425bb815Sopenharmony_ci  jerry_value_t is_instance = jerry_binary_operation (JERRY_BIN_OP_INSTANCEOF,
2367425bb815Sopenharmony_ci                                                      instance_val,
2368425bb815Sopenharmony_ci                                                      constructor);
2369425bb815Sopenharmony_ci  if (!jerry_value_is_error (is_instance)
2370425bb815Sopenharmony_ci      && jerry_get_boolean_value (is_instance) == true)
2371425bb815Sopenharmony_ci  {
2372425bb815Sopenharmony_ci    /* ... */
2373425bb815Sopenharmony_ci  }
2374425bb815Sopenharmony_ci
2375425bb815Sopenharmony_ci  /* Free all of the jerry values and cleanup the engine. */
2376425bb815Sopenharmony_ci  jerry_release_value (base_obj);
2377425bb815Sopenharmony_ci  jerry_release_value (constructor);
2378425bb815Sopenharmony_ci  jerry_release_value (instance_val);
2379425bb815Sopenharmony_ci  jerry_release_value (is_instance);
2380425bb815Sopenharmony_ci
2381425bb815Sopenharmony_ci  jerry_cleanup ();
2382425bb815Sopenharmony_ci  return 0;
2383425bb815Sopenharmony_ci}
2384425bb815Sopenharmony_ci```
2385425bb815Sopenharmony_ci
2386425bb815Sopenharmony_ci**See also**
2387425bb815Sopenharmony_ci
2388425bb815Sopenharmony_ci- [jerry_binary_operation_t](#jerry_binary_operation_t)
2389425bb815Sopenharmony_ci
2390425bb815Sopenharmony_ci
2391425bb815Sopenharmony_ci# Error manipulation functions
2392425bb815Sopenharmony_ci
2393425bb815Sopenharmony_ci*Changed in version 2.0*: The error handling and manipulation was modified and the old methods were replaced.
2394425bb815Sopenharmony_ci
2395425bb815Sopenharmony_ci## jerry_create_abort_from_value
2396425bb815Sopenharmony_ci
2397425bb815Sopenharmony_ci**Summary**
2398425bb815Sopenharmony_ci
2399425bb815Sopenharmony_ciCreate (api) abort from a value.
2400425bb815Sopenharmony_ci
2401425bb815Sopenharmony_ciThis function creates an API abort value from an API value. The second argument defines
2402425bb815Sopenharmony_ciwhether the input value must be released or not. If it is set to `true`,
2403425bb815Sopenharmony_cithen a [`jerry_release_value`](#jerry_release_value) function will be called
2404425bb815Sopenharmony_cifor the first argument, so the api value won't be available after the call of
2405425bb815Sopenharmony_ci`jerry_create_abort_from_value`. The second argument should be false if both value
2406425bb815Sopenharmony_ciand created abort value are needed.
2407425bb815Sopenharmony_ci
2408425bb815Sopenharmony_ci**Prototype**
2409425bb815Sopenharmony_ci
2410425bb815Sopenharmony_ci```c
2411425bb815Sopenharmony_cijerry_value_t
2412425bb815Sopenharmony_cijerry_create_abort_from_value (jerry_value_t value, bool release);
2413425bb815Sopenharmony_ci```
2414425bb815Sopenharmony_ci
2415425bb815Sopenharmony_ci- `value` - api value
2416425bb815Sopenharmony_ci- `release` - raw boolean, defines whether input value must be released
2417425bb815Sopenharmony_ci- return value - abort (api) value
2418425bb815Sopenharmony_ci
2419425bb815Sopenharmony_ci*New in version 2.0*.
2420425bb815Sopenharmony_ci
2421425bb815Sopenharmony_ci**Example 1**
2422425bb815Sopenharmony_ci
2423425bb815Sopenharmony_ci```c
2424425bb815Sopenharmony_ci{
2425425bb815Sopenharmony_ci  jerry_value_t value;
2426425bb815Sopenharmony_ci  ... // create or acquire value
2427425bb815Sopenharmony_ci
2428425bb815Sopenharmony_ci  jerry_value_t abort = jerry_create_abort_from_value (value, true);
2429425bb815Sopenharmony_ci  // using the 'value' variable after release is invalid.
2430425bb815Sopenharmony_ci
2431425bb815Sopenharmony_ci  jerry_release_value (abort);
2432425bb815Sopenharmony_ci}
2433425bb815Sopenharmony_ci```
2434425bb815Sopenharmony_ci
2435425bb815Sopenharmony_ci**Example 2**
2436425bb815Sopenharmony_ci
2437425bb815Sopenharmony_ci```c
2438425bb815Sopenharmony_ci{
2439425bb815Sopenharmony_ci  jerry_value_t value;
2440425bb815Sopenharmony_ci  ... // create or acquire value
2441425bb815Sopenharmony_ci
2442425bb815Sopenharmony_ci  jerry_value_t abort = jerry_create_abort_from_value (value, false);
2443425bb815Sopenharmony_ci  // both 'abort' and 'value' can be used and must be released when they are no longer needed
2444425bb815Sopenharmony_ci
2445425bb815Sopenharmony_ci  jerry_release_value (abort);
2446425bb815Sopenharmony_ci  jerry_release_value (value);
2447425bb815Sopenharmony_ci}
2448425bb815Sopenharmony_ci```
2449425bb815Sopenharmony_ci
2450425bb815Sopenharmony_ci**See also**
2451425bb815Sopenharmony_ci
2452425bb815Sopenharmony_ci- [jerry_value_t](#jerry_value_t)
2453425bb815Sopenharmony_ci- [jerry_get_value_from_error](#jerry_get_value_from_error)
2454425bb815Sopenharmony_ci- [jerry_create_error_from_value](#jerry_create_error_from_value)
2455425bb815Sopenharmony_ci
2456425bb815Sopenharmony_ci## jerry_create_error_from_value
2457425bb815Sopenharmony_ci
2458425bb815Sopenharmony_ci**Summary**
2459425bb815Sopenharmony_ci
2460425bb815Sopenharmony_ciCreate (api) error from a value.
2461425bb815Sopenharmony_ci
2462425bb815Sopenharmony_ciThis function creates an API error value from an API value. The second argument defines
2463425bb815Sopenharmony_ciwhether the input value must be released or not. If it is set to `true`,
2464425bb815Sopenharmony_cithen a [`jerry_release_value`](#jerry_release_value) function will be called
2465425bb815Sopenharmony_cifor the first argument, so the api value won't be available after the call of
2466425bb815Sopenharmony_ci`jerry_create_error_from_value`. The second argument should be false if both value
2467425bb815Sopenharmony_ciand created error value are needed.
2468425bb815Sopenharmony_ci
2469425bb815Sopenharmony_ci**Prototype**
2470425bb815Sopenharmony_ci
2471425bb815Sopenharmony_ci```c
2472425bb815Sopenharmony_cijerry_value_t
2473425bb815Sopenharmony_cijerry_create_error_from_value (jerry_value_t value, bool release);
2474425bb815Sopenharmony_ci```
2475425bb815Sopenharmony_ci
2476425bb815Sopenharmony_ci- `value` - api value
2477425bb815Sopenharmony_ci- `release` - raw boolean, defines whether input value must be released
2478425bb815Sopenharmony_ci- return value - error (api) value
2479425bb815Sopenharmony_ci
2480425bb815Sopenharmony_ci*New in version 2.0*.
2481425bb815Sopenharmony_ci
2482425bb815Sopenharmony_ci**Example 1**
2483425bb815Sopenharmony_ci
2484425bb815Sopenharmony_ci```c
2485425bb815Sopenharmony_ci{
2486425bb815Sopenharmony_ci  jerry_value_t value;
2487425bb815Sopenharmony_ci  ... // create or acquire value
2488425bb815Sopenharmony_ci
2489425bb815Sopenharmony_ci  jerry_value_t error = jerry_create_error_from_value (value, true);
2490425bb815Sopenharmony_ci  // using the 'value' variable after release is invalid.
2491425bb815Sopenharmony_ci
2492425bb815Sopenharmony_ci
2493425bb815Sopenharmony_ci  jerry_release_value (error);
2494425bb815Sopenharmony_ci}
2495425bb815Sopenharmony_ci```
2496425bb815Sopenharmony_ci
2497425bb815Sopenharmony_ci**Example 2**
2498425bb815Sopenharmony_ci
2499425bb815Sopenharmony_ci```c
2500425bb815Sopenharmony_ci{
2501425bb815Sopenharmony_ci  jerry_value_t value;
2502425bb815Sopenharmony_ci  ... // create or acquire value
2503425bb815Sopenharmony_ci
2504425bb815Sopenharmony_ci  jerry_value_t error = jerry_create_error_from_value (value, false);
2505425bb815Sopenharmony_ci  // both 'error' and 'value' can be used and must be released when they are no longer needed
2506425bb815Sopenharmony_ci
2507425bb815Sopenharmony_ci  jerry_release_value (error);
2508425bb815Sopenharmony_ci  jerry_release_value (value);
2509425bb815Sopenharmony_ci}
2510425bb815Sopenharmony_ci```
2511425bb815Sopenharmony_ci
2512425bb815Sopenharmony_ci**See also**
2513425bb815Sopenharmony_ci
2514425bb815Sopenharmony_ci- [jerry_value_t](#jerry_value_t)
2515425bb815Sopenharmony_ci- [jerry_get_value_from_error](#jerry_get_value_from_error)
2516425bb815Sopenharmony_ci- [jerry_create_abort_from_value](#jerry_create_abort_from_value)
2517425bb815Sopenharmony_ci
2518425bb815Sopenharmony_ci## jerry_get_error_type
2519425bb815Sopenharmony_ci
2520425bb815Sopenharmony_ci**Summary**
2521425bb815Sopenharmony_ci
2522425bb815Sopenharmony_ciReturns the type of the Error object if possible.
2523425bb815Sopenharmony_ci
2524425bb815Sopenharmony_ciIf a non-error object is used as the input for the function the method
2525425bb815Sopenharmony_ciwill return `JERRY_ERROR_NONE` indicating that the value was not
2526425bb815Sopenharmony_cian Error object. However it is still possible that the value contains
2527425bb815Sopenharmony_cierror semantics. To correctly detect if a value have error use the
2528425bb815Sopenharmony_ci[jerry_value_is_error](#jerry_value_is_error) method.
2529425bb815Sopenharmony_ci
2530425bb815Sopenharmony_ci**Prototype**
2531425bb815Sopenharmony_ci
2532425bb815Sopenharmony_ci```c
2533425bb815Sopenharmony_cijerry_error_t
2534425bb815Sopenharmony_cijerry_get_error_type (const jerry_value_t value);
2535425bb815Sopenharmony_ci```
2536425bb815Sopenharmony_ci
2537425bb815Sopenharmony_ci- `value` - api value (possible error object)
2538425bb815Sopenharmony_ci- return value
2539425bb815Sopenharmony_ci  - JERRY_ERROR_NONE if the input is not an error object
2540425bb815Sopenharmony_ci  - one of the [jerry_error_t](#jerry_error_t) value
2541425bb815Sopenharmony_ci
2542425bb815Sopenharmony_ci*New in version 2.0*.
2543425bb815Sopenharmony_ci
2544425bb815Sopenharmony_ci**Example**
2545425bb815Sopenharmony_ci
2546425bb815Sopenharmony_ci```c
2547425bb815Sopenharmony_ci{
2548425bb815Sopenharmony_ci  jerry_value_t error_obj = jerry_create_error (JERRY_ERROR_RANGE,
2549425bb815Sopenharmony_ci                                                (const jerry_char_t *) "error msg");
2550425bb815Sopenharmony_ci  jerry_error_t error_type = jerry_get_error_type (error_obj);
2551425bb815Sopenharmony_ci
2552425bb815Sopenharmony_ci  // error_type is now JERRY_ERROR_RANGE.
2553425bb815Sopenharmony_ci
2554425bb815Sopenharmony_ci  jerry_release_value (error_obj);
2555425bb815Sopenharmony_ci}
2556425bb815Sopenharmony_ci```
2557425bb815Sopenharmony_ci
2558425bb815Sopenharmony_ci**See also**
2559425bb815Sopenharmony_ci
2560425bb815Sopenharmony_ci- [jerry_create_error](#jerry_create_error)
2561425bb815Sopenharmony_ci- [jerry_value_is_error](#jerry_value_is_error)
2562425bb815Sopenharmony_ci
2563425bb815Sopenharmony_ci## jerry_get_value_from_error
2564425bb815Sopenharmony_ci
2565425bb815Sopenharmony_ci**Summary**
2566425bb815Sopenharmony_ci
2567425bb815Sopenharmony_ciGet the value from an error.
2568425bb815Sopenharmony_ci
2569425bb815Sopenharmony_ciMany API functions cannot be called with an error value.
2570425bb815Sopenharmony_ciThis function extracts the API value from an error. The second argument defines
2571425bb815Sopenharmony_ciwhether the input error value must be released or not. If it is set to `true`,
2572425bb815Sopenharmony_cithen a [`jerry_release_value`](#jerry_release_value) function will be called
2573425bb815Sopenharmony_cifor the first argument, so the error value won't be available after the call of
2574425bb815Sopenharmony_ci`jerry_get_value_from_error`. The second argument should be false if both error
2575425bb815Sopenharmony_ciand its represented value are needed.
2576425bb815Sopenharmony_ci
2577425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
2578425bb815Sopenharmony_ciis no longer needed.
2579425bb815Sopenharmony_ci
2580425bb815Sopenharmony_ci**Prototype**
2581425bb815Sopenharmony_ci
2582425bb815Sopenharmony_ci```c
2583425bb815Sopenharmony_cijerry_value_t
2584425bb815Sopenharmony_cijerry_get_value_from_error (jerry_value_t value, bool release)
2585425bb815Sopenharmony_ci```
2586425bb815Sopenharmony_ci
2587425bb815Sopenharmony_ci- `value` - error (api) value
2588425bb815Sopenharmony_ci- `release` - raw boolean, defines whether input value must be released
2589425bb815Sopenharmony_ci- return value - api value
2590425bb815Sopenharmony_ci
2591425bb815Sopenharmony_ci*New in version 2.0*.
2592425bb815Sopenharmony_ci
2593425bb815Sopenharmony_ci**Example 1**
2594425bb815Sopenharmony_ci
2595425bb815Sopenharmony_ci```c
2596425bb815Sopenharmony_ci{
2597425bb815Sopenharmony_ci  jerry_value_t value;
2598425bb815Sopenharmony_ci  ... // create or acquire value
2599425bb815Sopenharmony_ci
2600425bb815Sopenharmony_ci  jerry_value_t error = jerry_create_error_from_value (value, true);
2601425bb815Sopenharmony_ci  jerry_value_t value_from_error = jerry_get_value_from_error (error, true);
2602425bb815Sopenharmony_ci  // using the 'error' variable after release is invalid.
2603425bb815Sopenharmony_ci
2604425bb815Sopenharmony_ci  jerry_release_value (value_from_error);
2605425bb815Sopenharmony_ci}
2606425bb815Sopenharmony_ci```
2607425bb815Sopenharmony_ci
2608425bb815Sopenharmony_ci**Example 2**
2609425bb815Sopenharmony_ci
2610425bb815Sopenharmony_ci```c
2611425bb815Sopenharmony_ci{
2612425bb815Sopenharmony_ci  jerry_value_t value;
2613425bb815Sopenharmony_ci  ... // create or acquire value
2614425bb815Sopenharmony_ci
2615425bb815Sopenharmony_ci  jerry_value_t error = jerry_create_error_from_value (value, true);
2616425bb815Sopenharmony_ci  jerry_value_t value_from_error = jerry_get_value_from_error (error, false);
2617425bb815Sopenharmony_ci  // both 'error' and 'value_from_error' can be used and must be released when they are no longer needed
2618425bb815Sopenharmony_ci
2619425bb815Sopenharmony_ci  jerry_release_value (value_from_error);
2620425bb815Sopenharmony_ci  jerry_release_value (error);
2621425bb815Sopenharmony_ci}
2622425bb815Sopenharmony_ci```
2623425bb815Sopenharmony_ci
2624425bb815Sopenharmony_ci**See also**
2625425bb815Sopenharmony_ci
2626425bb815Sopenharmony_ci- [jerry_value_t](#jerry_value_t)
2627425bb815Sopenharmony_ci- [jerry_create_error_from_value](#jerry_create_error_from_value)
2628425bb815Sopenharmony_ci- [jerry_create_abort_from_value](#jerry_create_abort_from_value)
2629425bb815Sopenharmony_ci
2630425bb815Sopenharmony_ci# Getter functions of 'jerry_value_t'
2631425bb815Sopenharmony_ci
2632425bb815Sopenharmony_ciGet raw data from API values.
2633425bb815Sopenharmony_ci
2634425bb815Sopenharmony_ci## jerry_get_boolean_value
2635425bb815Sopenharmony_ci
2636425bb815Sopenharmony_ci**Summary**
2637425bb815Sopenharmony_ci
2638425bb815Sopenharmony_ciGets the raw bool value from a `jerry_value_t`.
2639425bb815Sopenharmony_ci
2640425bb815Sopenharmony_ci**Prototype**
2641425bb815Sopenharmony_ci
2642425bb815Sopenharmony_ci```c
2643425bb815Sopenharmony_cibool
2644425bb815Sopenharmony_cijerry_get_boolean_value (const jerry_value_t value);
2645425bb815Sopenharmony_ci```
2646425bb815Sopenharmony_ci
2647425bb815Sopenharmony_ci- `value` - api value
2648425bb815Sopenharmony_ci- return value - boolean value represented by the argument.
2649425bb815Sopenharmony_ci
2650425bb815Sopenharmony_ci**Example**
2651425bb815Sopenharmony_ci
2652425bb815Sopenharmony_ci```c
2653425bb815Sopenharmony_ci{
2654425bb815Sopenharmony_ci  jerry_value_t value;
2655425bb815Sopenharmony_ci  ... // create or acquire value
2656425bb815Sopenharmony_ci
2657425bb815Sopenharmony_ci  if (jerry_value_is_boolean (value))
2658425bb815Sopenharmony_ci  {
2659425bb815Sopenharmony_ci    bool raw_value = jerry_get_boolean_value (value);
2660425bb815Sopenharmony_ci
2661425bb815Sopenharmony_ci    ... // usage of raw value
2662425bb815Sopenharmony_ci
2663425bb815Sopenharmony_ci  }
2664425bb815Sopenharmony_ci
2665425bb815Sopenharmony_ci  jerry_release_value (value);
2666425bb815Sopenharmony_ci}
2667425bb815Sopenharmony_ci
2668425bb815Sopenharmony_ci```
2669425bb815Sopenharmony_ci
2670425bb815Sopenharmony_ci**See also**
2671425bb815Sopenharmony_ci
2672425bb815Sopenharmony_ci- [jerry_value_is_boolean](#jerry_value_is_boolean)
2673425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
2674425bb815Sopenharmony_ci
2675425bb815Sopenharmony_ci
2676425bb815Sopenharmony_ci## jerry_get_number_value
2677425bb815Sopenharmony_ci
2678425bb815Sopenharmony_ci**Summary**
2679425bb815Sopenharmony_ci
2680425bb815Sopenharmony_ciGets the number value of the given `jerry_value_t` parameter as a raw double.
2681425bb815Sopenharmony_ci
2682425bb815Sopenharmony_ciIf the argument passed is not a number `0.0` will be returned.
2683425bb815Sopenharmony_ci
2684425bb815Sopenharmony_ci**Prototype**
2685425bb815Sopenharmony_ci
2686425bb815Sopenharmony_ci```c
2687425bb815Sopenharmony_cidouble
2688425bb815Sopenharmony_cijerry_get_number_value (const jerry_value_t value);
2689425bb815Sopenharmony_ci```
2690425bb815Sopenharmony_ci
2691425bb815Sopenharmony_ci- `value` - api value
2692425bb815Sopenharmony_ci- return value
2693425bb815Sopenharmony_ci  - the number value of the given `jerry_value_t` parameter as a raw double.
2694425bb815Sopenharmony_ci  - `0.0` if the api value passed is not a number.
2695425bb815Sopenharmony_ci
2696425bb815Sopenharmony_ci**Example**
2697425bb815Sopenharmony_ci
2698425bb815Sopenharmony_ci```c
2699425bb815Sopenharmony_ci{
2700425bb815Sopenharmony_ci  jerry_value_t value;
2701425bb815Sopenharmony_ci  ... // create or acquire value
2702425bb815Sopenharmony_ci
2703425bb815Sopenharmony_ci  if (jerry_value_is_number (value))
2704425bb815Sopenharmony_ci  {
2705425bb815Sopenharmony_ci    double raw_value = jerry_get_number_value (value);
2706425bb815Sopenharmony_ci
2707425bb815Sopenharmony_ci    ... // usage of raw value
2708425bb815Sopenharmony_ci
2709425bb815Sopenharmony_ci  }
2710425bb815Sopenharmony_ci
2711425bb815Sopenharmony_ci  jerry_release_value (value);
2712425bb815Sopenharmony_ci}
2713425bb815Sopenharmony_ci```
2714425bb815Sopenharmony_ci
2715425bb815Sopenharmony_ci**See also**
2716425bb815Sopenharmony_ci
2717425bb815Sopenharmony_ci- [jerry_value_is_number](#jerry_value_is_number)
2718425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
2719425bb815Sopenharmony_ci
2720425bb815Sopenharmony_ci
2721425bb815Sopenharmony_ci# Functions for string values
2722425bb815Sopenharmony_ci
2723425bb815Sopenharmony_ci## jerry_get_string_size
2724425bb815Sopenharmony_ci
2725425bb815Sopenharmony_ci**Summary**
2726425bb815Sopenharmony_ci
2727425bb815Sopenharmony_ciGet the size of a string. Returns zero, if the value parameter is not a string.
2728425bb815Sopenharmony_ciThis is effectively the number of bytes required to store the string's characters.
2729425bb815Sopenharmony_ci
2730425bb815Sopenharmony_ci**Prototype**
2731425bb815Sopenharmony_ci
2732425bb815Sopenharmony_ci```c
2733425bb815Sopenharmony_cijerry_size_t
2734425bb815Sopenharmony_cijerry_get_string_size (const jerry_value_t value);
2735425bb815Sopenharmony_ci```
2736425bb815Sopenharmony_ci- `value` - api value
2737425bb815Sopenharmony_ci- return value - number of bytes in the buffer needed to represent the string.
2738425bb815Sopenharmony_ci
2739425bb815Sopenharmony_ci**Example**
2740425bb815Sopenharmony_ci
2741425bb815Sopenharmony_ci```c
2742425bb815Sopenharmony_ci{
2743425bb815Sopenharmony_ci  const jerry_char_t char_array[] = "a string";
2744425bb815Sopenharmony_ci  jerry_value_t string = jerry_create_string (char_array);
2745425bb815Sopenharmony_ci
2746425bb815Sopenharmony_ci  jerry_size_t string_size = jerry_get_string_size (string);
2747425bb815Sopenharmony_ci
2748425bb815Sopenharmony_ci  ... // usage of string_size
2749425bb815Sopenharmony_ci
2750425bb815Sopenharmony_ci  jerry_release_value (string);
2751425bb815Sopenharmony_ci}
2752425bb815Sopenharmony_ci```
2753425bb815Sopenharmony_ci
2754425bb815Sopenharmony_ci**See also**
2755425bb815Sopenharmony_ci
2756425bb815Sopenharmony_ci- [jerry_create_string](#jerry_create_string)
2757425bb815Sopenharmony_ci- [jerry_get_string_length](#jerry_get_string_length)
2758425bb815Sopenharmony_ci- [jerry_is_valid_cesu8_string](#jerry_is_valid_cesu8_string)
2759425bb815Sopenharmony_ci
2760425bb815Sopenharmony_ci
2761425bb815Sopenharmony_ci## jerry_get_utf8_string_size
2762425bb815Sopenharmony_ci
2763425bb815Sopenharmony_ci**Summary**
2764425bb815Sopenharmony_ci
2765425bb815Sopenharmony_ciGet the size of an utf8-encoded string. Returns zero, if the value parameter is not a string.
2766425bb815Sopenharmony_ciThis is effectively the number of bytes required to store the utf8 encoded string's characters.
2767425bb815Sopenharmony_ci
2768425bb815Sopenharmony_ci*Note*: The difference from [jerry_get_string_size](#jerry_get_string_size) is that it returns with utf-8 string size
2769425bb815Sopenharmony_ciinstead of the cesu-8 string size.
2770425bb815Sopenharmony_ci
2771425bb815Sopenharmony_ci**Prototype**
2772425bb815Sopenharmony_ci
2773425bb815Sopenharmony_ci```c
2774425bb815Sopenharmony_cijerry_size_t
2775425bb815Sopenharmony_cijerry_get_utf8_string_size (const jerry_value_t value);
2776425bb815Sopenharmony_ci```
2777425bb815Sopenharmony_ci- `value` - api value
2778425bb815Sopenharmony_ci- return value - number of bytes in the buffer needed to represent the utf8-encoded string.
2779425bb815Sopenharmony_ci
2780425bb815Sopenharmony_ci*New in version 2.0*.
2781425bb815Sopenharmony_ci
2782425bb815Sopenharmony_ci**Example**
2783425bb815Sopenharmony_ci
2784425bb815Sopenharmony_ci```c
2785425bb815Sopenharmony_ci{
2786425bb815Sopenharmony_ci  const jerry_char_t char_array[] = "a string";
2787425bb815Sopenharmony_ci  jerry_value_t string = jerry_create_string (char_array);
2788425bb815Sopenharmony_ci
2789425bb815Sopenharmony_ci  jerry_size_t string_size = jerry_get_utf8_string_size (string);
2790425bb815Sopenharmony_ci
2791425bb815Sopenharmony_ci  ... // usage of string_size
2792425bb815Sopenharmony_ci
2793425bb815Sopenharmony_ci  jerry_release_value (string);
2794425bb815Sopenharmony_ci}
2795425bb815Sopenharmony_ci```
2796425bb815Sopenharmony_ci
2797425bb815Sopenharmony_ci**See also**
2798425bb815Sopenharmony_ci
2799425bb815Sopenharmony_ci- [jerry_create_string_from_utf8](#jerry_create_string_from_utf8)
2800425bb815Sopenharmony_ci- [jerry_get_utf8_string_length](#jerry_get_utf8_string_length)
2801425bb815Sopenharmony_ci- [jerry_is_valid_utf8_string](#jerry_is_valid_utf8_string)
2802425bb815Sopenharmony_ci
2803425bb815Sopenharmony_ci
2804425bb815Sopenharmony_ci## jerry_get_string_length
2805425bb815Sopenharmony_ci
2806425bb815Sopenharmony_ci**Summary**
2807425bb815Sopenharmony_ci
2808425bb815Sopenharmony_ciGet the length of a string. Returns zero, if the value parameter is not a string.
2809425bb815Sopenharmony_ci
2810425bb815Sopenharmony_ci*Notes:*
2811425bb815Sopenharmony_ci- The difference from [jerry_get_string_size](#jerry_get_string_size) is that it
2812425bb815Sopenharmony_ci  returns the number of bytes used for the string.
2813425bb815Sopenharmony_ci- This is **not** the number of bytes required to store the string.
2814425bb815Sopenharmony_ci
2815425bb815Sopenharmony_ci**Prototype**
2816425bb815Sopenharmony_ci
2817425bb815Sopenharmony_ci```c
2818425bb815Sopenharmony_cijerry_length_t
2819425bb815Sopenharmony_cijerry_get_string_length (const jerry_value_t value);
2820425bb815Sopenharmony_ci```
2821425bb815Sopenharmony_ci
2822425bb815Sopenharmony_ci- `value` - api value
2823425bb815Sopenharmony_ci- return value - number of characters in the string
2824425bb815Sopenharmony_ci
2825425bb815Sopenharmony_ci**Example**
2826425bb815Sopenharmony_ci
2827425bb815Sopenharmony_ci```c
2828425bb815Sopenharmony_ci{
2829425bb815Sopenharmony_ci  const jerry_char_t char_array[] = "a string";
2830425bb815Sopenharmony_ci  jerry_value_t string = jerry_create_string (char_array);
2831425bb815Sopenharmony_ci
2832425bb815Sopenharmony_ci  jerry_length_t string_length = jerry_get_string_length (string);
2833425bb815Sopenharmony_ci
2834425bb815Sopenharmony_ci  ... // usage of string_length
2835425bb815Sopenharmony_ci
2836425bb815Sopenharmony_ci  jerry_release_value (string);
2837425bb815Sopenharmony_ci}
2838425bb815Sopenharmony_ci```
2839425bb815Sopenharmony_ci
2840425bb815Sopenharmony_ci**See also**
2841425bb815Sopenharmony_ci
2842425bb815Sopenharmony_ci- [jerry_create_string](#jerry_create_string)
2843425bb815Sopenharmony_ci- [jerry_get_string_size](#jerry_get_string_size)
2844425bb815Sopenharmony_ci- [jerry_is_valid_cesu8_string](#jerry_is_valid_cesu8_string)
2845425bb815Sopenharmony_ci
2846425bb815Sopenharmony_ci
2847425bb815Sopenharmony_ci## jerry_get_utf8_string_length
2848425bb815Sopenharmony_ci
2849425bb815Sopenharmony_ci**Summary**
2850425bb815Sopenharmony_ci
2851425bb815Sopenharmony_ciGet the length of an UTF-8 encoded string. Returns zero, if the value parameter is not a string.
2852425bb815Sopenharmony_ci
2853425bb815Sopenharmony_ci*Notes*:
2854425bb815Sopenharmony_ci- The difference from [jerry_get_string_length](#jerry_get_string_length) is that it
2855425bb815Sopenharmony_ci  returns with utf-8 string length instead of the cesu-8 string length.
2856425bb815Sopenharmony_ci- This is **not** the number of bytes required to store the string.
2857425bb815Sopenharmony_ci
2858425bb815Sopenharmony_ci**Prototype**
2859425bb815Sopenharmony_ci
2860425bb815Sopenharmony_ci```c
2861425bb815Sopenharmony_cijerry_length_t
2862425bb815Sopenharmony_cijerry_get_utf8_string_length (const jerry_value_t value);
2863425bb815Sopenharmony_ci```
2864425bb815Sopenharmony_ci
2865425bb815Sopenharmony_ci- `value` - input string value
2866425bb815Sopenharmony_ci- return value - number of characters in the string
2867425bb815Sopenharmony_ci
2868425bb815Sopenharmony_ci*New in version 2.0*.
2869425bb815Sopenharmony_ci
2870425bb815Sopenharmony_ci**Example**
2871425bb815Sopenharmony_ci
2872425bb815Sopenharmony_ci```c
2873425bb815Sopenharmony_ci{
2874425bb815Sopenharmony_ci  const jerry_char_t char_array[] = "a string";
2875425bb815Sopenharmony_ci  jerry_value_t string = jerry_create_string_from_utf8 (char_array);
2876425bb815Sopenharmony_ci
2877425bb815Sopenharmony_ci  jerry_length_t string_length = jerry_get_utf8_string_length (string);
2878425bb815Sopenharmony_ci
2879425bb815Sopenharmony_ci  ... // usage of string_length
2880425bb815Sopenharmony_ci
2881425bb815Sopenharmony_ci  jerry_release_value (string);
2882425bb815Sopenharmony_ci}
2883425bb815Sopenharmony_ci```
2884425bb815Sopenharmony_ci
2885425bb815Sopenharmony_ci**See also**
2886425bb815Sopenharmony_ci
2887425bb815Sopenharmony_ci- [jerry_create_string_from_utf8](#jerry_create_string_from_utf8)
2888425bb815Sopenharmony_ci- [jerry_get_utf8_string_size](#jerry_get_utf8_string_size)
2889425bb815Sopenharmony_ci- [jerry_is_valid_utf8_string](#jerry_is_valid_utf8_string)
2890425bb815Sopenharmony_ci
2891425bb815Sopenharmony_ci
2892425bb815Sopenharmony_ci## jerry_string_to_char_buffer
2893425bb815Sopenharmony_ci
2894425bb815Sopenharmony_ci**Summary**
2895425bb815Sopenharmony_ci
2896425bb815Sopenharmony_ciCopy the characters of a string into a specified cesu-8 buffer.
2897425bb815Sopenharmony_ciThe '\0' character could occur in the character buffer. Returns 0,
2898425bb815Sopenharmony_ciif the value parameter is not a string or the buffer is not large
2899425bb815Sopenharmony_cienough for the whole string.
2900425bb815Sopenharmony_ci
2901425bb815Sopenharmony_ci*Note*: Does not put '\0' to the end of string, the return value identifies
2902425bb815Sopenharmony_cithe number of valid bytes in the output buffer.
2903425bb815Sopenharmony_ci
2904425bb815Sopenharmony_ci*Note*: If the size of the string in jerry value is larger than the size of the
2905425bb815Sopenharmony_citarget buffer, the copy will fail. To copy a substring the
2906425bb815Sopenharmony_ci[jerry_substring_to_char_buffer](#jerry_substring_to_char_buffer) API function
2907425bb815Sopenharmony_ciis recommended instead.
2908425bb815Sopenharmony_ci
2909425bb815Sopenharmony_ci
2910425bb815Sopenharmony_ci**Prototype**
2911425bb815Sopenharmony_ci
2912425bb815Sopenharmony_ci```c
2913425bb815Sopenharmony_cijerry_size_t
2914425bb815Sopenharmony_cijerry_string_to_char_buffer (const jerry_value_t value,
2915425bb815Sopenharmony_ci                             jerry_char_t *buffer_p,
2916425bb815Sopenharmony_ci                             jerry_size_t buffer_size);
2917425bb815Sopenharmony_ci```
2918425bb815Sopenharmony_ci
2919425bb815Sopenharmony_ci- `value` - input string value
2920425bb815Sopenharmony_ci- `buffer_p` - pointer to output buffer
2921425bb815Sopenharmony_ci- `buffer_size` - size of the buffer
2922425bb815Sopenharmony_ci- return value - number of bytes, actually copied to the buffer
2923425bb815Sopenharmony_ci
2924425bb815Sopenharmony_ci**Example**
2925425bb815Sopenharmony_ci
2926425bb815Sopenharmony_ci[doctest]: # ()
2927425bb815Sopenharmony_ci
2928425bb815Sopenharmony_ci```c
2929425bb815Sopenharmony_ci#include <stdio.h>
2930425bb815Sopenharmony_ci#include <stdlib.h>
2931425bb815Sopenharmony_ci#include "jerryscript.h"
2932425bb815Sopenharmony_ci
2933425bb815Sopenharmony_ciint
2934425bb815Sopenharmony_cimain (void)
2935425bb815Sopenharmony_ci{
2936425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
2937425bb815Sopenharmony_ci
2938425bb815Sopenharmony_ci  jerry_value_t value;
2939425bb815Sopenharmony_ci  // create or acquire value
2940425bb815Sopenharmony_ci  value = jerry_create_string ((const jerry_char_t *) "Demo string");
2941425bb815Sopenharmony_ci
2942425bb815Sopenharmony_ci  // Read the string into a byte buffer.
2943425bb815Sopenharmony_ci  jerry_size_t string_size = jerry_get_string_size (value);
2944425bb815Sopenharmony_ci  jerry_char_t *string_buffer_p = (jerry_char_t *) malloc (sizeof (jerry_char_t) * (string_size + 1));
2945425bb815Sopenharmony_ci
2946425bb815Sopenharmony_ci  jerry_size_t copied_bytes = jerry_string_to_char_buffer (value, string_buffer_p, string_size);
2947425bb815Sopenharmony_ci  string_buffer_p[copied_bytes] = '\0';
2948425bb815Sopenharmony_ci
2949425bb815Sopenharmony_ci  jerry_release_value (value);
2950425bb815Sopenharmony_ci
2951425bb815Sopenharmony_ci  jerry_cleanup ();
2952425bb815Sopenharmony_ci
2953425bb815Sopenharmony_ci  printf ("Test string: %s\n", string_buffer_p);
2954425bb815Sopenharmony_ci  free (string_buffer_p);
2955425bb815Sopenharmony_ci
2956425bb815Sopenharmony_ci  return 0;
2957425bb815Sopenharmony_ci}
2958425bb815Sopenharmony_ci```
2959425bb815Sopenharmony_ci
2960425bb815Sopenharmony_ci**See also**
2961425bb815Sopenharmony_ci
2962425bb815Sopenharmony_ci- [jerry_create_string](#jerry_create_string)
2963425bb815Sopenharmony_ci- [jerry_get_string_size](#jerry_get_string_size)
2964425bb815Sopenharmony_ci- [jerry_is_valid_cesu8_string](#jerry_is_valid_cesu8_string)
2965425bb815Sopenharmony_ci- [jerry_substring_to_char_buffer](#jerry_substring_to_char_buffer)
2966425bb815Sopenharmony_ci
2967425bb815Sopenharmony_ci
2968425bb815Sopenharmony_ci## jerry_string_to_utf8_char_buffer
2969425bb815Sopenharmony_ci
2970425bb815Sopenharmony_ci**Summary**
2971425bb815Sopenharmony_ci
2972425bb815Sopenharmony_ciCopy the characters of a string into a specified utf-8 buffer.
2973425bb815Sopenharmony_ciThe '\0' character could occur in character buffer. Returns 0,
2974425bb815Sopenharmony_ciif the value parameter is not a string or the buffer is not
2975425bb815Sopenharmony_cilarge enough for the whole string.
2976425bb815Sopenharmony_ci
2977425bb815Sopenharmony_ci*Note*: Does not put '\0' to the end of string, the return value identifies
2978425bb815Sopenharmony_cithe number of valid bytes in the output buffer.
2979425bb815Sopenharmony_ci
2980425bb815Sopenharmony_ci*Note*: If the size of the string in jerry value is larger than the size of the
2981425bb815Sopenharmony_citarget buffer, the copy will fail. To copy a substring the
2982425bb815Sopenharmony_ci[jerry_substring_to_utf8_char_buffer](#jerry_substring_to_utf8_char_buffer)
2983425bb815Sopenharmony_ciAPI function is recommended instead.
2984425bb815Sopenharmony_ci
2985425bb815Sopenharmony_ci**Prototype**
2986425bb815Sopenharmony_ci
2987425bb815Sopenharmony_ci```c
2988425bb815Sopenharmony_cijerry_size_t
2989425bb815Sopenharmony_cijerry_string_to_utf8_char_buffer (const jerry_value_t value,
2990425bb815Sopenharmony_ci                                  jerry_char_t *buffer_p,
2991425bb815Sopenharmony_ci                                  jerry_size_t buffer_size);
2992425bb815Sopenharmony_ci```
2993425bb815Sopenharmony_ci
2994425bb815Sopenharmony_ci- `value` - input string value
2995425bb815Sopenharmony_ci- `buffer_p` - pointer to output buffer
2996425bb815Sopenharmony_ci- `buffer_size` - size of the buffer
2997425bb815Sopenharmony_ci- return value - number of bytes, actually copied to the buffer
2998425bb815Sopenharmony_ci
2999425bb815Sopenharmony_ci*New in version 2.0*.
3000425bb815Sopenharmony_ci
3001425bb815Sopenharmony_ci**Example**
3002425bb815Sopenharmony_ci
3003425bb815Sopenharmony_ci```c
3004425bb815Sopenharmony_ci{
3005425bb815Sopenharmony_ci  jerry_value_t value;
3006425bb815Sopenharmony_ci  ... // create or acquire value
3007425bb815Sopenharmony_ci
3008425bb815Sopenharmony_ci  jerry_size_t req_sz = jerry_get_utf8_string_size (value);
3009425bb815Sopenharmony_ci  jerry_char_t str_buf_p[req_sz];
3010425bb815Sopenharmony_ci
3011425bb815Sopenharmony_ci  jerry_size_t bytes_copied = jerry_string_to_utf8_char_buffer (value, str_buf_p, req_sz);
3012425bb815Sopenharmony_ci
3013425bb815Sopenharmony_ci  jerry_release_value (value);
3014425bb815Sopenharmony_ci}
3015425bb815Sopenharmony_ci```
3016425bb815Sopenharmony_ci
3017425bb815Sopenharmony_ci**See also**
3018425bb815Sopenharmony_ci
3019425bb815Sopenharmony_ci- [jerry_create_string_from_utf8](#jerry_create_string_from_utf8)
3020425bb815Sopenharmony_ci- [jerry_get_utf8_string_size](#jerry_get_utf8_string_size)
3021425bb815Sopenharmony_ci- [jerry_is_valid_utf8_string](#jerry_is_valid_utf8_string)
3022425bb815Sopenharmony_ci- [jerry_substring_to_utf8_char_buffer](#jerry_substring_to_utf8_char_buffer)
3023425bb815Sopenharmony_ci
3024425bb815Sopenharmony_ci
3025425bb815Sopenharmony_ci## jerry_substring_to_char_buffer
3026425bb815Sopenharmony_ci
3027425bb815Sopenharmony_ci**Summary**
3028425bb815Sopenharmony_ci
3029425bb815Sopenharmony_ciCopy the characters of a cesu-8 encoded substring into a specified buffer.
3030425bb815Sopenharmony_ciThe '\0' character could occur in character buffer. Returns 0, if the value
3031425bb815Sopenharmony_ciparameter is not a string. It will extract the substring between the
3032425bb815Sopenharmony_cispecified start position and the end position (or the end of the string,
3033425bb815Sopenharmony_ciwhichever comes first).
3034425bb815Sopenharmony_ci
3035425bb815Sopenharmony_ci*Note*: Does not put '\0' to the end of string, the return value identifies
3036425bb815Sopenharmony_cithe number of valid bytes in the output buffer.
3037425bb815Sopenharmony_ci
3038425bb815Sopenharmony_ci**Prototype**
3039425bb815Sopenharmony_ci
3040425bb815Sopenharmony_ci```c
3041425bb815Sopenharmony_cijerry_size_t
3042425bb815Sopenharmony_cijerry_substring_to_char_buffer (const jerry_value_t value,
3043425bb815Sopenharmony_ci                                jerry_length_t start_pos,
3044425bb815Sopenharmony_ci                                jerry_length_t end_pos,
3045425bb815Sopenharmony_ci                                jerry_char_t *buffer_p,
3046425bb815Sopenharmony_ci                                jerry_size_t buffer_size);
3047425bb815Sopenharmony_ci```
3048425bb815Sopenharmony_ci
3049425bb815Sopenharmony_ci- `value` - input string value
3050425bb815Sopenharmony_ci- `start_pos` - position of the first character
3051425bb815Sopenharmony_ci- `end_pos` - position of the last character
3052425bb815Sopenharmony_ci- `buffer_p` - pointer to output buffer
3053425bb815Sopenharmony_ci- `buffer_size` - size of the buffer
3054425bb815Sopenharmony_ci- return value - number of bytes, actually copied to the buffer
3055425bb815Sopenharmony_ci
3056425bb815Sopenharmony_ci*New in version 2.0*.
3057425bb815Sopenharmony_ci
3058425bb815Sopenharmony_ci**Example**
3059425bb815Sopenharmony_ci
3060425bb815Sopenharmony_ci```c
3061425bb815Sopenharmony_ci{
3062425bb815Sopenharmony_ci  jerry_value_t value;
3063425bb815Sopenharmony_ci  ... // create or acquire value
3064425bb815Sopenharmony_ci
3065425bb815Sopenharmony_ci  jerry_size_t req_sz = jerry_get_string_size (value);
3066425bb815Sopenharmony_ci  jerry_char_t str_buf_p[req_sz];
3067425bb815Sopenharmony_ci  jerry_length_t start_pos = 0;
3068425bb815Sopenharmony_ci  jerry_length_t end_pos = jerry_get_string_length (value);
3069425bb815Sopenharmony_ci
3070425bb815Sopenharmony_ci  jerry_substring_to_char_buffer (value, start_pos, end_pos, str_buf_p, req_sz);
3071425bb815Sopenharmony_ci
3072425bb815Sopenharmony_ci  jerry_release_value (value);
3073425bb815Sopenharmony_ci}
3074425bb815Sopenharmony_ci```
3075425bb815Sopenharmony_ci
3076425bb815Sopenharmony_ci**See also**
3077425bb815Sopenharmony_ci
3078425bb815Sopenharmony_ci- [jerry_create_string](#jerry_create_string)
3079425bb815Sopenharmony_ci- [jerry_get_string_size](#jerry_get_string_size)
3080425bb815Sopenharmony_ci- [jerry_get_string_length](#jerry_get_string_length)
3081425bb815Sopenharmony_ci- [jerry_is_valid_cesu8_string](#jerry_is_valid_cesu8_string)
3082425bb815Sopenharmony_ci
3083425bb815Sopenharmony_ci
3084425bb815Sopenharmony_ci## jerry_substring_to_utf8_char_buffer
3085425bb815Sopenharmony_ci
3086425bb815Sopenharmony_ci**Summary**
3087425bb815Sopenharmony_ci
3088425bb815Sopenharmony_ciCopy the characters of an utf-8 encoded substring into a specified buffer.
3089425bb815Sopenharmony_ciThe '\0' character could occur in character buffer. Returns 0, if the value
3090425bb815Sopenharmony_ciparameter is not a string. It will extract the substring between the specified
3091425bb815Sopenharmony_cistart position and the end position (or the end of the string, whichever
3092425bb815Sopenharmony_cicomes first).
3093425bb815Sopenharmony_ci
3094425bb815Sopenharmony_ci*Note*: Does not put '\0' to the end of string, the return value identifies
3095425bb815Sopenharmony_cithe number of valid bytes in the output buffer.
3096425bb815Sopenharmony_ci
3097425bb815Sopenharmony_ci**Prototype**
3098425bb815Sopenharmony_ci
3099425bb815Sopenharmony_ci```c
3100425bb815Sopenharmony_cijerry_size_t
3101425bb815Sopenharmony_cijerry_substring_to_utf8_char_buffer (const jerry_value_t value,
3102425bb815Sopenharmony_ci                                     jerry_length_t start_pos,
3103425bb815Sopenharmony_ci                                     jerry_length_t end_pos,
3104425bb815Sopenharmony_ci                                     jerry_char_t *buffer_p,
3105425bb815Sopenharmony_ci                                     jerry_size_t buffer_size);
3106425bb815Sopenharmony_ci```
3107425bb815Sopenharmony_ci
3108425bb815Sopenharmony_ci- `value` - input string value
3109425bb815Sopenharmony_ci- `start_pos` - position of the first character
3110425bb815Sopenharmony_ci- `end_pos` - position of the last character
3111425bb815Sopenharmony_ci- `buffer_p` - pointer to output buffer
3112425bb815Sopenharmony_ci- `buffer_size` - size of the buffer
3113425bb815Sopenharmony_ci- return value - number of bytes, actually copied to the buffer
3114425bb815Sopenharmony_ci
3115425bb815Sopenharmony_ci*New in version 2.0*.
3116425bb815Sopenharmony_ci
3117425bb815Sopenharmony_ci**Example**
3118425bb815Sopenharmony_ci
3119425bb815Sopenharmony_ci```c
3120425bb815Sopenharmony_ci{
3121425bb815Sopenharmony_ci  jerry_value_t value;
3122425bb815Sopenharmony_ci  ... // create or acquire value
3123425bb815Sopenharmony_ci
3124425bb815Sopenharmony_ci  jerry_size_t req_sz = jerry_get_utf8_string_size (value);
3125425bb815Sopenharmony_ci  jerry_char_t str_buf_p[req_sz];
3126425bb815Sopenharmony_ci  jerry_length_t start_pos = 0;
3127425bb815Sopenharmony_ci  jerry_length_t end_pos = jerry_get_utf8_string_length (value);
3128425bb815Sopenharmony_ci
3129425bb815Sopenharmony_ci  jerry_substring_to_utf8_char_buffer (value, start_pos, end_pos, str_buf_p, req_sz);
3130425bb815Sopenharmony_ci
3131425bb815Sopenharmony_ci  jerry_release_value (value);
3132425bb815Sopenharmony_ci}
3133425bb815Sopenharmony_ci```
3134425bb815Sopenharmony_ci
3135425bb815Sopenharmony_ci**See also**
3136425bb815Sopenharmony_ci
3137425bb815Sopenharmony_ci- [jerry_create_string_from_utf8](#jerry_create_string_from_utf8)
3138425bb815Sopenharmony_ci- [jerry_get_utf8_string_size](#jerry_get_utf8_string_size)
3139425bb815Sopenharmony_ci- [jerry_get_utf8_string_length](#jerry_get_utf8_string_length)
3140425bb815Sopenharmony_ci- [jerry_is_valid_utf8_string](#jerry_is_valid_utf8_string)
3141425bb815Sopenharmony_ci
3142425bb815Sopenharmony_ci
3143425bb815Sopenharmony_ci# Functions for array object values
3144425bb815Sopenharmony_ci
3145425bb815Sopenharmony_ci## jerry_get_array_length
3146425bb815Sopenharmony_ci
3147425bb815Sopenharmony_ci**Summary**
3148425bb815Sopenharmony_ci
3149425bb815Sopenharmony_ciGet length of an array object. Returns zero, if the given parameter is not an array object.
3150425bb815Sopenharmony_ci
3151425bb815Sopenharmony_ci**Prototype**
3152425bb815Sopenharmony_ci
3153425bb815Sopenharmony_ci```c
3154425bb815Sopenharmony_ciuint32_t
3155425bb815Sopenharmony_cijerry_get_array_length (const jerry_value_t value);
3156425bb815Sopenharmony_ci```
3157425bb815Sopenharmony_ci
3158425bb815Sopenharmony_ci- `value` - input array value
3159425bb815Sopenharmony_ci- return value - length of the given array
3160425bb815Sopenharmony_ci
3161425bb815Sopenharmony_ci**Example**
3162425bb815Sopenharmony_ci
3163425bb815Sopenharmony_ci```c
3164425bb815Sopenharmony_ci{
3165425bb815Sopenharmony_ci  jerry_value_t value;
3166425bb815Sopenharmony_ci  ... // create or acquire value
3167425bb815Sopenharmony_ci
3168425bb815Sopenharmony_ci  uint32_t len = jerry_get_array_length (value);
3169425bb815Sopenharmony_ci
3170425bb815Sopenharmony_ci  jerry_release_value (value);
3171425bb815Sopenharmony_ci}
3172425bb815Sopenharmony_ci```
3173425bb815Sopenharmony_ci
3174425bb815Sopenharmony_ci**See also**
3175425bb815Sopenharmony_ci
3176425bb815Sopenharmony_ci- [jerry_create_array](#jerry_create_array)
3177425bb815Sopenharmony_ci
3178425bb815Sopenharmony_ci
3179425bb815Sopenharmony_ci# Converters of 'jerry_value_t'
3180425bb815Sopenharmony_ci
3181425bb815Sopenharmony_ciFunctions for converting API values to another value type.
3182425bb815Sopenharmony_ci
3183425bb815Sopenharmony_ci## jerry_value_to_boolean
3184425bb815Sopenharmony_ci
3185425bb815Sopenharmony_ci**Summary**
3186425bb815Sopenharmony_ci
3187425bb815Sopenharmony_ciCall ToBoolean operation on the api value.
3188425bb815Sopenharmony_ci
3189425bb815Sopenharmony_ci**Prototype**
3190425bb815Sopenharmony_ci
3191425bb815Sopenharmony_ci```c
3192425bb815Sopenharmony_cibool
3193425bb815Sopenharmony_cijerry_value_to_boolean (const jerry_value_t value);
3194425bb815Sopenharmony_ci```
3195425bb815Sopenharmony_ci
3196425bb815Sopenharmony_ci- `value` - api value
3197425bb815Sopenharmony_ci- return value
3198425bb815Sopenharmony_ci  - true, if the logical value is true
3199425bb815Sopenharmony_ci  - false, otherwise
3200425bb815Sopenharmony_ci
3201425bb815Sopenharmony_ci**Example**
3202425bb815Sopenharmony_ci
3203425bb815Sopenharmony_ci```c
3204425bb815Sopenharmony_ci{
3205425bb815Sopenharmony_ci  jerry_value_t value;
3206425bb815Sopenharmony_ci  ... // create or acquire value
3207425bb815Sopenharmony_ci
3208425bb815Sopenharmony_ci  bool b = jerry_value_to_boolean (value);
3209425bb815Sopenharmony_ci
3210425bb815Sopenharmony_ci  jerry_release_value (value);
3211425bb815Sopenharmony_ci}
3212425bb815Sopenharmony_ci
3213425bb815Sopenharmony_ci```
3214425bb815Sopenharmony_ci
3215425bb815Sopenharmony_ci**See also**
3216425bb815Sopenharmony_ci
3217425bb815Sopenharmony_ci- [jerry_value_to_primitive](#jerry_value_to_primitive)
3218425bb815Sopenharmony_ci
3219425bb815Sopenharmony_ci## jerry_value_to_number
3220425bb815Sopenharmony_ci
3221425bb815Sopenharmony_ci**Summary**
3222425bb815Sopenharmony_ci
3223425bb815Sopenharmony_ciCall ToNumber operation on the api value.
3224425bb815Sopenharmony_ci
3225425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
3226425bb815Sopenharmony_ciis no longer needed.
3227425bb815Sopenharmony_ci
3228425bb815Sopenharmony_ci**Prototype**
3229425bb815Sopenharmony_ci
3230425bb815Sopenharmony_ci```c
3231425bb815Sopenharmony_cijerry_value_t
3232425bb815Sopenharmony_cijerry_value_to_number (const jerry_value_t value);
3233425bb815Sopenharmony_ci```
3234425bb815Sopenharmony_ci
3235425bb815Sopenharmony_ci- `value` - api value
3236425bb815Sopenharmony_ci- return value
3237425bb815Sopenharmony_ci  - converted number value, if success
3238425bb815Sopenharmony_ci  - thrown error, otherwise
3239425bb815Sopenharmony_ci
3240425bb815Sopenharmony_ci**Example**
3241425bb815Sopenharmony_ci
3242425bb815Sopenharmony_ci```c
3243425bb815Sopenharmony_ci{
3244425bb815Sopenharmony_ci  jerry_value_t value;
3245425bb815Sopenharmony_ci  ... // create or acquire value
3246425bb815Sopenharmony_ci
3247425bb815Sopenharmony_ci  jerry_value_t number_value = jerry_value_to_number (value);
3248425bb815Sopenharmony_ci
3249425bb815Sopenharmony_ci  jerry_release_value (number_value);
3250425bb815Sopenharmony_ci  jerry_release_value (value);
3251425bb815Sopenharmony_ci}
3252425bb815Sopenharmony_ci
3253425bb815Sopenharmony_ci```
3254425bb815Sopenharmony_ci
3255425bb815Sopenharmony_ci**See also**
3256425bb815Sopenharmony_ci
3257425bb815Sopenharmony_ci- [jerry_value_to_primitive](#jerry_value_to_primitive)
3258425bb815Sopenharmony_ci
3259425bb815Sopenharmony_ci## jerry_value_to_object
3260425bb815Sopenharmony_ci
3261425bb815Sopenharmony_ci**Summary**
3262425bb815Sopenharmony_ci
3263425bb815Sopenharmony_ciCall ToObject operation on the api value.
3264425bb815Sopenharmony_ci
3265425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
3266425bb815Sopenharmony_ciis no longer needed.
3267425bb815Sopenharmony_ci
3268425bb815Sopenharmony_ci**Prototype**
3269425bb815Sopenharmony_ci
3270425bb815Sopenharmony_ci```c
3271425bb815Sopenharmony_cijerry_value_t
3272425bb815Sopenharmony_cijerry_value_to_object (const jerry_value_t value);
3273425bb815Sopenharmony_ci```
3274425bb815Sopenharmony_ci
3275425bb815Sopenharmony_ci- `value` - api value
3276425bb815Sopenharmony_ci- return value
3277425bb815Sopenharmony_ci  - converted object value, if success
3278425bb815Sopenharmony_ci  - thrown error, otherwise
3279425bb815Sopenharmony_ci
3280425bb815Sopenharmony_ci**Example**
3281425bb815Sopenharmony_ci
3282425bb815Sopenharmony_ci```c
3283425bb815Sopenharmony_ci{
3284425bb815Sopenharmony_ci  jerry_value_t value;
3285425bb815Sopenharmony_ci  ... // create or acquire value
3286425bb815Sopenharmony_ci
3287425bb815Sopenharmony_ci  jerry_value_t object_value = jerry_value_to_object (value);
3288425bb815Sopenharmony_ci
3289425bb815Sopenharmony_ci  jerry_release_value (object_value);
3290425bb815Sopenharmony_ci  jerry_release_value (value);
3291425bb815Sopenharmony_ci}
3292425bb815Sopenharmony_ci```
3293425bb815Sopenharmony_ci
3294425bb815Sopenharmony_ci**See also**
3295425bb815Sopenharmony_ci
3296425bb815Sopenharmony_ci- [jerry_value_to_primitive](#jerry_value_to_primitive)
3297425bb815Sopenharmony_ci
3298425bb815Sopenharmony_ci## jerry_value_to_primitive
3299425bb815Sopenharmony_ci
3300425bb815Sopenharmony_ci**Summary**
3301425bb815Sopenharmony_ci
3302425bb815Sopenharmony_ciCall ToPrimitive operation on the api value.
3303425bb815Sopenharmony_ci
3304425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
3305425bb815Sopenharmony_ciis no longer needed.
3306425bb815Sopenharmony_ci
3307425bb815Sopenharmony_ci**Prototype**
3308425bb815Sopenharmony_ci
3309425bb815Sopenharmony_ci```c
3310425bb815Sopenharmony_cijerry_value_t
3311425bb815Sopenharmony_cijerry_value_to_primitive (const jerry_value_t value);
3312425bb815Sopenharmony_ci```
3313425bb815Sopenharmony_ci
3314425bb815Sopenharmony_ci- `value` - api value
3315425bb815Sopenharmony_ci- return value
3316425bb815Sopenharmony_ci  - converted primitive value, if success
3317425bb815Sopenharmony_ci  - thrown error, otherwise
3318425bb815Sopenharmony_ci
3319425bb815Sopenharmony_ci**Example**
3320425bb815Sopenharmony_ci
3321425bb815Sopenharmony_ci```c
3322425bb815Sopenharmony_ci{
3323425bb815Sopenharmony_ci  jerry_value_t value;
3324425bb815Sopenharmony_ci  ... // create or acquire value
3325425bb815Sopenharmony_ci
3326425bb815Sopenharmony_ci  jerry_value_t prim_value = jerry_value_to_primitive (value);
3327425bb815Sopenharmony_ci
3328425bb815Sopenharmony_ci  jerry_release_value (prim_value);
3329425bb815Sopenharmony_ci  jerry_release_value (value);
3330425bb815Sopenharmony_ci}
3331425bb815Sopenharmony_ci```
3332425bb815Sopenharmony_ci
3333425bb815Sopenharmony_ci**See also**
3334425bb815Sopenharmony_ci
3335425bb815Sopenharmony_ci- [jerry_value_t](#jerry_value_t)
3336425bb815Sopenharmony_ci
3337425bb815Sopenharmony_ci## jerry_value_to_string
3338425bb815Sopenharmony_ci
3339425bb815Sopenharmony_ci**Summary**
3340425bb815Sopenharmony_ci
3341425bb815Sopenharmony_ciCall the ToString ecma builtin operation on the api value.
3342425bb815Sopenharmony_ci
3343425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
3344425bb815Sopenharmony_ciis no longer needed.
3345425bb815Sopenharmony_ci
3346425bb815Sopenharmony_ci**Prototype**
3347425bb815Sopenharmony_ci
3348425bb815Sopenharmony_ci```c
3349425bb815Sopenharmony_cijerry_value_t
3350425bb815Sopenharmony_cijerry_value_to_string (const jerry_value_t value);
3351425bb815Sopenharmony_ci```
3352425bb815Sopenharmony_ci
3353425bb815Sopenharmony_ci- `value` - api value
3354425bb815Sopenharmony_ci- return value
3355425bb815Sopenharmony_ci  - converted string value, if success
3356425bb815Sopenharmony_ci  - thrown error, otherwise
3357425bb815Sopenharmony_ci
3358425bb815Sopenharmony_ci**Example**
3359425bb815Sopenharmony_ci
3360425bb815Sopenharmony_ci```c
3361425bb815Sopenharmony_ci{
3362425bb815Sopenharmony_ci  jerry_value_t value;
3363425bb815Sopenharmony_ci  ... // create or acquire value
3364425bb815Sopenharmony_ci
3365425bb815Sopenharmony_ci  jerry_value_t string_value = jerry_value_to_string (value);
3366425bb815Sopenharmony_ci
3367425bb815Sopenharmony_ci  jerry_release_value (string_value);
3368425bb815Sopenharmony_ci  jerry_release_value (value);
3369425bb815Sopenharmony_ci}
3370425bb815Sopenharmony_ci```
3371425bb815Sopenharmony_ci
3372425bb815Sopenharmony_ci**See also**
3373425bb815Sopenharmony_ci
3374425bb815Sopenharmony_ci- [jerry_value_to_primitive](#jerry_value_to_primitive)
3375425bb815Sopenharmony_ci
3376425bb815Sopenharmony_ci
3377425bb815Sopenharmony_ci# Functions for promise objects
3378425bb815Sopenharmony_ci
3379425bb815Sopenharmony_ciThese APIs all depend on the ES2015-subset profile (or on some build options).
3380425bb815Sopenharmony_ci
3381425bb815Sopenharmony_ci## jerry_get_promise_result
3382425bb815Sopenharmony_ci
3383425bb815Sopenharmony_ci**Summary**
3384425bb815Sopenharmony_ci
3385425bb815Sopenharmony_ciThe function returns the result of a Promise object.
3386425bb815Sopenharmony_ci
3387425bb815Sopenharmony_ci*Notes*:
3388425bb815Sopenharmony_ci- Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
3389425bb815Sopenharmony_ci  is no longer needed.
3390425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_ES2015_BUILTIN_PROMISE`) and can be checked
3391425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_PROMISE` feature enum value,
3392425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
3393425bb815Sopenharmony_ci- The ES2015-subset profile enables this by default.
3394425bb815Sopenharmony_ci
3395425bb815Sopenharmony_ci
3396425bb815Sopenharmony_ci**Prototype**
3397425bb815Sopenharmony_ci
3398425bb815Sopenharmony_ci```c
3399425bb815Sopenharmony_cijerry_value_t
3400425bb815Sopenharmony_cijerry_get_promise_result (const jerry_value_t promise);
3401425bb815Sopenharmony_ci```
3402425bb815Sopenharmony_ci
3403425bb815Sopenharmony_ci- `promise` - the input Promise object.
3404425bb815Sopenharmony_ci- return
3405425bb815Sopenharmony_ci  - The result of the Promise.
3406425bb815Sopenharmony_ci  - If the Promise is not resolved yet the result is the 'undefined' value.
3407425bb815Sopenharmony_ci  - A TypeError is returned if the input argument was not a Promise object or
3408425bb815Sopenharmony_ci    the Promise support was not built into the library.
3409425bb815Sopenharmony_ci
3410425bb815Sopenharmony_ci*New in version 2.2*.
3411425bb815Sopenharmony_ci
3412425bb815Sopenharmony_ci**Example**
3413425bb815Sopenharmony_ci
3414425bb815Sopenharmony_ci[doctest]: # (test="compile")
3415425bb815Sopenharmony_ci
3416425bb815Sopenharmony_ci```c
3417425bb815Sopenharmony_ci#include <jerryscript.h>
3418425bb815Sopenharmony_ci
3419425bb815Sopenharmony_cistatic void
3420425bb815Sopenharmony_ciexample (void)
3421425bb815Sopenharmony_ci{
3422425bb815Sopenharmony_ci  // acquire/create a promise object.
3423425bb815Sopenharmony_ci  jerry_value_t promise = jerry_create_promise ();
3424425bb815Sopenharmony_ci  {
3425425bb815Sopenharmony_ci    // prepare the argumnent for the resolve or reject.
3426425bb815Sopenharmony_ci    jerry_value_t argument = jerry_create_number (33);
3427425bb815Sopenharmony_ci
3428425bb815Sopenharmony_ci    jerry_value_t is_ok = jerry_resolve_or_reject_promise (promise,
3429425bb815Sopenharmony_ci                                                           argument,
3430425bb815Sopenharmony_ci                                                           true);
3431425bb815Sopenharmony_ci    // 'is_ok' should be checked if it is an error or not.
3432425bb815Sopenharmony_ci    // skipped in this example
3433425bb815Sopenharmony_ci    jerry_release_value (is_ok);
3434425bb815Sopenharmony_ci    jerry_release_value (argument);
3435425bb815Sopenharmony_ci  }
3436425bb815Sopenharmony_ci
3437425bb815Sopenharmony_ci  jerry_value_t promise_result = jerry_get_promise_result (promise);
3438425bb815Sopenharmony_ci  // 'promise_result' is now the number 33.
3439425bb815Sopenharmony_ci
3440425bb815Sopenharmony_ci  jerry_release_value (promise_result);
3441425bb815Sopenharmony_ci  jerry_release_value (promise);
3442425bb815Sopenharmony_ci}
3443425bb815Sopenharmony_ci```
3444425bb815Sopenharmony_ci
3445425bb815Sopenharmony_ci**See also**
3446425bb815Sopenharmony_ci
3447425bb815Sopenharmony_ci- [jerry_create_promise](#jerry_create_promise)
3448425bb815Sopenharmony_ci- [jerry_promise_state_t](#jerry_promise_state_t)
3449425bb815Sopenharmony_ci
3450425bb815Sopenharmony_ci## jerry_get_promise_state
3451425bb815Sopenharmony_ci
3452425bb815Sopenharmony_ci**Summary**
3453425bb815Sopenharmony_ci
3454425bb815Sopenharmony_ci*Notes*:
3455425bb815Sopenharmony_ci- Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
3456425bb815Sopenharmony_ci  is no longer needed.
3457425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_ES2015_BUILTIN_PROMISE`) and can be checked
3458425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_PROMISE` feature enum value,
3459425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
3460425bb815Sopenharmony_ci- The ES2015-subset profile enables this by default.
3461425bb815Sopenharmony_ci
3462425bb815Sopenharmony_ci
3463425bb815Sopenharmony_ci**Prototype**
3464425bb815Sopenharmony_ci
3465425bb815Sopenharmony_ci```c
3466425bb815Sopenharmony_cijerry_promise_state_t
3467425bb815Sopenharmony_cijerry_get_promise_state (const jerry_value_t promise);
3468425bb815Sopenharmony_ci```
3469425bb815Sopenharmony_ci
3470425bb815Sopenharmony_ci- `promise` - the input promise object.
3471425bb815Sopenharmony_ci- return
3472425bb815Sopenharmony_ci  - [jerry_promise_state_t](#jerry_promise_state_t)
3473425bb815Sopenharmony_ci  - `JERRY_PROMISE_STATE_NONE` is returned if the input argument was not a promise object or
3474425bb815Sopenharmony_ci    the Promise support was not built into the library.
3475425bb815Sopenharmony_ci
3476425bb815Sopenharmony_ci*New in version 2.2*.
3477425bb815Sopenharmony_ci
3478425bb815Sopenharmony_ci**Example**
3479425bb815Sopenharmony_ci
3480425bb815Sopenharmony_ci[doctest]: # (test="compile")
3481425bb815Sopenharmony_ci
3482425bb815Sopenharmony_ci```c
3483425bb815Sopenharmony_ci#include <jerryscript.h>
3484425bb815Sopenharmony_ci
3485425bb815Sopenharmony_cistatic void
3486425bb815Sopenharmony_ciexample (void)
3487425bb815Sopenharmony_ci{
3488425bb815Sopenharmony_ci  // acquire/create a promise object.
3489425bb815Sopenharmony_ci  jerry_value_t promise = jerry_create_promise ();
3490425bb815Sopenharmony_ci
3491425bb815Sopenharmony_ci  jerry_promise_state_t start_state = jerry_get_promise_state (promise);
3492425bb815Sopenharmony_ci  // a Promise have a default state of JERRY_PROMISE_STATE_PENDING
3493425bb815Sopenharmony_ci
3494425bb815Sopenharmony_ci  {
3495425bb815Sopenharmony_ci    // prepare the argumnent for the resolve or reject.
3496425bb815Sopenharmony_ci    jerry_value_t argument = jerry_create_number (33);
3497425bb815Sopenharmony_ci
3498425bb815Sopenharmony_ci    jerry_value_t is_ok = jerry_resolve_or_reject_promise (promise,
3499425bb815Sopenharmony_ci                                                           argument,
3500425bb815Sopenharmony_ci                                                           true);
3501425bb815Sopenharmony_ci    // 'is_ok' should be checked if it is an error or not.
3502425bb815Sopenharmony_ci    // skipped in this example
3503425bb815Sopenharmony_ci    jerry_release_value (is_ok);
3504425bb815Sopenharmony_ci    jerry_release_value (argument);
3505425bb815Sopenharmony_ci  }
3506425bb815Sopenharmony_ci
3507425bb815Sopenharmony_ci  jerry_promise_state_t current_state = jerry_get_promise_state (promise);
3508425bb815Sopenharmony_ci  // at this point the Promise should be in the JERRY_PROMISE_STATE_FULFILLED state.
3509425bb815Sopenharmony_ci
3510425bb815Sopenharmony_ci  jerry_release_value (promise);
3511425bb815Sopenharmony_ci}
3512425bb815Sopenharmony_ci```
3513425bb815Sopenharmony_ci
3514425bb815Sopenharmony_ci**See also**
3515425bb815Sopenharmony_ci
3516425bb815Sopenharmony_ci- [jerry_create_promise](#jerry_create_promise)
3517425bb815Sopenharmony_ci- [jerry_promise_state_t](#jerry_promise_state_t)
3518425bb815Sopenharmony_ci
3519425bb815Sopenharmony_ci## jerry_resolve_or_reject_promise
3520425bb815Sopenharmony_ci
3521425bb815Sopenharmony_ci**Summary**
3522425bb815Sopenharmony_ci
3523425bb815Sopenharmony_ciResolve or reject the promise with an argument.
3524425bb815Sopenharmony_ci
3525425bb815Sopenharmony_ci*Note*:
3526425bb815Sopenharmony_ci- Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
3527425bb815Sopenharmony_ci  is no longer needed.
3528425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_ES2015_BUILTIN_PROMISE`) and can be checked
3529425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_PROMISE` feature enum value,
3530425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
3531425bb815Sopenharmony_ci- The ES2015-subset profile enables this by default.
3532425bb815Sopenharmony_ci
3533425bb815Sopenharmony_ci
3534425bb815Sopenharmony_ci**Prototype**
3535425bb815Sopenharmony_ci
3536425bb815Sopenharmony_ci```c
3537425bb815Sopenharmony_cijerry_value_t
3538425bb815Sopenharmony_cijerry_resolve_or_reject_promise (jerry_value_t promise,
3539425bb815Sopenharmony_ci                                 jerry_value_t argument,
3540425bb815Sopenharmony_ci                                 bool is_resolve)
3541425bb815Sopenharmony_ci```
3542425bb815Sopenharmony_ci
3543425bb815Sopenharmony_ci- `promise` - the promise value
3544425bb815Sopenharmony_ci- `argument` - the argument for resolve or reject
3545425bb815Sopenharmony_ci- `is_resolve` - whether the promise should be resolved or rejected
3546425bb815Sopenharmony_ci- return value
3547425bb815Sopenharmony_ci  - undefined jerry value - resolve or reject successed
3548425bb815Sopenharmony_ci  - jerry value with error flag - otherwise
3549425bb815Sopenharmony_ci
3550425bb815Sopenharmony_ci*New in version 2.0*.
3551425bb815Sopenharmony_ci
3552425bb815Sopenharmony_ci**Example**
3553425bb815Sopenharmony_ci
3554425bb815Sopenharmony_ci```c
3555425bb815Sopenharmony_ci{
3556425bb815Sopenharmony_ci  jerry_value_t promise = ... // acquire/create a promise object.
3557425bb815Sopenharmony_ci
3558425bb815Sopenharmony_ci  ...
3559425bb815Sopenharmony_ci
3560425bb815Sopenharmony_ci  bool is_resolve = ... // whether the promise should be resolved or rejected
3561425bb815Sopenharmony_ci  jerry_value_t argument = ... // prepare the argumnent for the resolve or reject.
3562425bb815Sopenharmony_ci
3563425bb815Sopenharmony_ci  jerry_value_t is_ok = jerry_resolve_or_reject_promise (promise,
3564425bb815Sopenharmony_ci                                                         argument,
3565425bb815Sopenharmony_ci                                                         is_resolve);
3566425bb815Sopenharmony_ci
3567425bb815Sopenharmony_ci  if (jerry_value_is_error (is_ok))
3568425bb815Sopenharmony_ci  {
3569425bb815Sopenharmony_ci    // handle the error.
3570425bb815Sopenharmony_ci  }
3571425bb815Sopenharmony_ci
3572425bb815Sopenharmony_ci  jerry_release_value (is_ok);
3573425bb815Sopenharmony_ci  jerry_release_value (argument);
3574425bb815Sopenharmony_ci  jerry_release_value (promise);
3575425bb815Sopenharmony_ci}
3576425bb815Sopenharmony_ci```
3577425bb815Sopenharmony_ci
3578425bb815Sopenharmony_ci**See also**
3579425bb815Sopenharmony_ci
3580425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
3581425bb815Sopenharmony_ci- [jerry_value_is_error](#jerry_value_is_error)
3582425bb815Sopenharmony_ci
3583425bb815Sopenharmony_ci# Functions for symbols
3584425bb815Sopenharmony_ci
3585425bb815Sopenharmony_ciThese APIs all depend on the ES2015-subset profile (or on build options).
3586425bb815Sopenharmony_ci
3587425bb815Sopenharmony_ci## jerry_get_symbol_descriptive_string
3588425bb815Sopenharmony_ci
3589425bb815Sopenharmony_ci**Summary**
3590425bb815Sopenharmony_ci
3591425bb815Sopenharmony_ciCall the SymbolDescriptiveString ecma builtin operation on the API value.
3592425bb815Sopenharmony_ciBased on ECMA 262 v6 19.4.3.2.1 this is in the form of `Symbol(<description>)`.
3593425bb815Sopenharmony_ci
3594425bb815Sopenharmony_ci*Notes*:
3595425bb815Sopenharmony_ci- Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
3596425bb815Sopenharmony_ci  is no longer needed.
3597425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_ES2015_BUILTIN_SYMBOL`) and can be checked
3598425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_SYMBOL` feature enum value,
3599425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
3600425bb815Sopenharmony_ci- The ES2015-subset profile enables this by default.
3601425bb815Sopenharmony_ci- If the symbol support is not enabled an error will be returned.
3602425bb815Sopenharmony_ci
3603425bb815Sopenharmony_ci**Prototype**
3604425bb815Sopenharmony_ci
3605425bb815Sopenharmony_ci```c
3606425bb815Sopenharmony_cijerry_value_t
3607425bb815Sopenharmony_cijerry_get_symbol_descriptive_string (const jerry_value_t value);
3608425bb815Sopenharmony_ci```
3609425bb815Sopenharmony_ci
3610425bb815Sopenharmony_ci- `value` - symbol value
3611425bb815Sopenharmony_ci- return value
3612425bb815Sopenharmony_ci  - string value containing the symbol's descriptive string - if success
3613425bb815Sopenharmony_ci  - thrown error, otherwise
3614425bb815Sopenharmony_ci
3615425bb815Sopenharmony_ci*New in version 2.0*.
3616425bb815Sopenharmony_ci
3617425bb815Sopenharmony_ci**Example**
3618425bb815Sopenharmony_ci
3619425bb815Sopenharmony_ci[doctest]: # ()
3620425bb815Sopenharmony_ci
3621425bb815Sopenharmony_ci```c
3622425bb815Sopenharmony_ci#include "jerryscript.h"
3623425bb815Sopenharmony_ci
3624425bb815Sopenharmony_ciint
3625425bb815Sopenharmony_cimain (void)
3626425bb815Sopenharmony_ci{
3627425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
3628425bb815Sopenharmony_ci
3629425bb815Sopenharmony_ci  jerry_value_t string_value = jerry_create_string ((const jerry_char_t *) "foo");
3630425bb815Sopenharmony_ci  jerry_value_t symbol_value = jerry_create_symbol (string_value);
3631425bb815Sopenharmony_ci
3632425bb815Sopenharmony_ci  jerry_release_value (string_value);
3633425bb815Sopenharmony_ci
3634425bb815Sopenharmony_ci  jerry_value_t symbol_desc_string = jerry_get_symbol_descriptive_string (symbol_value);
3635425bb815Sopenharmony_ci
3636425bb815Sopenharmony_ci  // usage of symbol_desc_string
3637425bb815Sopenharmony_ci
3638425bb815Sopenharmony_ci  jerry_release_value (symbol_desc_string);
3639425bb815Sopenharmony_ci  jerry_release_value (symbol_value);
3640425bb815Sopenharmony_ci
3641425bb815Sopenharmony_ci  jerry_cleanup ();
3642425bb815Sopenharmony_ci  return 0;
3643425bb815Sopenharmony_ci}
3644425bb815Sopenharmony_ci```
3645425bb815Sopenharmony_ci
3646425bb815Sopenharmony_ci
3647425bb815Sopenharmony_ci# Acquire and release API values
3648425bb815Sopenharmony_ci
3649425bb815Sopenharmony_ci## jerry_acquire_value
3650425bb815Sopenharmony_ci
3651425bb815Sopenharmony_ci**Summary**
3652425bb815Sopenharmony_ci
3653425bb815Sopenharmony_ciAcquires the specified Jerry API value.
3654425bb815Sopenharmony_ci
3655425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
3656425bb815Sopenharmony_ciis no longer needed.
3657425bb815Sopenharmony_ci
3658425bb815Sopenharmony_ci**Prototype**
3659425bb815Sopenharmony_ci
3660425bb815Sopenharmony_ci```c
3661425bb815Sopenharmony_cijerry_value_t
3662425bb815Sopenharmony_cijerry_acquire_value (jerry_value_t value);
3663425bb815Sopenharmony_ci```
3664425bb815Sopenharmony_ci
3665425bb815Sopenharmony_ci- `value` - api value
3666425bb815Sopenharmony_ci- return value - acquired value that may be used outside of the engine
3667425bb815Sopenharmony_ci
3668425bb815Sopenharmony_ci**Example**
3669425bb815Sopenharmony_ci
3670425bb815Sopenharmony_ci```c
3671425bb815Sopenharmony_ci{
3672425bb815Sopenharmony_ci  jerry_value_t object_value = jerry_create_object ();
3673425bb815Sopenharmony_ci
3674425bb815Sopenharmony_ci  jerry_value_t acquired_object = jerry_acquire_value (object_value);
3675425bb815Sopenharmony_ci
3676425bb815Sopenharmony_ci  jerry_release_value (object_value);
3677425bb815Sopenharmony_ci
3678425bb815Sopenharmony_ci  // acquired_object refers to the created object and makes it
3679425bb815Sopenharmony_ci  // available after the release of 'object_value'
3680425bb815Sopenharmony_ci
3681425bb815Sopenharmony_ci  jerry_release_value (acquired_object);
3682425bb815Sopenharmony_ci}
3683425bb815Sopenharmony_ci```
3684425bb815Sopenharmony_ci
3685425bb815Sopenharmony_ci**See also**
3686425bb815Sopenharmony_ci
3687425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
3688425bb815Sopenharmony_ci- [jerry_value_t](#jerry_value_t)
3689425bb815Sopenharmony_ci
3690425bb815Sopenharmony_ci
3691425bb815Sopenharmony_ci## jerry_release_value
3692425bb815Sopenharmony_ci
3693425bb815Sopenharmony_ci**Summary**
3694425bb815Sopenharmony_ci
3695425bb815Sopenharmony_ciRelease specified Jerry API value.
3696425bb815Sopenharmony_ci
3697425bb815Sopenharmony_ci**Prototype**
3698425bb815Sopenharmony_ci
3699425bb815Sopenharmony_ci```c
3700425bb815Sopenharmony_civoid
3701425bb815Sopenharmony_cijerry_release_value (jerry_value_t value);
3702425bb815Sopenharmony_ci```
3703425bb815Sopenharmony_ci
3704425bb815Sopenharmony_ci- `value` - api value
3705425bb815Sopenharmony_ci
3706425bb815Sopenharmony_ci**Example**
3707425bb815Sopenharmony_ci
3708425bb815Sopenharmony_ci```c
3709425bb815Sopenharmony_ci{
3710425bb815Sopenharmony_ci  jerry_value_t object_value = jerry_create_object ();
3711425bb815Sopenharmony_ci
3712425bb815Sopenharmony_ci  ...
3713425bb815Sopenharmony_ci
3714425bb815Sopenharmony_ci  jerry_release_value (object_value);
3715425bb815Sopenharmony_ci}
3716425bb815Sopenharmony_ci```
3717425bb815Sopenharmony_ci
3718425bb815Sopenharmony_ci
3719425bb815Sopenharmony_ci# Create API values
3720425bb815Sopenharmony_ci
3721425bb815Sopenharmony_ciFunction for creating [API values](#jerry_value_t).
3722425bb815Sopenharmony_ci
3723425bb815Sopenharmony_ci*Note*: Every created API value must be freed with [jerry_release_value](#jerry_release_value) when it
3724425bb815Sopenharmony_ciis no longer needed.
3725425bb815Sopenharmony_ci
3726425bb815Sopenharmony_ci## jerry_create_array
3727425bb815Sopenharmony_ci
3728425bb815Sopenharmony_ci**Summary**
3729425bb815Sopenharmony_ci
3730425bb815Sopenharmony_ciCreate an array object value.
3731425bb815Sopenharmony_ci
3732425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
3733425bb815Sopenharmony_ciis no longer needed.
3734425bb815Sopenharmony_ci
3735425bb815Sopenharmony_ci**Prototype**
3736425bb815Sopenharmony_ci
3737425bb815Sopenharmony_ci```c
3738425bb815Sopenharmony_cijerry_value_t
3739425bb815Sopenharmony_cijerry_create_array (uint32_t size);
3740425bb815Sopenharmony_ci```
3741425bb815Sopenharmony_ci
3742425bb815Sopenharmony_ci - `size` - size of array;
3743425bb815Sopenharmony_ci - return value - value of the constructed array object
3744425bb815Sopenharmony_ci
3745425bb815Sopenharmony_ci **Example**
3746425bb815Sopenharmony_ci
3747425bb815Sopenharmony_ci```c
3748425bb815Sopenharmony_ci{
3749425bb815Sopenharmony_ci    jerry_value_t array = jerry_create_array (10);
3750425bb815Sopenharmony_ci
3751425bb815Sopenharmony_ci    ...
3752425bb815Sopenharmony_ci
3753425bb815Sopenharmony_ci    jerry_release_value (array);
3754425bb815Sopenharmony_ci}
3755425bb815Sopenharmony_ci```
3756425bb815Sopenharmony_ci
3757425bb815Sopenharmony_ci**See also**
3758425bb815Sopenharmony_ci
3759425bb815Sopenharmony_ci- [jerry_set_property_by_index](#jerry_set_property_by_index)
3760425bb815Sopenharmony_ci- [jerry_get_property_by_index](#jerry_get_property_by_index)
3761425bb815Sopenharmony_ci
3762425bb815Sopenharmony_ci
3763425bb815Sopenharmony_ci## jerry_create_arraybuffer
3764425bb815Sopenharmony_ci
3765425bb815Sopenharmony_ci**Summary**
3766425bb815Sopenharmony_ci
3767425bb815Sopenharmony_ciCreate a jerry_value_t representing an ArrayBuffer object.
3768425bb815Sopenharmony_ci
3769425bb815Sopenharmony_ci*Note*:
3770425bb815Sopenharmony_ci  - This API depends on the ES2015-subset profile.
3771425bb815Sopenharmony_ci  - Returned value must be freed with [jerry_release_value](#jerry_release_value)
3772425bb815Sopenharmony_ci    when it is no longer needed.
3773425bb815Sopenharmony_ci
3774425bb815Sopenharmony_ci**Prototype**
3775425bb815Sopenharmony_ci
3776425bb815Sopenharmony_ci```c
3777425bb815Sopenharmony_cijerry_value_t
3778425bb815Sopenharmony_cijerry_create_arraybuffer (jerry_length_t size);
3779425bb815Sopenharmony_ci```
3780425bb815Sopenharmony_ci
3781425bb815Sopenharmony_ci - `size` - size of the ArrayBuffer to create **in bytes**
3782425bb815Sopenharmony_ci - return value - the new ArrayBuffer as a `jerry_value_t`
3783425bb815Sopenharmony_ci
3784425bb815Sopenharmony_ci*New in version 2.0*.
3785425bb815Sopenharmony_ci
3786425bb815Sopenharmony_ci**Example**
3787425bb815Sopenharmony_ci
3788425bb815Sopenharmony_ci```c
3789425bb815Sopenharmony_ci{
3790425bb815Sopenharmony_ci  jerry_value_t buffer_value = jerry_create_arraybuffer (15);
3791425bb815Sopenharmony_ci
3792425bb815Sopenharmony_ci  ... // use the ArrayBuffer
3793425bb815Sopenharmony_ci
3794425bb815Sopenharmony_ci  jerry_release_value (buffer_value);
3795425bb815Sopenharmony_ci}
3796425bb815Sopenharmony_ci```
3797425bb815Sopenharmony_ci
3798425bb815Sopenharmony_ci**See also**
3799425bb815Sopenharmony_ci
3800425bb815Sopenharmony_ci- [jerry_arraybuffer_read](#jerry_arraybuffer_read)
3801425bb815Sopenharmony_ci- [jerry_arraybuffer_write](#jerry_arraybuffer_write)
3802425bb815Sopenharmony_ci- [jerry_value_is_arraybuffer](#jerry_value_is_arraybuffer)
3803425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
3804425bb815Sopenharmony_ci
3805425bb815Sopenharmony_ci
3806425bb815Sopenharmony_ci## jerry_create_arraybuffer_external
3807425bb815Sopenharmony_ci
3808425bb815Sopenharmony_ci**Summary**
3809425bb815Sopenharmony_ci
3810425bb815Sopenharmony_ciCreates a jerry_value_t representing an ArrayBuffer object with
3811425bb815Sopenharmony_ciuser specified back-buffer.
3812425bb815Sopenharmony_ci
3813425bb815Sopenharmony_ciUser must pass a buffer pointer which is at least `size` big.
3814425bb815Sopenharmony_ciAfter the object is not needed the GC will call the `free_cb`
3815425bb815Sopenharmony_ciso the user can release the buffer which was provided.
3816425bb815Sopenharmony_ci
3817425bb815Sopenharmony_ci*Note*:
3818425bb815Sopenharmony_ci  - This API depends on the ES2015-subset profile.
3819425bb815Sopenharmony_ci  - Returned value must be freed with [jerry_release_value](#jerry_release_value)
3820425bb815Sopenharmony_ci    when it is no longer needed.
3821425bb815Sopenharmony_ci
3822425bb815Sopenharmony_ci**Prototype**
3823425bb815Sopenharmony_ci
3824425bb815Sopenharmony_ci```c
3825425bb815Sopenharmony_cijerry_value_t
3826425bb815Sopenharmony_cijerry_create_arraybuffer_external (const jerry_length_t size
3827425bb815Sopenharmony_ci                                   uint8_t *buffer_p,
3828425bb815Sopenharmony_ci                                   jerry_object_native_free_callback_t free_cb);
3829425bb815Sopenharmony_ci```
3830425bb815Sopenharmony_ci
3831425bb815Sopenharmony_ci- `size` - size of the buffer to use **in bytes** (should not be 0)
3832425bb815Sopenharmony_ci- `buffer_p` - the buffer used for the Array Buffer object (should not be a null pointer)
3833425bb815Sopenharmony_ci- `free_cb` - the callback function called when the object is released
3834425bb815Sopenharmony_ci- return value
3835425bb815Sopenharmony_ci  - the new ArrayBuffer as a `jerry_value_t`
3836425bb815Sopenharmony_ci  - if the `size` is zero or `buffer_p` is a null pointer this will return an empty ArrayBuffer.
3837425bb815Sopenharmony_ci
3838425bb815Sopenharmony_ci*New in version 2.0*.
3839425bb815Sopenharmony_ci
3840425bb815Sopenharmony_ci**Example**
3841425bb815Sopenharmony_ci
3842425bb815Sopenharmony_ci```c
3843425bb815Sopenharmony_ci{
3844425bb815Sopenharmony_ci  uint8_t buffer_p[15];
3845425bb815Sopenharmony_ci  jerry_value_t buffer_value = jerry_create_arraybuffer_external (15, buffer_p, NULL);
3846425bb815Sopenharmony_ci
3847425bb815Sopenharmony_ci  ... // use the array buffer
3848425bb815Sopenharmony_ci
3849425bb815Sopenharmony_ci  jerry_release_value (buffer_value);
3850425bb815Sopenharmony_ci}
3851425bb815Sopenharmony_ci```
3852425bb815Sopenharmony_ci
3853425bb815Sopenharmony_ci**See also**
3854425bb815Sopenharmony_ci
3855425bb815Sopenharmony_ci- [jerry_get_arraybuffer_pointer](#jerry_get_arraybuffer_pointer)
3856425bb815Sopenharmony_ci- [jerry_arraybuffer_read](#jerry_arraybuffer_read)
3857425bb815Sopenharmony_ci- [jerry_arraybuffer_write](#jerry_arraybuffer_write)
3858425bb815Sopenharmony_ci- [jerry_value_is_arraybuffer](#jerry_value_is_arraybuffer)
3859425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
3860425bb815Sopenharmony_ci- [jerry_object_native_free_callback_t](#jerry_object_native_free_callback_t)
3861425bb815Sopenharmony_ci
3862425bb815Sopenharmony_ci
3863425bb815Sopenharmony_ci## jerry_create_boolean
3864425bb815Sopenharmony_ci
3865425bb815Sopenharmony_ci**Summary**
3866425bb815Sopenharmony_ci
3867425bb815Sopenharmony_ciCreate a jerry_value_t representing a boolean value from the given boolean parameter.
3868425bb815Sopenharmony_ci
3869425bb815Sopenharmony_ci**Prototype**
3870425bb815Sopenharmony_ci
3871425bb815Sopenharmony_ci```c
3872425bb815Sopenharmony_cijerry_value_t
3873425bb815Sopenharmony_cijerry_create_boolean (bool value);
3874425bb815Sopenharmony_ci```
3875425bb815Sopenharmony_ci
3876425bb815Sopenharmony_ci- `value` - raw boolean value.
3877425bb815Sopenharmony_ci- return value - a `jerry_value_t` created from the given boolean argument.
3878425bb815Sopenharmony_ci
3879425bb815Sopenharmony_ci**Example**
3880425bb815Sopenharmony_ci
3881425bb815Sopenharmony_ci```c
3882425bb815Sopenharmony_ci{
3883425bb815Sopenharmony_ci  jerry_value_t boolean_value = jerry_create_boolean (true);
3884425bb815Sopenharmony_ci
3885425bb815Sopenharmony_ci  ... // usage of the value
3886425bb815Sopenharmony_ci
3887425bb815Sopenharmony_ci  jerry_release_value (boolean_value);
3888425bb815Sopenharmony_ci}
3889425bb815Sopenharmony_ci```
3890425bb815Sopenharmony_ci
3891425bb815Sopenharmony_ci**See also**
3892425bb815Sopenharmony_ci
3893425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
3894425bb815Sopenharmony_ci
3895425bb815Sopenharmony_ci
3896425bb815Sopenharmony_ci## jerry_create_error
3897425bb815Sopenharmony_ci
3898425bb815Sopenharmony_ci**Summary**
3899425bb815Sopenharmony_ci
3900425bb815Sopenharmony_ciCreate new JavaScript error object.
3901425bb815Sopenharmony_ci
3902425bb815Sopenharmony_ciImportant! The `error_type` argument *must not be* `JERRY_ERROR_NONE`.
3903425bb815Sopenharmony_ciCreating an error with no error type is not valid.
3904425bb815Sopenharmony_ci
3905425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
3906425bb815Sopenharmony_ciis no longer needed.
3907425bb815Sopenharmony_ci
3908425bb815Sopenharmony_ci**Prototype**
3909425bb815Sopenharmony_ci
3910425bb815Sopenharmony_ci```c
3911425bb815Sopenharmony_cijerry_value_t
3912425bb815Sopenharmony_cijerry_create_error (jerry_error_t error_type,
3913425bb815Sopenharmony_ci                    const jerry_char_t *message_p);
3914425bb815Sopenharmony_ci```
3915425bb815Sopenharmony_ci
3916425bb815Sopenharmony_ci- `error_type` - type of error
3917425bb815Sopenharmony_ci- `message_p` - value of 'message' property of constructed error object
3918425bb815Sopenharmony_ci- return value - value of the constructed error object
3919425bb815Sopenharmony_ci
3920425bb815Sopenharmony_ci**Example**
3921425bb815Sopenharmony_ci
3922425bb815Sopenharmony_ci```c
3923425bb815Sopenharmony_ci{
3924425bb815Sopenharmony_ci  jerry_value_t error_obj = jerry_create_error (JERRY_ERROR_TYPE,
3925425bb815Sopenharmony_ci                                                (const jerry_char_t *) "error");
3926425bb815Sopenharmony_ci
3927425bb815Sopenharmony_ci  ... // usage of error_obj
3928425bb815Sopenharmony_ci
3929425bb815Sopenharmony_ci
3930425bb815Sopenharmony_ci  jerry_release_value (error_obj);
3931425bb815Sopenharmony_ci}
3932425bb815Sopenharmony_ci```
3933425bb815Sopenharmony_ci
3934425bb815Sopenharmony_ci**See also**
3935425bb815Sopenharmony_ci
3936425bb815Sopenharmony_ci- [jerry_value_is_error](#jerry_value_is_error)
3937425bb815Sopenharmony_ci- [jerry_get_value_from_error](#jerry_get_value_from_error)
3938425bb815Sopenharmony_ci- [jerry_create_error_from_value](#jerry_create_error_from_value)
3939425bb815Sopenharmony_ci
3940425bb815Sopenharmony_ci
3941425bb815Sopenharmony_ci## jerry_create_error_sz
3942425bb815Sopenharmony_ci
3943425bb815Sopenharmony_ci**Summary**
3944425bb815Sopenharmony_ci
3945425bb815Sopenharmony_ciCreate new JavaScript error object.
3946425bb815Sopenharmony_ci
3947425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
3948425bb815Sopenharmony_ciis no longer needed.
3949425bb815Sopenharmony_ci
3950425bb815Sopenharmony_ci**Prototype**
3951425bb815Sopenharmony_ci
3952425bb815Sopenharmony_ci```c
3953425bb815Sopenharmony_cijerry_value_t
3954425bb815Sopenharmony_cijerry_create_error_sz (jerry_error_t error_type,
3955425bb815Sopenharmony_ci                       const jerry_char_t *message_p,
3956425bb815Sopenharmony_ci                       jerry_size_t message_size);
3957425bb815Sopenharmony_ci```
3958425bb815Sopenharmony_ci
3959425bb815Sopenharmony_ci- `error_type` - type of the error
3960425bb815Sopenharmony_ci- `message_p` - value of 'message' property of the constructed error object
3961425bb815Sopenharmony_ci- `message_size` - size of the message in bytes
3962425bb815Sopenharmony_ci- return value - value of the constructed error object
3963425bb815Sopenharmony_ci
3964425bb815Sopenharmony_ci**Example**
3965425bb815Sopenharmony_ci
3966425bb815Sopenharmony_ci```c
3967425bb815Sopenharmony_ci{
3968425bb815Sopenharmony_ci  const jerry_char_t message[] = "error";
3969425bb815Sopenharmony_ci  jerry_value_t error_obj = jerry_create_error_sz (JERRY_ERROR_COMMON,
3970425bb815Sopenharmony_ci                                                   message,
3971425bb815Sopenharmony_ci                                                   sizeof (message) - 1);
3972425bb815Sopenharmony_ci
3973425bb815Sopenharmony_ci  ... // usage of error_obj
3974425bb815Sopenharmony_ci
3975425bb815Sopenharmony_ci  jerry_release_value (error_obj);
3976425bb815Sopenharmony_ci}
3977425bb815Sopenharmony_ci```
3978425bb815Sopenharmony_ci
3979425bb815Sopenharmony_ci**See also**
3980425bb815Sopenharmony_ci
3981425bb815Sopenharmony_ci- [jerry_create_error](#jerry_create_error)
3982425bb815Sopenharmony_ci
3983425bb815Sopenharmony_ci
3984425bb815Sopenharmony_ci## jerry_create_dataview
3985425bb815Sopenharmony_ci
3986425bb815Sopenharmony_ci**Summary**
3987425bb815Sopenharmony_ci
3988425bb815Sopenharmony_ciCreate new JavaScript DataView object.
3989425bb815Sopenharmony_ci
3990425bb815Sopenharmony_ci*Note*:
3991425bb815Sopenharmony_ci  - This API depends on the ES2015-subset profile.
3992425bb815Sopenharmony_ci  - Returned value must be freed with [jerry_release_value](#jerry_release_value)
3993425bb815Sopenharmony_ci    when it is no longer needed.
3994425bb815Sopenharmony_ci
3995425bb815Sopenharmony_ci**Prototype**
3996425bb815Sopenharmony_ci
3997425bb815Sopenharmony_ci```c
3998425bb815Sopenharmony_cijerry_value_t
3999425bb815Sopenharmony_cijerry_create_dataview (const jerry_value_t array_buffer,
4000425bb815Sopenharmony_ci                       const jerry_length_t byte_offset,
4001425bb815Sopenharmony_ci                       const jerry_length_t byte_length)
4002425bb815Sopenharmony_ci```
4003425bb815Sopenharmony_ci
4004425bb815Sopenharmony_ci- `array_buffer` - arrayBuffer to create DataView from
4005425bb815Sopenharmony_ci- `byte_offset` - offset in bytes, to the first byte in the buffer
4006425bb815Sopenharmony_ci- `byte_length` - number of elements in the byte array
4007425bb815Sopenharmony_ci- return value
4008425bb815Sopenharmony_ci  - value of the constructed DataView object - if success
4009425bb815Sopenharmony_ci  - created error - otherwise
4010425bb815Sopenharmony_ci
4011425bb815Sopenharmony_ci*New in version 2.0*.
4012425bb815Sopenharmony_ci
4013425bb815Sopenharmony_ci**Example**
4014425bb815Sopenharmony_ci
4015425bb815Sopenharmony_ci[doctest]: # ()
4016425bb815Sopenharmony_ci
4017425bb815Sopenharmony_ci```c
4018425bb815Sopenharmony_ci#include "jerryscript.h"
4019425bb815Sopenharmony_ci
4020425bb815Sopenharmony_ciint
4021425bb815Sopenharmony_cimain (void)
4022425bb815Sopenharmony_ci{
4023425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
4024425bb815Sopenharmony_ci
4025425bb815Sopenharmony_ci  jerry_value_t arraybuffer = jerry_create_arraybuffer (16);
4026425bb815Sopenharmony_ci  jerry_value_t dataview = jerry_create_dataview (arraybuffer, 0, 16);
4027425bb815Sopenharmony_ci
4028425bb815Sopenharmony_ci  // usage of dataview
4029425bb815Sopenharmony_ci
4030425bb815Sopenharmony_ci  jerry_release_value (dataview);
4031425bb815Sopenharmony_ci  jerry_release_value (arraybuffer);
4032425bb815Sopenharmony_ci
4033425bb815Sopenharmony_ci  jerry_cleanup ();
4034425bb815Sopenharmony_ci  return 0;
4035425bb815Sopenharmony_ci}
4036425bb815Sopenharmony_ci```
4037425bb815Sopenharmony_ci
4038425bb815Sopenharmony_ci**See also**
4039425bb815Sopenharmony_ci
4040425bb815Sopenharmony_ci- [jerry_value_is_dataview](#jerry_value_is_dataview)
4041425bb815Sopenharmony_ci- [jerry_create_arraybuffer](#jerry_create_arraybuffer)
4042425bb815Sopenharmony_ci
4043425bb815Sopenharmony_ci
4044425bb815Sopenharmony_ci## jerry_create_external_function
4045425bb815Sopenharmony_ci
4046425bb815Sopenharmony_ci**Summary**
4047425bb815Sopenharmony_ci
4048425bb815Sopenharmony_ciCreate an external function object.
4049425bb815Sopenharmony_ci
4050425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
4051425bb815Sopenharmony_ciis no longer needed.
4052425bb815Sopenharmony_ci
4053425bb815Sopenharmony_ci**Prototype**
4054425bb815Sopenharmony_ci
4055425bb815Sopenharmony_ci```c
4056425bb815Sopenharmony_cijerry_value_t
4057425bb815Sopenharmony_cijerry_create_external_function (jerry_external_handler_t handler_p);
4058425bb815Sopenharmony_ci```
4059425bb815Sopenharmony_ci
4060425bb815Sopenharmony_ci- `handler_p` - pointer to native handler of the function object
4061425bb815Sopenharmony_ci- return value - value of the constructed function object
4062425bb815Sopenharmony_ci
4063425bb815Sopenharmony_ci**Example**
4064425bb815Sopenharmony_ci
4065425bb815Sopenharmony_ci[doctest]: # ()
4066425bb815Sopenharmony_ci
4067425bb815Sopenharmony_ci```c
4068425bb815Sopenharmony_ci#include <stdio.h>
4069425bb815Sopenharmony_ci#include <string.h>
4070425bb815Sopenharmony_ci#include "jerryscript.h"
4071425bb815Sopenharmony_ci
4072425bb815Sopenharmony_cistatic jerry_value_t
4073425bb815Sopenharmony_cihandler (const jerry_value_t function_obj,
4074425bb815Sopenharmony_ci         const jerry_value_t this_val,
4075425bb815Sopenharmony_ci         const jerry_value_t args_p[],
4076425bb815Sopenharmony_ci         const jerry_length_t args_cnt)
4077425bb815Sopenharmony_ci{
4078425bb815Sopenharmony_ci  printf ("native handler called!\n");
4079425bb815Sopenharmony_ci
4080425bb815Sopenharmony_ci  return jerry_create_boolean (true);
4081425bb815Sopenharmony_ci}
4082425bb815Sopenharmony_ci
4083425bb815Sopenharmony_ciint
4084425bb815Sopenharmony_cimain (void)
4085425bb815Sopenharmony_ci{
4086425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
4087425bb815Sopenharmony_ci
4088425bb815Sopenharmony_ci  jerry_value_t func_val = jerry_create_external_function (handler);
4089425bb815Sopenharmony_ci  jerry_value_t glob_obj = jerry_get_global_object ();
4090425bb815Sopenharmony_ci
4091425bb815Sopenharmony_ci  // after this, script can invoke the native handler through "handler_field (1, 2, 3);"
4092425bb815Sopenharmony_ci  jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "handler_field");
4093425bb815Sopenharmony_ci  // set property and release the return value without any check
4094425bb815Sopenharmony_ci  jerry_release_value (jerry_set_property (glob_obj, prop_name, func_val));
4095425bb815Sopenharmony_ci  jerry_release_value (prop_name);
4096425bb815Sopenharmony_ci
4097425bb815Sopenharmony_ci  jerry_release_value (func_val);
4098425bb815Sopenharmony_ci  jerry_release_value (glob_obj);
4099425bb815Sopenharmony_ci
4100425bb815Sopenharmony_ci  // Test the method by calling it
4101425bb815Sopenharmony_ci  const char *test_src = "handler_field ();";
4102425bb815Sopenharmony_ci  jerry_value_t ret_val = jerry_eval ((const jerry_char_t *) test_src,
4103425bb815Sopenharmony_ci                                      strlen (test_src),
4104425bb815Sopenharmony_ci                                      JERRY_PARSE_NO_OPTS);
4105425bb815Sopenharmony_ci  // release the eval result
4106425bb815Sopenharmony_ci  jerry_release_value (ret_val);
4107425bb815Sopenharmony_ci  jerry_cleanup ();
4108425bb815Sopenharmony_ci  return 0;
4109425bb815Sopenharmony_ci}
4110425bb815Sopenharmony_ci```
4111425bb815Sopenharmony_ci
4112425bb815Sopenharmony_ci**See also**
4113425bb815Sopenharmony_ci
4114425bb815Sopenharmony_ci- [jerry_external_handler_t](#jerry_external_handler_t)
4115425bb815Sopenharmony_ci- [jerry_set_property](#jerry_set_property)
4116425bb815Sopenharmony_ci- [jerry_call_function](#jerry_call_function)
4117425bb815Sopenharmony_ci
4118425bb815Sopenharmony_ci
4119425bb815Sopenharmony_ci## jerry_create_number
4120425bb815Sopenharmony_ci
4121425bb815Sopenharmony_ci**Summary**
4122425bb815Sopenharmony_ci
4123425bb815Sopenharmony_ciCreates a `jerry_value_t` representing a number value.
4124425bb815Sopenharmony_ci
4125425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
4126425bb815Sopenharmony_ciis no longer needed.
4127425bb815Sopenharmony_ci
4128425bb815Sopenharmony_ci**Prototype**
4129425bb815Sopenharmony_ci
4130425bb815Sopenharmony_ci```c
4131425bb815Sopenharmony_cijerry_value_t
4132425bb815Sopenharmony_cijerry_create_number (double value);
4133425bb815Sopenharmony_ci```
4134425bb815Sopenharmony_ci
4135425bb815Sopenharmony_ci- `value` - double value from which a `jerry_value_t` will be created
4136425bb815Sopenharmony_ci- return value - a `jerry_value_t` created from the given double argument
4137425bb815Sopenharmony_ci
4138425bb815Sopenharmony_ci**Example**
4139425bb815Sopenharmony_ci
4140425bb815Sopenharmony_ci```c
4141425bb815Sopenharmony_ci{
4142425bb815Sopenharmony_ci  jerry_value_t number_value = jerry_create_number (3.14);
4143425bb815Sopenharmony_ci
4144425bb815Sopenharmony_ci  ... // usage of the value
4145425bb815Sopenharmony_ci
4146425bb815Sopenharmony_ci  jerry_release_value (number_value);
4147425bb815Sopenharmony_ci}
4148425bb815Sopenharmony_ci```
4149425bb815Sopenharmony_ci
4150425bb815Sopenharmony_ci**See also**
4151425bb815Sopenharmony_ci
4152425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
4153425bb815Sopenharmony_ci- [jerry_create_number_infinity](#jerry_create_number_infinity)
4154425bb815Sopenharmony_ci- [jerry_create_number_nan](#jerry_create_number_nan)
4155425bb815Sopenharmony_ci
4156425bb815Sopenharmony_ci
4157425bb815Sopenharmony_ci## jerry_create_number_infinity
4158425bb815Sopenharmony_ci
4159425bb815Sopenharmony_ci**Summary**
4160425bb815Sopenharmony_ci
4161425bb815Sopenharmony_ciCreates a `jerry_value_t` representing a positive or negative infinity value.
4162425bb815Sopenharmony_ci
4163425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
4164425bb815Sopenharmony_ciis no longer needed.
4165425bb815Sopenharmony_ci
4166425bb815Sopenharmony_ci**Prototype**
4167425bb815Sopenharmony_ci
4168425bb815Sopenharmony_ci```c
4169425bb815Sopenharmony_cijerry_value_t
4170425bb815Sopenharmony_cijerry_create_number_infinity (bool sign);
4171425bb815Sopenharmony_ci```
4172425bb815Sopenharmony_ci
4173425bb815Sopenharmony_ci- `sign` - true for negative Infinity and false for positive Infinity
4174425bb815Sopenharmony_ci- return value - a `jerry_value_t` representing the infinity value
4175425bb815Sopenharmony_ci
4176425bb815Sopenharmony_ci**Example**
4177425bb815Sopenharmony_ci
4178425bb815Sopenharmony_ci```c
4179425bb815Sopenharmony_ci{
4180425bb815Sopenharmony_ci  jerry_value_t positive_inf_value = jerry_create_number_infinity (false);
4181425bb815Sopenharmony_ci
4182425bb815Sopenharmony_ci  ... // usage of the positive_inf_value
4183425bb815Sopenharmony_ci
4184425bb815Sopenharmony_ci  jerry_release_value (positive_inf_value);
4185425bb815Sopenharmony_ci}
4186425bb815Sopenharmony_ci```
4187425bb815Sopenharmony_ci
4188425bb815Sopenharmony_ci**See also**
4189425bb815Sopenharmony_ci
4190425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
4191425bb815Sopenharmony_ci- [jerry_create_number](#jerry_create_number)
4192425bb815Sopenharmony_ci- [jerry_create_number_nan](#jerry_create_number_nan)
4193425bb815Sopenharmony_ci
4194425bb815Sopenharmony_ci
4195425bb815Sopenharmony_ci## jerry_create_number_nan
4196425bb815Sopenharmony_ci
4197425bb815Sopenharmony_ci**Summary**
4198425bb815Sopenharmony_ci
4199425bb815Sopenharmony_ciCreates a `jerry_value_t` representing a not-a-number value.
4200425bb815Sopenharmony_ci
4201425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
4202425bb815Sopenharmony_ciis no longer needed.
4203425bb815Sopenharmony_ci
4204425bb815Sopenharmony_ci**Prototype**
4205425bb815Sopenharmony_ci
4206425bb815Sopenharmony_ci```c
4207425bb815Sopenharmony_cijerry_value_t
4208425bb815Sopenharmony_cijerry_create_number_nan (void);
4209425bb815Sopenharmony_ci```
4210425bb815Sopenharmony_ci
4211425bb815Sopenharmony_ci- return value - a `jerry_value_t` representing the not-a-number value
4212425bb815Sopenharmony_ci
4213425bb815Sopenharmony_ci**Example**
4214425bb815Sopenharmony_ci
4215425bb815Sopenharmony_ci```c
4216425bb815Sopenharmony_ci{
4217425bb815Sopenharmony_ci  jerry_value_t nan_value = jerry_create_number_nan ();
4218425bb815Sopenharmony_ci
4219425bb815Sopenharmony_ci  ... // usage of the nan_value
4220425bb815Sopenharmony_ci
4221425bb815Sopenharmony_ci  jerry_release_value (nan_value);
4222425bb815Sopenharmony_ci}
4223425bb815Sopenharmony_ci```
4224425bb815Sopenharmony_ci
4225425bb815Sopenharmony_ci**See also**
4226425bb815Sopenharmony_ci
4227425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
4228425bb815Sopenharmony_ci- [jerry_create_number](#jerry_create_number)
4229425bb815Sopenharmony_ci- [jerry_create_number_infinity](#jerry_create_number_infinity)
4230425bb815Sopenharmony_ci
4231425bb815Sopenharmony_ci
4232425bb815Sopenharmony_ci## jerry_create_null
4233425bb815Sopenharmony_ci
4234425bb815Sopenharmony_ci**Summary**
4235425bb815Sopenharmony_ci
4236425bb815Sopenharmony_ciCreates and returns a `jerry_value_t` with type null object.
4237425bb815Sopenharmony_ci
4238425bb815Sopenharmony_ci**Prototype**
4239425bb815Sopenharmony_ci
4240425bb815Sopenharmony_ci```c
4241425bb815Sopenharmony_cijerry_value_t
4242425bb815Sopenharmony_cijerry_create_null (void);
4243425bb815Sopenharmony_ci```
4244425bb815Sopenharmony_ci
4245425bb815Sopenharmony_ci- return value - a `jerry_value_t` representing null.
4246425bb815Sopenharmony_ci
4247425bb815Sopenharmony_ci**Example**
4248425bb815Sopenharmony_ci
4249425bb815Sopenharmony_ci```c
4250425bb815Sopenharmony_ci{
4251425bb815Sopenharmony_ci  jerry_value_t null_value = jerry_create_null ();
4252425bb815Sopenharmony_ci
4253425bb815Sopenharmony_ci  ... // usage of the value
4254425bb815Sopenharmony_ci
4255425bb815Sopenharmony_ci  jerry_release_value (null_value);
4256425bb815Sopenharmony_ci}
4257425bb815Sopenharmony_ci```
4258425bb815Sopenharmony_ci
4259425bb815Sopenharmony_ci**See also**
4260425bb815Sopenharmony_ci
4261425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
4262425bb815Sopenharmony_ci
4263425bb815Sopenharmony_ci
4264425bb815Sopenharmony_ci## jerry_create_object
4265425bb815Sopenharmony_ci
4266425bb815Sopenharmony_ci**Summary**
4267425bb815Sopenharmony_ci
4268425bb815Sopenharmony_ciCreate new JavaScript object, like with new Object().
4269425bb815Sopenharmony_ci
4270425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
4271425bb815Sopenharmony_ciis no longer needed.
4272425bb815Sopenharmony_ci
4273425bb815Sopenharmony_ci**Prototype**
4274425bb815Sopenharmony_ci
4275425bb815Sopenharmony_ci```c
4276425bb815Sopenharmony_cijerry_value_t
4277425bb815Sopenharmony_cijerry_create_object (void);
4278425bb815Sopenharmony_ci```
4279425bb815Sopenharmony_ci
4280425bb815Sopenharmony_ci- return value - value of the created object
4281425bb815Sopenharmony_ci
4282425bb815Sopenharmony_ci**Example**
4283425bb815Sopenharmony_ci
4284425bb815Sopenharmony_ci```c
4285425bb815Sopenharmony_ci{
4286425bb815Sopenharmony_ci  jerry_value_t object_value = jerry_create_object ();
4287425bb815Sopenharmony_ci
4288425bb815Sopenharmony_ci  ... // usage of object_value
4289425bb815Sopenharmony_ci
4290425bb815Sopenharmony_ci  jerry_release_value (object_value);
4291425bb815Sopenharmony_ci}
4292425bb815Sopenharmony_ci```
4293425bb815Sopenharmony_ci
4294425bb815Sopenharmony_ci**See also**
4295425bb815Sopenharmony_ci
4296425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
4297425bb815Sopenharmony_ci
4298425bb815Sopenharmony_ci
4299425bb815Sopenharmony_ci## jerry_create_promise
4300425bb815Sopenharmony_ci
4301425bb815Sopenharmony_ci**Summary**
4302425bb815Sopenharmony_ci
4303425bb815Sopenharmony_ciCreate an empty promise object which can be resolved or rejected later
4304425bb815Sopenharmony_ciby calling jerry_resolve_or_reject_promise.
4305425bb815Sopenharmony_ci
4306425bb815Sopenharmony_ci*Note*:
4307425bb815Sopenharmony_ci  - This API depends on the ES2015-subset profile.
4308425bb815Sopenharmony_ci  - Returned value must be freed with [jerry_release_value](#jerry_release_value)
4309425bb815Sopenharmony_ci    when it is no longer needed.
4310425bb815Sopenharmony_ci
4311425bb815Sopenharmony_ci**Prototype**
4312425bb815Sopenharmony_ci
4313425bb815Sopenharmony_ci```c
4314425bb815Sopenharmony_cijerry_value_t
4315425bb815Sopenharmony_cijerry_create_promise (void)
4316425bb815Sopenharmony_ci```
4317425bb815Sopenharmony_ci
4318425bb815Sopenharmony_ci- return value - value of the newly created promise
4319425bb815Sopenharmony_ci
4320425bb815Sopenharmony_ci*New in version 2.0*.
4321425bb815Sopenharmony_ci
4322425bb815Sopenharmony_ci**Example**
4323425bb815Sopenharmony_ci
4324425bb815Sopenharmony_ci```c
4325425bb815Sopenharmony_ci{
4326425bb815Sopenharmony_ci  jerry_value_t p = jerry_create_promise ();
4327425bb815Sopenharmony_ci
4328425bb815Sopenharmony_ci  ...// usage of the promise
4329425bb815Sopenharmony_ci
4330425bb815Sopenharmony_ci  jerry_release_value (p);
4331425bb815Sopenharmony_ci}
4332425bb815Sopenharmony_ci```
4333425bb815Sopenharmony_ci
4334425bb815Sopenharmony_ci**See also**
4335425bb815Sopenharmony_ci
4336425bb815Sopenharmony_ci- [jerry_resolve_or_reject_promise](#jerry_resolve_or_reject_promise)
4337425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
4338425bb815Sopenharmony_ci
4339425bb815Sopenharmony_ci
4340425bb815Sopenharmony_ci## jerry_create_proxy
4341425bb815Sopenharmony_ci
4342425bb815Sopenharmony_ci**Summary**
4343425bb815Sopenharmony_ci
4344425bb815Sopenharmony_ciCreate a new Proxy object with the given target and handler.
4345425bb815Sopenharmony_ci
4346425bb815Sopenharmony_ci*Note*:
4347425bb815Sopenharmony_ci  - This API depends on the ES2015-subset profile.
4348425bb815Sopenharmony_ci  - Returned value must be freed with [jerry_release_value](#jerry_release_value)
4349425bb815Sopenharmony_ci    when it is no longer needed.
4350425bb815Sopenharmony_ci
4351425bb815Sopenharmony_ci**Prototype**
4352425bb815Sopenharmony_ci
4353425bb815Sopenharmony_ci```c
4354425bb815Sopenharmony_cijerry_value_t
4355425bb815Sopenharmony_cijerry_create_proxy (const jerry_value_t target,
4356425bb815Sopenharmony_ci                    const jerry_value_t handler)
4357425bb815Sopenharmony_ci```
4358425bb815Sopenharmony_ci
4359425bb815Sopenharmony_ci- `target` - proxy target
4360425bb815Sopenharmony_ci- `handler` - proxy handler
4361425bb815Sopenharmony_ci- return thrown error - if the Proxy construction fails
4362425bb815Sopenharmony_ci         value of the newly created proxy object - otherwise
4363425bb815Sopenharmony_ci
4364425bb815Sopenharmony_ci**Example**
4365425bb815Sopenharmony_ci
4366425bb815Sopenharmony_ci*New in version 2.3*.
4367425bb815Sopenharmony_ci
4368425bb815Sopenharmony_ci[doctest]: # ()
4369425bb815Sopenharmony_ci
4370425bb815Sopenharmony_ci```c
4371425bb815Sopenharmony_ci#include "jerryscript.h"
4372425bb815Sopenharmony_ci
4373425bb815Sopenharmony_ciint
4374425bb815Sopenharmony_cimain (void)
4375425bb815Sopenharmony_ci{
4376425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
4377425bb815Sopenharmony_ci
4378425bb815Sopenharmony_ci  jerry_value_t target = jerry_create_object ();
4379425bb815Sopenharmony_ci  jerry_value_t handler = jerry_create_object ();
4380425bb815Sopenharmony_ci  jerry_value_t proxy = jerry_create_proxy (target, handler);
4381425bb815Sopenharmony_ci
4382425bb815Sopenharmony_ci  jerry_release_value (target);
4383425bb815Sopenharmony_ci  jerry_release_value (handler);
4384425bb815Sopenharmony_ci
4385425bb815Sopenharmony_ci  // usage of the proxy
4386425bb815Sopenharmony_ci
4387425bb815Sopenharmony_ci  jerry_release_value (proxy);
4388425bb815Sopenharmony_ci
4389425bb815Sopenharmony_ci  jerry_cleanup ();
4390425bb815Sopenharmony_ci}
4391425bb815Sopenharmony_ci```
4392425bb815Sopenharmony_ci
4393425bb815Sopenharmony_ci**See also**
4394425bb815Sopenharmony_ci
4395425bb815Sopenharmony_ci- [jerry_value_is_proxy](#jerry_value_is_proxy)
4396425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
4397425bb815Sopenharmony_ci
4398425bb815Sopenharmony_ci
4399425bb815Sopenharmony_ci## jerry_create_string
4400425bb815Sopenharmony_ci
4401425bb815Sopenharmony_ci**Summary**
4402425bb815Sopenharmony_ci
4403425bb815Sopenharmony_ciCreate string from a valid CESU8 string.
4404425bb815Sopenharmony_ci
4405425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
4406425bb815Sopenharmony_ciis no longer needed.
4407425bb815Sopenharmony_ci
4408425bb815Sopenharmony_ci**Prototype**
4409425bb815Sopenharmony_ci
4410425bb815Sopenharmony_ci```c
4411425bb815Sopenharmony_cijerry_value_t
4412425bb815Sopenharmony_cijerry_create_string (const jerry_char_t *str_p);
4413425bb815Sopenharmony_ci```
4414425bb815Sopenharmony_ci
4415425bb815Sopenharmony_ci- `str_p` - non-null pointer to string
4416425bb815Sopenharmony_ci- return value - value of the created string
4417425bb815Sopenharmony_ci
4418425bb815Sopenharmony_ci**Example**
4419425bb815Sopenharmony_ci
4420425bb815Sopenharmony_ci```c
4421425bb815Sopenharmony_ci{
4422425bb815Sopenharmony_ci  const jerry_char_t char_array[] = "a string";
4423425bb815Sopenharmony_ci  jerry_value_t string_value  = jerry_create_string (char_array);
4424425bb815Sopenharmony_ci
4425425bb815Sopenharmony_ci  ... // usage of string_value
4426425bb815Sopenharmony_ci
4427425bb815Sopenharmony_ci  jerry_release_value (string_value);
4428425bb815Sopenharmony_ci}
4429425bb815Sopenharmony_ci```
4430425bb815Sopenharmony_ci
4431425bb815Sopenharmony_ci**See also**
4432425bb815Sopenharmony_ci
4433425bb815Sopenharmony_ci- [jerry_is_valid_cesu8_string](#jerry_is_valid_cesu8_string)
4434425bb815Sopenharmony_ci- [jerry_create_string_sz](#jerry_create_string_sz)
4435425bb815Sopenharmony_ci
4436425bb815Sopenharmony_ci
4437425bb815Sopenharmony_ci## jerry_create_string_sz
4438425bb815Sopenharmony_ci
4439425bb815Sopenharmony_ci**Summary**
4440425bb815Sopenharmony_ci
4441425bb815Sopenharmony_ciCreate string from a valid CESU8 string.
4442425bb815Sopenharmony_ci
4443425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
4444425bb815Sopenharmony_ciis no longer needed.
4445425bb815Sopenharmony_ci
4446425bb815Sopenharmony_ci**Prototype**
4447425bb815Sopenharmony_ci
4448425bb815Sopenharmony_ci```c
4449425bb815Sopenharmony_cijerry_value_t
4450425bb815Sopenharmony_cijerry_create_string_sz (const jerry_char_t *str_p,
4451425bb815Sopenharmony_ci                        jerry_size_t str_size)
4452425bb815Sopenharmony_ci```
4453425bb815Sopenharmony_ci
4454425bb815Sopenharmony_ci- `str_p` - non-null pointer to string
4455425bb815Sopenharmony_ci- `str_size` - size of the string
4456425bb815Sopenharmony_ci- return value - value of the created string
4457425bb815Sopenharmony_ci
4458425bb815Sopenharmony_ci**Example**
4459425bb815Sopenharmony_ci
4460425bb815Sopenharmony_ci```c
4461425bb815Sopenharmony_ci{
4462425bb815Sopenharmony_ci  const jerry_char_t char_array[] = "a string";
4463425bb815Sopenharmony_ci  jerry_value_t string_value  = jerry_create_string_sz (char_array,
4464425bb815Sopenharmony_ci                                                        sizeof (char_array) - 1);
4465425bb815Sopenharmony_ci
4466425bb815Sopenharmony_ci  ... // usage of string_value
4467425bb815Sopenharmony_ci
4468425bb815Sopenharmony_ci  jerry_release_value (string_value);
4469425bb815Sopenharmony_ci}
4470425bb815Sopenharmony_ci
4471425bb815Sopenharmony_ci```
4472425bb815Sopenharmony_ci
4473425bb815Sopenharmony_ci**See also**
4474425bb815Sopenharmony_ci
4475425bb815Sopenharmony_ci- [jerry_is_valid_cesu8_string](#jerry_is_valid_cesu8_string)
4476425bb815Sopenharmony_ci- [jerry_create_string](#jerry_create_string)
4477425bb815Sopenharmony_ci
4478425bb815Sopenharmony_ci
4479425bb815Sopenharmony_ci## jerry_create_string_from_utf8
4480425bb815Sopenharmony_ci
4481425bb815Sopenharmony_ci**Summary**
4482425bb815Sopenharmony_ci
4483425bb815Sopenharmony_ciCreate string from a valid UTF8 string.
4484425bb815Sopenharmony_ci
4485425bb815Sopenharmony_ci*Note*:
4486425bb815Sopenharmony_ci - The difference from [jerry_create_string](#jerry_create_string) is that it accepts utf-8 string instead of cesu-8 string.
4487425bb815Sopenharmony_ci - Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
4488425bb815Sopenharmony_ciis no longer needed.
4489425bb815Sopenharmony_ci
4490425bb815Sopenharmony_ci**Prototype**
4491425bb815Sopenharmony_ci
4492425bb815Sopenharmony_ci```c
4493425bb815Sopenharmony_cijerry_value_t
4494425bb815Sopenharmony_cijerry_create_string_from_utf8 (const jerry_char_t *str_p);
4495425bb815Sopenharmony_ci```
4496425bb815Sopenharmony_ci
4497425bb815Sopenharmony_ci- `str_p` - non-null pointer to string
4498425bb815Sopenharmony_ci- return value - value of the created string
4499425bb815Sopenharmony_ci
4500425bb815Sopenharmony_ci*New in version 2.0*.
4501425bb815Sopenharmony_ci
4502425bb815Sopenharmony_ci**Example**
4503425bb815Sopenharmony_ci
4504425bb815Sopenharmony_ci```c
4505425bb815Sopenharmony_ci{
4506425bb815Sopenharmony_ci  const jerry_char_t char_array[] = "a string";
4507425bb815Sopenharmony_ci  jerry_value_t string_value  = jerry_create_string_from_utf8 (char_array);
4508425bb815Sopenharmony_ci
4509425bb815Sopenharmony_ci  ... // usage of string_value
4510425bb815Sopenharmony_ci
4511425bb815Sopenharmony_ci  jerry_release_value (string_value);
4512425bb815Sopenharmony_ci}
4513425bb815Sopenharmony_ci```
4514425bb815Sopenharmony_ci
4515425bb815Sopenharmony_ci**See also**
4516425bb815Sopenharmony_ci
4517425bb815Sopenharmony_ci- [jerry_is_valid_utf8_string](#jerry_is_valid_utf8_string)
4518425bb815Sopenharmony_ci- [jerry_create_string_sz_from_utf8](#jerry_create_string_sz_from_utf8)
4519425bb815Sopenharmony_ci
4520425bb815Sopenharmony_ci
4521425bb815Sopenharmony_ci## jerry_create_string_sz_from_utf8
4522425bb815Sopenharmony_ci
4523425bb815Sopenharmony_ci**Summary**
4524425bb815Sopenharmony_ci
4525425bb815Sopenharmony_ciCreate string from a valid UTF8 string.
4526425bb815Sopenharmony_ci
4527425bb815Sopenharmony_ci*Note*:
4528425bb815Sopenharmony_ci - The difference from [jerry_create_string_sz](#jerry_create_string_sz) is that it accepts utf-8 string instead of cesu-8 string.
4529425bb815Sopenharmony_ci - Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
4530425bb815Sopenharmony_ciis no longer needed.
4531425bb815Sopenharmony_ci
4532425bb815Sopenharmony_ci**Prototype**
4533425bb815Sopenharmony_ci
4534425bb815Sopenharmony_ci```c
4535425bb815Sopenharmony_cijerry_value_t
4536425bb815Sopenharmony_cijerry_create_string_sz_from_utf8 (const jerry_char_t *str_p,
4537425bb815Sopenharmony_ci                                  jerry_size_t str_size)
4538425bb815Sopenharmony_ci```
4539425bb815Sopenharmony_ci
4540425bb815Sopenharmony_ci- `str_p` - non-null pointer to string
4541425bb815Sopenharmony_ci- `str_size` - size of the string
4542425bb815Sopenharmony_ci- return value - value of the created string
4543425bb815Sopenharmony_ci
4544425bb815Sopenharmony_ci*New in version 2.0*.
4545425bb815Sopenharmony_ci
4546425bb815Sopenharmony_ci**Example**
4547425bb815Sopenharmony_ci
4548425bb815Sopenharmony_ci```c
4549425bb815Sopenharmony_ci{
4550425bb815Sopenharmony_ci  const jerry_char_t char_array[] = "a string";
4551425bb815Sopenharmony_ci  jerry_value_t string_value  = jerry_create_string_sz_from_utf8 (char_array,
4552425bb815Sopenharmony_ci                                                                  sizeof (char_array) - 1);
4553425bb815Sopenharmony_ci
4554425bb815Sopenharmony_ci  ... // usage of string_value
4555425bb815Sopenharmony_ci
4556425bb815Sopenharmony_ci  jerry_release_value (string_value);
4557425bb815Sopenharmony_ci}
4558425bb815Sopenharmony_ci
4559425bb815Sopenharmony_ci```
4560425bb815Sopenharmony_ci
4561425bb815Sopenharmony_ci**See also**
4562425bb815Sopenharmony_ci
4563425bb815Sopenharmony_ci- [jerry_is_valid_utf8_string](#jerry_is_valid_utf8_string)
4564425bb815Sopenharmony_ci- [jerry_create_string_from_utf8](#jerry_create_string_from_utf8)
4565425bb815Sopenharmony_ci
4566425bb815Sopenharmony_ci
4567425bb815Sopenharmony_ci## jerry_create_symbol
4568425bb815Sopenharmony_ci
4569425bb815Sopenharmony_ci**Summary**
4570425bb815Sopenharmony_ci
4571425bb815Sopenharmony_ciCreate symbol from an API value.
4572425bb815Sopenharmony_ci
4573425bb815Sopenharmony_ci*Note*:
4574425bb815Sopenharmony_ci  - The given argument is converted to string. This operation can throw an error.
4575425bb815Sopenharmony_ci  - This API depends on the ES2015-subset profile.
4576425bb815Sopenharmony_ci  - Returned value must be freed with [jerry_release_value](#jerry_release_value)
4577425bb815Sopenharmony_ci    when it is no longer needed.
4578425bb815Sopenharmony_ci
4579425bb815Sopenharmony_ci**Prototype**
4580425bb815Sopenharmony_ci
4581425bb815Sopenharmony_ci```c
4582425bb815Sopenharmony_cijerry_value_t
4583425bb815Sopenharmony_cijerry_create_symbol (const jerry_value_t value)
4584425bb815Sopenharmony_ci```
4585425bb815Sopenharmony_ci
4586425bb815Sopenharmony_ci- `value` - API value
4587425bb815Sopenharmony_ci- return value
4588425bb815Sopenharmony_ci  - value of the created symbol, if success
4589425bb815Sopenharmony_ci  - thrown error, otherwise
4590425bb815Sopenharmony_ci
4591425bb815Sopenharmony_ci*New in version 2.0*.
4592425bb815Sopenharmony_ci
4593425bb815Sopenharmony_ci**Example**
4594425bb815Sopenharmony_ci
4595425bb815Sopenharmony_ci[doctest]: # ()
4596425bb815Sopenharmony_ci
4597425bb815Sopenharmony_ci```c
4598425bb815Sopenharmony_ci#include "jerryscript.h"
4599425bb815Sopenharmony_ci
4600425bb815Sopenharmony_ciint
4601425bb815Sopenharmony_cimain (void)
4602425bb815Sopenharmony_ci{
4603425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
4604425bb815Sopenharmony_ci
4605425bb815Sopenharmony_ci  jerry_value_t string_value = jerry_create_string ((const jerry_char_t *) "Symbol description string");
4606425bb815Sopenharmony_ci  jerry_value_t symbol_value = jerry_create_symbol (string_value);
4607425bb815Sopenharmony_ci
4608425bb815Sopenharmony_ci  // The description value is no longer needed
4609425bb815Sopenharmony_ci  jerry_release_value (string_value);
4610425bb815Sopenharmony_ci
4611425bb815Sopenharmony_ci  // usage of symbol_value
4612425bb815Sopenharmony_ci
4613425bb815Sopenharmony_ci  jerry_release_value (symbol_value);
4614425bb815Sopenharmony_ci
4615425bb815Sopenharmony_ci  jerry_cleanup ();
4616425bb815Sopenharmony_ci}
4617425bb815Sopenharmony_ci```
4618425bb815Sopenharmony_ci
4619425bb815Sopenharmony_ci**See also**
4620425bb815Sopenharmony_ci
4621425bb815Sopenharmony_ci- [jerry_value_is_symbol](#jerry_value_is_symbol)
4622425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
4623425bb815Sopenharmony_ci
4624425bb815Sopenharmony_ci
4625425bb815Sopenharmony_ci## jerry_create_regexp
4626425bb815Sopenharmony_ci
4627425bb815Sopenharmony_ci**Summary**
4628425bb815Sopenharmony_ci
4629425bb815Sopenharmony_ciReturns a `jerry_value_t` RegExp object or an error, if the construction of the object fails.
4630425bb815Sopenharmony_ciOptional flags can be set using [jerry_regexp_flags_t](#jerry_regexp_flags_t).
4631425bb815Sopenharmony_ciThese flags can be combined together with the binary OR operator or used on their own as enum values.
4632425bb815Sopenharmony_ci
4633425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
4634425bb815Sopenharmony_ciis no longer needed.
4635425bb815Sopenharmony_ci
4636425bb815Sopenharmony_ci**Prototype**
4637425bb815Sopenharmony_ci```c
4638425bb815Sopenharmony_cijerry_value_t
4639425bb815Sopenharmony_cijerry_create_regexp (const jerry_char_t *pattern_p, uint16_t flags);
4640425bb815Sopenharmony_ci```
4641425bb815Sopenharmony_ci
4642425bb815Sopenharmony_ci- `pattern_p` - the RegExp pattern as a zero-terminated UTF-8 string
4643425bb815Sopenharmony_ci- `flags` - optional flags for the RegExp object, see [jerry_regexp_flags_t](#jerry_regexp_flags_t)
4644425bb815Sopenharmony_ci- return value - the RegExp object as a `jerry_value_t`
4645425bb815Sopenharmony_ci
4646425bb815Sopenharmony_ci*New in version 2.0*.
4647425bb815Sopenharmony_ci
4648425bb815Sopenharmony_ci**Example**
4649425bb815Sopenharmony_ci
4650425bb815Sopenharmony_ci```c
4651425bb815Sopenharmony_ci{
4652425bb815Sopenharmony_ci  jerry_char_t pattern_p = "[cgt]gggtaaa|tttaccc[acg]";
4653425bb815Sopenharmony_ci  uint16_t pattern_flags = JERRY_REGEXP_FLAG_IGNORE_CASE;
4654425bb815Sopenharmony_ci
4655425bb815Sopenharmony_ci  jerry_value_t regexp = jerry_create_regexp (pattern_p, pattern_flags);
4656425bb815Sopenharmony_ci
4657425bb815Sopenharmony_ci  ...
4658425bb815Sopenharmony_ci
4659425bb815Sopenharmony_ci  jerry_release_value (regexp);
4660425bb815Sopenharmony_ci}
4661425bb815Sopenharmony_ci```
4662425bb815Sopenharmony_ci
4663425bb815Sopenharmony_ci
4664425bb815Sopenharmony_ci## jerry_create_regexp_sz
4665425bb815Sopenharmony_ci
4666425bb815Sopenharmony_ci**Summary**
4667425bb815Sopenharmony_ci
4668425bb815Sopenharmony_ciReturns a `jerry_value_t` RegExp object or an error, if the construction of the object fails.
4669425bb815Sopenharmony_ciOptional flags can be set using [jerry_regexp_flags_t](#jerry_regexp_flags_t).
4670425bb815Sopenharmony_ciThese flags can be combined together with the binary OR operator or used on their own as enum values.
4671425bb815Sopenharmony_ci
4672425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
4673425bb815Sopenharmony_ciis no longer needed.
4674425bb815Sopenharmony_ci
4675425bb815Sopenharmony_ci**Prototype**
4676425bb815Sopenharmony_ci```c
4677425bb815Sopenharmony_cijerry_value_t
4678425bb815Sopenharmony_cijerry_create_regexp_sz (const jerry_char_t *pattern_p, jerry_size_t pattern_size, uint16_t flags);
4679425bb815Sopenharmony_ci```
4680425bb815Sopenharmony_ci
4681425bb815Sopenharmony_ci- `pattern_p` - the RegExp pattern as a zero-terminated UTF-8 string
4682425bb815Sopenharmony_ci- `pattern_size` - size of the `pattern`
4683425bb815Sopenharmony_ci- `flags` - optional flags for the RegExp object, see [jerry_regexp_flags_t](#jerry_regexp_flags_t)
4684425bb815Sopenharmony_ci- return value - the RegExp object as a `jerry_value_t`
4685425bb815Sopenharmony_ci
4686425bb815Sopenharmony_ci*New in version 2.0*.
4687425bb815Sopenharmony_ci
4688425bb815Sopenharmony_ci**Example**
4689425bb815Sopenharmony_ci
4690425bb815Sopenharmony_ci```c
4691425bb815Sopenharmony_ci{
4692425bb815Sopenharmony_ci  jerry_char_t pattern_p = "[cgt]gggtaaa|tttaccc[acg]";
4693425bb815Sopenharmony_ci  jerry_size_t pattern_size = sizeof (pattern_p) - 1;
4694425bb815Sopenharmony_ci  uint16_t pattern_flags = JERRY_REGEXP_FLAG_IGNORE_CASE;
4695425bb815Sopenharmony_ci
4696425bb815Sopenharmony_ci  jerry_value_t regexp = jerry_create_regexp_sz (pattern_p, pattern_size, pattern_flags);
4697425bb815Sopenharmony_ci
4698425bb815Sopenharmony_ci  ...
4699425bb815Sopenharmony_ci
4700425bb815Sopenharmony_ci  jerry_release_value (regexp);
4701425bb815Sopenharmony_ci}
4702425bb815Sopenharmony_ci```
4703425bb815Sopenharmony_ci
4704425bb815Sopenharmony_ci
4705425bb815Sopenharmony_ci## jerry_create_typedarray
4706425bb815Sopenharmony_ci
4707425bb815Sopenharmony_ci**Summary**
4708425bb815Sopenharmony_ci
4709425bb815Sopenharmony_ciCreate a jerry_value_t representing an TypedArray object.
4710425bb815Sopenharmony_ci
4711425bb815Sopenharmony_ciFor the new object the type of the TypedArray (see: [jerry_typedarray_type_t](#jerry_typedarray_type_t))
4712425bb815Sopenharmony_ciand element count can be specified.
4713425bb815Sopenharmony_ci
4714425bb815Sopenharmony_ci*Notes*:
4715425bb815Sopenharmony_ci- Returned value must be freed with [jerry_release_value](#jerry_release_value)
4716425bb815Sopenharmony_ci  when it is no longer needed.
4717425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_ES2015_BUILTIN_TYPEDARRAY`) and can be checked
4718425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_TYPEDARRAY` feature enum value,
4719425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
4720425bb815Sopenharmony_ci- The ES2015-subset profile enables this by default.
4721425bb815Sopenharmony_ci
4722425bb815Sopenharmony_ci**Prototype**
4723425bb815Sopenharmony_ci
4724425bb815Sopenharmony_ci```c
4725425bb815Sopenharmony_cijerry_value_t
4726425bb815Sopenharmony_cijerry_create_typedarray (jerry_typedarray_type_t type_name, jerry_length_t item_count);
4727425bb815Sopenharmony_ci```
4728425bb815Sopenharmony_ci
4729425bb815Sopenharmony_ci- `type_name` - type of TypedArray to create
4730425bb815Sopenharmony_ci- `item_count` - number of items in the new TypedArray
4731425bb815Sopenharmony_ci- return value - the new TypedArray as a `jerry_value_t`
4732425bb815Sopenharmony_ci
4733425bb815Sopenharmony_ci*New in version 2.0*.
4734425bb815Sopenharmony_ci
4735425bb815Sopenharmony_ci**Example**
4736425bb815Sopenharmony_ci
4737425bb815Sopenharmony_ci```c
4738425bb815Sopenharmony_ci{
4739425bb815Sopenharmony_ci  jerry_value_t array = jerry_create_typedarray (JERRY_TYPEDARRAY_UINT16, 15);
4740425bb815Sopenharmony_ci
4741425bb815Sopenharmony_ci  ... // use the TypedArray
4742425bb815Sopenharmony_ci
4743425bb815Sopenharmony_ci  jerry_release_value (array);
4744425bb815Sopenharmony_ci}
4745425bb815Sopenharmony_ci```
4746425bb815Sopenharmony_ci
4747425bb815Sopenharmony_ci**See also**
4748425bb815Sopenharmony_ci
4749425bb815Sopenharmony_ci- [jerry_typedarray_type_t](#jerry_typedarray_type_t)
4750425bb815Sopenharmony_ci- [jerry_value_is_typedarray](#jerry_value_is_typedarray)
4751425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
4752425bb815Sopenharmony_ci
4753425bb815Sopenharmony_ci
4754425bb815Sopenharmony_ci## jerry_create_typedarray_for_arraybuffer
4755425bb815Sopenharmony_ci
4756425bb815Sopenharmony_ci**Summary**
4757425bb815Sopenharmony_ci
4758425bb815Sopenharmony_ciCreate a jerry_value_t representing an TypedArray object using
4759425bb815Sopenharmony_cian already existing ArrayBuffer object.
4760425bb815Sopenharmony_ci
4761425bb815Sopenharmony_ciFor the new object the type of the TypedArray (see: [jerry_typedarray_type_t](#jerry_typedarray_type_t))
4762425bb815Sopenharmony_ciand element count can be specified.
4763425bb815Sopenharmony_ci
4764425bb815Sopenharmony_ciThe developer must ensure that the ArrayBuffer has the correct length for the given
4765425bb815Sopenharmony_citype of TypedArray otherwise an error is generated.
4766425bb815Sopenharmony_ci
4767425bb815Sopenharmony_ciThe JavaScript equivalent of this function is: `new %TypedArray%(arraybuffer)` where `%TypedArray%` is
4768425bb815Sopenharmony_cione of the allowed TypedArray functions.
4769425bb815Sopenharmony_ci
4770425bb815Sopenharmony_ci*Notes*:
4771425bb815Sopenharmony_ci- Returned value must be freed with [jerry_release_value](#jerry_release_value)
4772425bb815Sopenharmony_ci  when it is no longer needed.
4773425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_ES2015_BUILTIN_TYPEDARRAY`) and can be checked
4774425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_TYPEDARRAY` feature enum value,
4775425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
4776425bb815Sopenharmony_ci- The ES2015-subset profile enables this by default.
4777425bb815Sopenharmony_ci
4778425bb815Sopenharmony_ci**Prototype**
4779425bb815Sopenharmony_ci
4780425bb815Sopenharmony_ci```c
4781425bb815Sopenharmony_cijerry_value_t
4782425bb815Sopenharmony_cijerry_create_typedarray_for_arraybuffer (jerry_typedarray_type_t type_name,
4783425bb815Sopenharmony_ci                                         const jerry_value_t arraybuffer);
4784425bb815Sopenharmony_ci```
4785425bb815Sopenharmony_ci
4786425bb815Sopenharmony_ci- `type_name` - type of TypedArray to create
4787425bb815Sopenharmony_ci- `arraybuffer` - the ArrayBuffer to use for the new TypedArray
4788425bb815Sopenharmony_ci- return value
4789425bb815Sopenharmony_ci  - the new TypedArray as a `jerry_value_t`
4790425bb815Sopenharmony_ci  - Error if the ArrayBuffer does not have enough space for the given type of TypedArray
4791425bb815Sopenharmony_ci
4792425bb815Sopenharmony_ci*New in version 2.0*.
4793425bb815Sopenharmony_ci
4794425bb815Sopenharmony_ci**Example**
4795425bb815Sopenharmony_ci
4796425bb815Sopenharmony_ci```c
4797425bb815Sopenharmony_ci{
4798425bb815Sopenharmony_ci  jerry_value_t buffer = jerry_create_array_buffer (12 * 2);
4799425bb815Sopenharmony_ci  jerry_value_t array = jerry_create_typedarray_for_arraybuffer (JERRY_TYPEDARRAY_UINT16, buffer);
4800425bb815Sopenharmony_ci  jerry_release_value (buffer);
4801425bb815Sopenharmony_ci
4802425bb815Sopenharmony_ci  ... // use the TypedArray
4803425bb815Sopenharmony_ci
4804425bb815Sopenharmony_ci  jerry_release_value (array);
4805425bb815Sopenharmony_ci}
4806425bb815Sopenharmony_ci```
4807425bb815Sopenharmony_ci
4808425bb815Sopenharmony_ci**See also**
4809425bb815Sopenharmony_ci
4810425bb815Sopenharmony_ci- [jerry_typedarray_type_t](#jerry_typedarray_type_t)
4811425bb815Sopenharmony_ci- [jerry_value_is_typedarray](#jerry_value_is_typedarray)
4812425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
4813425bb815Sopenharmony_ci
4814425bb815Sopenharmony_ci
4815425bb815Sopenharmony_ci## jerry_create_typedarray_for_arraybuffer_sz
4816425bb815Sopenharmony_ci
4817425bb815Sopenharmony_ci**Summary**
4818425bb815Sopenharmony_ci
4819425bb815Sopenharmony_ciCreate a jerry_value_t representing an TypedArray object using
4820425bb815Sopenharmony_cian already existing ArrayBuffer object and by specifying the byteOffset, and length properties.
4821425bb815Sopenharmony_ci
4822425bb815Sopenharmony_ciFor the new object the type of the TypedArray (see: [jerry_typedarray_type_t](#jerry_typedarray_type_t))
4823425bb815Sopenharmony_ciand element count can be specified.
4824425bb815Sopenharmony_ci
4825425bb815Sopenharmony_ciThe developer must ensure that the ArrayBuffer has the correct length for the given
4826425bb815Sopenharmony_citype of TypedArray otherwise an error is generated.
4827425bb815Sopenharmony_ci
4828425bb815Sopenharmony_ciThe JavaScript equivalent of this function is: `new %TypedArray%(arraybuffer, byteOffset, length)` where `%TypedArray%` is
4829425bb815Sopenharmony_cione of the allowed TypedArray functions.
4830425bb815Sopenharmony_ci
4831425bb815Sopenharmony_ci*Notes*:
4832425bb815Sopenharmony_ci- Returned value must be freed with [jerry_release_value](#jerry_release_value)
4833425bb815Sopenharmony_ci  when it is no longer needed.
4834425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_ES2015_BUILTIN_TYPEDARRAY`) and can be checked
4835425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_TYPEDARRAY` feature enum value,
4836425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
4837425bb815Sopenharmony_ci- The ES2015-subset profile enables this by default.
4838425bb815Sopenharmony_ci
4839425bb815Sopenharmony_ci**Prototype**
4840425bb815Sopenharmony_ci
4841425bb815Sopenharmony_ci```c
4842425bb815Sopenharmony_cijerry_value_t
4843425bb815Sopenharmony_cijerry_create_typedarray_for_arraybuffer_sz (jerry_typedarray_type_t type_name,
4844425bb815Sopenharmony_ci                                            const jerry_value_t arraybuffer,
4845425bb815Sopenharmony_ci                                            jerry_length_t byte_offset,
4846425bb815Sopenharmony_ci                                            jerry_length_t length);
4847425bb815Sopenharmony_ci```
4848425bb815Sopenharmony_ci
4849425bb815Sopenharmony_ci- `type_name` - type of TypedArray to create
4850425bb815Sopenharmony_ci- `arraybuffer` - the ArrayBuffer to use for the new TypedArray
4851425bb815Sopenharmony_ci- `byte_offset` - start offset to use for the ArrayBuffer
4852425bb815Sopenharmony_ci- `length` - number of elements to used from the ArrayBuffer (this is not the same as the byteLength)
4853425bb815Sopenharmony_ci- return value
4854425bb815Sopenharmony_ci  - the new TypedArray as a `jerry_value_t`
4855425bb815Sopenharmony_ci  - Error if the ArrayBuffer does not have enough space for the given type of TypedArray
4856425bb815Sopenharmony_ci
4857425bb815Sopenharmony_ci*New in version 2.0*.
4858425bb815Sopenharmony_ci
4859425bb815Sopenharmony_ci**Example**
4860425bb815Sopenharmony_ci
4861425bb815Sopenharmony_ci```c
4862425bb815Sopenharmony_ci{
4863425bb815Sopenharmony_ci  jerry_value_t buffer = jerry_create_array_buffer (12 * 2);
4864425bb815Sopenharmony_ci  jerry_value_t array = jerry_create_typedarray_for_arraybuffer_sz (JERRY_TYPEDARRAY_UINT16, buffer, 4, 10);
4865425bb815Sopenharmony_ci  jerry_release_value (buffer);
4866425bb815Sopenharmony_ci
4867425bb815Sopenharmony_ci  ... // use the TypedArray
4868425bb815Sopenharmony_ci
4869425bb815Sopenharmony_ci  jerry_release_value (array);
4870425bb815Sopenharmony_ci}
4871425bb815Sopenharmony_ci```
4872425bb815Sopenharmony_ci
4873425bb815Sopenharmony_ci**See also**
4874425bb815Sopenharmony_ci
4875425bb815Sopenharmony_ci- [jerry_typedarray_type_t](#jerry_typedarray_type_t)
4876425bb815Sopenharmony_ci- [jerry_value_is_typedarray](#jerry_value_is_typedarray)
4877425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
4878425bb815Sopenharmony_ci
4879425bb815Sopenharmony_ci
4880425bb815Sopenharmony_ci## jerry_create_container
4881425bb815Sopenharmony_ci
4882425bb815Sopenharmony_ci**Summary**
4883425bb815Sopenharmony_ci
4884425bb815Sopenharmony_ciCreate a jerry_value_t representing a given type container object.
4885425bb815Sopenharmony_ci
4886425bb815Sopenharmony_ci*Notes*:
4887425bb815Sopenharmony_ci- This method is expected to work the same way as the JavaScript Map constructor.
4888425bb815Sopenharmony_ci- Returned value must be freed with [jerry_release_value](#jerry_release_value)
4889425bb815Sopenharmony_ci  when it is no longer needed.
4890425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_ES2015_BUILTIN_CONTAINER`) and can be checked
4891425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_MAP, JERRY_FEATURE_SET, JERRY_FEATURE_WEAKMAP, JERRY_FEATURE_WEAKSET`
4892425bb815Sopenharmony_ci  feature enum values.
4893425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
4894425bb815Sopenharmony_ci- The ES2015-subset profile enables this by default.
4895425bb815Sopenharmony_ci
4896425bb815Sopenharmony_ci*New in version 2.3*.
4897425bb815Sopenharmony_ci
4898425bb815Sopenharmony_ci**Prototype**
4899425bb815Sopenharmony_ci
4900425bb815Sopenharmony_ci```c
4901425bb815Sopenharmony_cijerry_value_t
4902425bb815Sopenharmony_cijerry_create_container (jerry_container_type_t container_type,
4903425bb815Sopenharmony_ci                        const jerry_value_t *arguments_list_p,
4904425bb815Sopenharmony_ci                        jerry_length_t arguments_list_len);
4905425bb815Sopenharmony_ci```
4906425bb815Sopenharmony_ci
4907425bb815Sopenharmony_ci- `container_type` - Type of the container to be created, see `jerry_container_type_t`.
4908425bb815Sopenharmony_ci- `arguments_list_p` - The arguments passed to the container constructor to be inserted to the container.
4909425bb815Sopenharmony_ci- `arguments_list_len` - The length of the above arguments.
4910425bb815Sopenharmony_ci- return value - the new container object as a `jerry_value_t`
4911425bb815Sopenharmony_ci
4912425bb815Sopenharmony_ci**Example**
4913425bb815Sopenharmony_ci
4914425bb815Sopenharmony_ci[doctest]: # ()
4915425bb815Sopenharmony_ci
4916425bb815Sopenharmony_ci```c
4917425bb815Sopenharmony_ci#include "jerryscript.h"
4918425bb815Sopenharmony_ci
4919425bb815Sopenharmony_ciint
4920425bb815Sopenharmony_cimain (void)
4921425bb815Sopenharmony_ci{
4922425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
4923425bb815Sopenharmony_ci  jerry_char_t src[] = "[1,2,3,4].entries()";
4924425bb815Sopenharmony_ci  jerry_value_t iterable = jerry_eval (src, sizeof (src) - 1, JERRY_PARSE_NO_OPTS);
4925425bb815Sopenharmony_ci
4926425bb815Sopenharmony_ci  jerry_value_t map = jerry_create_container (JERRY_CONTAINER_TYPE_MAP, &iterable, 1);
4927425bb815Sopenharmony_ci  jerry_release_value (iterable);
4928425bb815Sopenharmony_ci
4929425bb815Sopenharmony_ci  // use the Map
4930425bb815Sopenharmony_ci
4931425bb815Sopenharmony_ci  jerry_release_value (map);
4932425bb815Sopenharmony_ci
4933425bb815Sopenharmony_ci  jerry_cleanup ();
4934425bb815Sopenharmony_ci  return 0;
4935425bb815Sopenharmony_ci}
4936425bb815Sopenharmony_ci```
4937425bb815Sopenharmony_ci
4938425bb815Sopenharmony_ci**See also**
4939425bb815Sopenharmony_ci
4940425bb815Sopenharmony_ci- [jerry_container_type_t](#jerry_container_type_t)
4941425bb815Sopenharmony_ci- [jerry_get_container_type](#jerry_get_container_type)
4942425bb815Sopenharmony_ci
4943425bb815Sopenharmony_ci
4944425bb815Sopenharmony_ci## jerry_create_undefined
4945425bb815Sopenharmony_ci
4946425bb815Sopenharmony_ci**Summary**
4947425bb815Sopenharmony_ci
4948425bb815Sopenharmony_ciCreates a `jerry_value_t` representing an undefined value.
4949425bb815Sopenharmony_ci
4950425bb815Sopenharmony_ci**Prototype**
4951425bb815Sopenharmony_ci
4952425bb815Sopenharmony_ci```c
4953425bb815Sopenharmony_cijerry_value_t
4954425bb815Sopenharmony_cijerry_create_undefined (void);
4955425bb815Sopenharmony_ci```
4956425bb815Sopenharmony_ci
4957425bb815Sopenharmony_ci- return value - value of undefined
4958425bb815Sopenharmony_ci
4959425bb815Sopenharmony_ci**Example**
4960425bb815Sopenharmony_ci
4961425bb815Sopenharmony_ci```c
4962425bb815Sopenharmony_ci{
4963425bb815Sopenharmony_ci  jerry_value_t undefined_value = jerry_create_undefined ();
4964425bb815Sopenharmony_ci
4965425bb815Sopenharmony_ci  ... // usage of the value
4966425bb815Sopenharmony_ci
4967425bb815Sopenharmony_ci  jerry_release_value (undefined_value);
4968425bb815Sopenharmony_ci}
4969425bb815Sopenharmony_ci```
4970425bb815Sopenharmony_ci
4971425bb815Sopenharmony_ci**See also**
4972425bb815Sopenharmony_ci
4973425bb815Sopenharmony_ci- [jerry_release_value](#jerry_release_value)
4974425bb815Sopenharmony_ci
4975425bb815Sopenharmony_ci
4976425bb815Sopenharmony_ci# General API functions of JS objects
4977425bb815Sopenharmony_ci
4978425bb815Sopenharmony_ci## jerry_has_property
4979425bb815Sopenharmony_ci
4980425bb815Sopenharmony_ci**Summary**
4981425bb815Sopenharmony_ci
4982425bb815Sopenharmony_ciChecks whether the object or its prototype objects have the given property.
4983425bb815Sopenharmony_ci
4984425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
4985425bb815Sopenharmony_ciis no longer needed.
4986425bb815Sopenharmony_ci
4987425bb815Sopenharmony_ci**Prototype**
4988425bb815Sopenharmony_ci
4989425bb815Sopenharmony_ci```c
4990425bb815Sopenharmony_cijerry_value_t
4991425bb815Sopenharmony_cijerry_has_property (const jerry_value_t obj_val,
4992425bb815Sopenharmony_ci                    const jerry_value_t prop_name_val);
4993425bb815Sopenharmony_ci```
4994425bb815Sopenharmony_ci
4995425bb815Sopenharmony_ci- `obj_val` - object value
4996425bb815Sopenharmony_ci- `prop_name_val` - property name
4997425bb815Sopenharmony_ci- return value - JavaScript value that evaluates to
4998425bb815Sopenharmony_ci  -  raised error - if the operation fail
4999425bb815Sopenharmony_ci  -  true/false API value  - depend on whether the property exists
5000425bb815Sopenharmony_ci
5001425bb815Sopenharmony_ci*Changed in version 2.0*: The return value type is now a JavaScript value and not a primitive boolean value.
5002425bb815Sopenharmony_ci*Changed in version 2.3*: The return value can be an error value.
5003425bb815Sopenharmony_ci
5004425bb815Sopenharmony_ci**Example**
5005425bb815Sopenharmony_ci
5006425bb815Sopenharmony_ci[doctest]: # ()
5007425bb815Sopenharmony_ci
5008425bb815Sopenharmony_ci```c
5009425bb815Sopenharmony_ci#include "jerryscript.h"
5010425bb815Sopenharmony_ci
5011425bb815Sopenharmony_ciint
5012425bb815Sopenharmony_cimain (void)
5013425bb815Sopenharmony_ci{
5014425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
5015425bb815Sopenharmony_ci
5016425bb815Sopenharmony_ci  jerry_value_t global_object = jerry_get_global_object ();
5017425bb815Sopenharmony_ci  jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "handler_field");
5018425bb815Sopenharmony_ci
5019425bb815Sopenharmony_ci  jerry_value_t has_prop_js = jerry_has_property (global_object, prop_name);
5020425bb815Sopenharmony_ci  bool has_prop = jerry_get_boolean_value (has_prop_js);
5021425bb815Sopenharmony_ci
5022425bb815Sopenharmony_ci  jerry_release_value (has_prop_js);
5023425bb815Sopenharmony_ci  jerry_release_value (prop_name);
5024425bb815Sopenharmony_ci  jerry_release_value (global_object);
5025425bb815Sopenharmony_ci
5026425bb815Sopenharmony_ci  jerry_cleanup ();
5027425bb815Sopenharmony_ci
5028425bb815Sopenharmony_ci  return 0;
5029425bb815Sopenharmony_ci}
5030425bb815Sopenharmony_ci```
5031425bb815Sopenharmony_ci
5032425bb815Sopenharmony_ci**See also**
5033425bb815Sopenharmony_ci
5034425bb815Sopenharmony_ci- [jerry_has_own_property](#jerry_has_own_property)
5035425bb815Sopenharmony_ci- [jerry_delete_property](#jerry_delete_property)
5036425bb815Sopenharmony_ci
5037425bb815Sopenharmony_ci
5038425bb815Sopenharmony_ci## jerry_has_own_property
5039425bb815Sopenharmony_ci
5040425bb815Sopenharmony_ci**Summary**
5041425bb815Sopenharmony_ci
5042425bb815Sopenharmony_ciChecks whether the object has the given property.
5043425bb815Sopenharmony_ci
5044425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
5045425bb815Sopenharmony_ciis no longer needed.
5046425bb815Sopenharmony_ci
5047425bb815Sopenharmony_ci**Prototype**
5048425bb815Sopenharmony_ci
5049425bb815Sopenharmony_ci```c
5050425bb815Sopenharmony_cijerry_value_t
5051425bb815Sopenharmony_cijerry_has_own_property (const jerry_value_t obj_val,
5052425bb815Sopenharmony_ci                        const jerry_value_t prop_name_val);
5053425bb815Sopenharmony_ci```
5054425bb815Sopenharmony_ci
5055425bb815Sopenharmony_ci- `obj_val` - object value
5056425bb815Sopenharmony_ci- `prop_name_val` - property name
5057425bb815Sopenharmony_ci- return value - JavaScript value that evaluates to
5058425bb815Sopenharmony_ci  -  raised error - if the operation fails
5059425bb815Sopenharmony_ci  -  true/false API value - depend on whether the property exists
5060425bb815Sopenharmony_ci
5061425bb815Sopenharmony_ci*Changed in version 2.0*: The return value type is now a JavaScript value and not a primitive boolean value.
5062425bb815Sopenharmony_ci*Changed in version 2.3*: The return value can be an error value.
5063425bb815Sopenharmony_ci
5064425bb815Sopenharmony_ci**Example**
5065425bb815Sopenharmony_ci
5066425bb815Sopenharmony_ci[doctest]: # ()
5067425bb815Sopenharmony_ci
5068425bb815Sopenharmony_ci```c
5069425bb815Sopenharmony_ci#include "jerryscript.h"
5070425bb815Sopenharmony_ci
5071425bb815Sopenharmony_ciint
5072425bb815Sopenharmony_cimain (void)
5073425bb815Sopenharmony_ci{
5074425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
5075425bb815Sopenharmony_ci
5076425bb815Sopenharmony_ci  jerry_value_t global_object = jerry_get_global_object ();
5077425bb815Sopenharmony_ci  jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "handler_field");
5078425bb815Sopenharmony_ci
5079425bb815Sopenharmony_ci  jerry_value_t has_prop_js = jerry_has_own_property (global_object, prop_name);
5080425bb815Sopenharmony_ci  bool has_prop = jerry_get_boolean_value (has_prop_js);
5081425bb815Sopenharmony_ci
5082425bb815Sopenharmony_ci  jerry_release_value (has_prop_js);
5083425bb815Sopenharmony_ci  jerry_release_value (prop_name);
5084425bb815Sopenharmony_ci  jerry_release_value (global_object);
5085425bb815Sopenharmony_ci
5086425bb815Sopenharmony_ci  jerry_cleanup ();
5087425bb815Sopenharmony_ci
5088425bb815Sopenharmony_ci  return 0;
5089425bb815Sopenharmony_ci}
5090425bb815Sopenharmony_ci```
5091425bb815Sopenharmony_ci
5092425bb815Sopenharmony_ci**See also**
5093425bb815Sopenharmony_ci
5094425bb815Sopenharmony_ci- [jerry_has_property](#jerry_has_property)
5095425bb815Sopenharmony_ci- [jerry_delete_property](#jerry_delete_property)
5096425bb815Sopenharmony_ci
5097425bb815Sopenharmony_ci
5098425bb815Sopenharmony_ci## jerry_has_internal_property
5099425bb815Sopenharmony_ci
5100425bb815Sopenharmony_ci**Summary**
5101425bb815Sopenharmony_ci
5102425bb815Sopenharmony_ciChecks whether the object has the given internal property.
5103425bb815Sopenharmony_ci
5104425bb815Sopenharmony_ci*Note*:
5105425bb815Sopenharmony_ci - Properties which were not created with [jerry_set_internal_property](#jerry_set_internal_property) are excluded
5106425bb815Sopenharmony_ci   during the operation.
5107425bb815Sopenharmony_ci - Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
5108425bb815Sopenharmony_ciis no longer needed.
5109425bb815Sopenharmony_ci
5110425bb815Sopenharmony_ci**Prototype**
5111425bb815Sopenharmony_ci
5112425bb815Sopenharmony_ci```c
5113425bb815Sopenharmony_cibool
5114425bb815Sopenharmony_cijerry_has_internal_property (const jerry_value_t obj_val,
5115425bb815Sopenharmony_ci                             const jerry_value_t prop_name_val);
5116425bb815Sopenharmony_ci```
5117425bb815Sopenharmony_ci
5118425bb815Sopenharmony_ci- `obj_val` - object value
5119425bb815Sopenharmony_ci- `prop_name_val` - property name
5120425bb815Sopenharmony_ci- return value
5121425bb815Sopenharmony_ci  - true, if the property exists
5122425bb815Sopenharmony_ci  - false, otherwise
5123425bb815Sopenharmony_ci
5124425bb815Sopenharmony_ci*New in version 2.2*.
5125425bb815Sopenharmony_ci
5126425bb815Sopenharmony_ci**Example**
5127425bb815Sopenharmony_ci
5128425bb815Sopenharmony_ci[doctest]: # ()
5129425bb815Sopenharmony_ci
5130425bb815Sopenharmony_ci```c
5131425bb815Sopenharmony_ci#include "jerryscript.h"
5132425bb815Sopenharmony_ci
5133425bb815Sopenharmony_ciint
5134425bb815Sopenharmony_cimain (void)
5135425bb815Sopenharmony_ci{
5136425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
5137425bb815Sopenharmony_ci
5138425bb815Sopenharmony_ci  jerry_value_t global_object = jerry_get_global_object ();
5139425bb815Sopenharmony_ci  jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "hidden_property");
5140425bb815Sopenharmony_ci
5141425bb815Sopenharmony_ci  bool has_internal_js_prop = jerry_has_internal_property (global_object, prop_name);
5142425bb815Sopenharmony_ci
5143425bb815Sopenharmony_ci  jerry_release_value (prop_name);
5144425bb815Sopenharmony_ci  jerry_release_value (global_object);
5145425bb815Sopenharmony_ci
5146425bb815Sopenharmony_ci  return 0;
5147425bb815Sopenharmony_ci}
5148425bb815Sopenharmony_ci```
5149425bb815Sopenharmony_ci
5150425bb815Sopenharmony_ci**See also**
5151425bb815Sopenharmony_ci
5152425bb815Sopenharmony_ci- [jerry_delete_internal_property](#jerry_delete_internal_property)
5153425bb815Sopenharmony_ci- [jerry_get_internal_property](#jerry_get_internal_property)
5154425bb815Sopenharmony_ci- [jerry_set_internal_property](#jerry_set_internal_property)
5155425bb815Sopenharmony_ci
5156425bb815Sopenharmony_ci
5157425bb815Sopenharmony_ci## jerry_delete_property
5158425bb815Sopenharmony_ci
5159425bb815Sopenharmony_ci**Summary**
5160425bb815Sopenharmony_ci
5161425bb815Sopenharmony_ciDelete a property from an object.
5162425bb815Sopenharmony_ci
5163425bb815Sopenharmony_ci**Prototype**
5164425bb815Sopenharmony_ci
5165425bb815Sopenharmony_ci```c
5166425bb815Sopenharmony_cibool
5167425bb815Sopenharmony_cijerry_delete_property (const jerry_value_t obj_val,
5168425bb815Sopenharmony_ci                       const jerry_value_t prop_name_val);
5169425bb815Sopenharmony_ci```
5170425bb815Sopenharmony_ci
5171425bb815Sopenharmony_ci- `obj_val` - object value
5172425bb815Sopenharmony_ci- `prop_name_val` - property name
5173425bb815Sopenharmony_ci- return value
5174425bb815Sopenharmony_ci  - true, if property was deleted successfully
5175425bb815Sopenharmony_ci  - false, otherwise
5176425bb815Sopenharmony_ci
5177425bb815Sopenharmony_ci**Example**
5178425bb815Sopenharmony_ci
5179425bb815Sopenharmony_ci```c
5180425bb815Sopenharmony_ci{
5181425bb815Sopenharmony_ci  jerry_value_t global_object = jerry_get_global_object ();
5182425bb815Sopenharmony_ci  jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "my_prop");
5183425bb815Sopenharmony_ci
5184425bb815Sopenharmony_ci  bool delete_result = jerry_delete_property (global_object, prop_name);
5185425bb815Sopenharmony_ci  /* use "delete_result" */
5186425bb815Sopenharmony_ci
5187425bb815Sopenharmony_ci  jerry_release_value (prop_name);
5188425bb815Sopenharmony_ci  jerry_release_value (global_object);
5189425bb815Sopenharmony_ci}
5190425bb815Sopenharmony_ci```
5191425bb815Sopenharmony_ci
5192425bb815Sopenharmony_ci**See also**
5193425bb815Sopenharmony_ci
5194425bb815Sopenharmony_ci- [jerry_has_property](#jerry_has_property)
5195425bb815Sopenharmony_ci- [jerry_has_own_property](#jerry_has_own_property)
5196425bb815Sopenharmony_ci- [jerry_delete_property_by_index](#jerry_delete_property_by_index)
5197425bb815Sopenharmony_ci- [jerry_get_property](#jerry_get_property)
5198425bb815Sopenharmony_ci
5199425bb815Sopenharmony_ci
5200425bb815Sopenharmony_ci## jerry_delete_property_by_index
5201425bb815Sopenharmony_ci
5202425bb815Sopenharmony_ci**Summary**
5203425bb815Sopenharmony_ci
5204425bb815Sopenharmony_ciDelete indexed property from the specified object.
5205425bb815Sopenharmony_ci
5206425bb815Sopenharmony_ci**Prototype**
5207425bb815Sopenharmony_ci
5208425bb815Sopenharmony_ci```c
5209425bb815Sopenharmony_cibool
5210425bb815Sopenharmony_cijerry_delete_property_by_index (const jerry_value_t obj_val,
5211425bb815Sopenharmony_ci                                uint32_t index);
5212425bb815Sopenharmony_ci```
5213425bb815Sopenharmony_ci
5214425bb815Sopenharmony_ci- `obj_val` - object value
5215425bb815Sopenharmony_ci- `index` - index number
5216425bb815Sopenharmony_ci- return value
5217425bb815Sopenharmony_ci  - true, if property was deleted successfully
5218425bb815Sopenharmony_ci  - false, otherwise
5219425bb815Sopenharmony_ci
5220425bb815Sopenharmony_ci*New in version 2.0*.
5221425bb815Sopenharmony_ci
5222425bb815Sopenharmony_ci**Example**
5223425bb815Sopenharmony_ci
5224425bb815Sopenharmony_ci```c
5225425bb815Sopenharmony_ci{
5226425bb815Sopenharmony_ci  jerry_value_t object;
5227425bb815Sopenharmony_ci
5228425bb815Sopenharmony_ci  ... // create or acquire object
5229425bb815Sopenharmony_ci
5230425bb815Sopenharmony_ci  bool delete_result = jerry_delete_property_by_index (object, 5);
5231425bb815Sopenharmony_ci
5232425bb815Sopenharmony_ci  jerry_release_value (object);
5233425bb815Sopenharmony_ci}
5234425bb815Sopenharmony_ci```
5235425bb815Sopenharmony_ci
5236425bb815Sopenharmony_ci**See also**
5237425bb815Sopenharmony_ci
5238425bb815Sopenharmony_ci- [jerry_has_property](#jerry_has_property)
5239425bb815Sopenharmony_ci- [jerry_has_own_property](#jerry_has_own_property)
5240425bb815Sopenharmony_ci- [jerry_delete_property](#jerry_delete_property)
5241425bb815Sopenharmony_ci- [jerry_get_property](#jerry_get_property)
5242425bb815Sopenharmony_ci- [jerry_set_property](#jerry_set_property)
5243425bb815Sopenharmony_ci- [jerry_get_property_by_index](#jerry_get_property_by_index)
5244425bb815Sopenharmony_ci- [jerry_set_property_by_index](#jerry_set_property_by_index)
5245425bb815Sopenharmony_ci
5246425bb815Sopenharmony_ci## jerry_delete_internal_property
5247425bb815Sopenharmony_ci
5248425bb815Sopenharmony_ci**Summary**
5249425bb815Sopenharmony_ci
5250425bb815Sopenharmony_ciDelete an internal property from an object.
5251425bb815Sopenharmony_ci
5252425bb815Sopenharmony_ci*Note*: Properties which were not created with [jerry_set_internal_property](#jerry_set_internal_property) are excluded
5253425bb815Sopenharmony_ci        during the operation.
5254425bb815Sopenharmony_ci
5255425bb815Sopenharmony_ci**Prototype**
5256425bb815Sopenharmony_ci
5257425bb815Sopenharmony_ci```c
5258425bb815Sopenharmony_cibool
5259425bb815Sopenharmony_cijerry_delete_internal_property (const jerry_value_t obj_val,
5260425bb815Sopenharmony_ci                                const jerry_value_t prop_name_val);
5261425bb815Sopenharmony_ci```
5262425bb815Sopenharmony_ci
5263425bb815Sopenharmony_ci- `obj_val` - object value
5264425bb815Sopenharmony_ci- `prop_name_val` - property name
5265425bb815Sopenharmony_ci- return value
5266425bb815Sopenharmony_ci  - true, if property was deleted successfully
5267425bb815Sopenharmony_ci  - false, otherwise
5268425bb815Sopenharmony_ci
5269425bb815Sopenharmony_ci*New in version 2.2*.
5270425bb815Sopenharmony_ci
5271425bb815Sopenharmony_ci**Example**
5272425bb815Sopenharmony_ci
5273425bb815Sopenharmony_ci```c
5274425bb815Sopenharmony_ci{
5275425bb815Sopenharmony_ci  jerry_value_t global_object = jerry_get_global_object ();
5276425bb815Sopenharmony_ci  jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "hidden_property");
5277425bb815Sopenharmony_ci
5278425bb815Sopenharmony_ci  bool delete_result = jerry_delete_internal_property (global_object, prop_name);
5279425bb815Sopenharmony_ci  /* use "delete_result" */
5280425bb815Sopenharmony_ci
5281425bb815Sopenharmony_ci  jerry_release_value (prop_name);
5282425bb815Sopenharmony_ci  jerry_release_value (global_object);
5283425bb815Sopenharmony_ci}
5284425bb815Sopenharmony_ci```
5285425bb815Sopenharmony_ci
5286425bb815Sopenharmony_ci**See also**
5287425bb815Sopenharmony_ci
5288425bb815Sopenharmony_ci- [jerry_has_internal_property](#jerry_has_internal_property)
5289425bb815Sopenharmony_ci- [jerry_get_internal_property](#jerry_get_internal_property)
5290425bb815Sopenharmony_ci- [jerry_set_internal_property](#jerry_set_internal_property)
5291425bb815Sopenharmony_ci
5292425bb815Sopenharmony_ci
5293425bb815Sopenharmony_ci## jerry_get_property
5294425bb815Sopenharmony_ci
5295425bb815Sopenharmony_ci**Summary**
5296425bb815Sopenharmony_ci
5297425bb815Sopenharmony_ciGet value of a property to the specified object with the given name.
5298425bb815Sopenharmony_ci
5299425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
5300425bb815Sopenharmony_ciis no longer needed.
5301425bb815Sopenharmony_ci
5302425bb815Sopenharmony_ci**Prototype**
5303425bb815Sopenharmony_ci
5304425bb815Sopenharmony_ci```c
5305425bb815Sopenharmony_cijerry_value_t
5306425bb815Sopenharmony_cijerry_get_property (const jerry_value_t obj_val,
5307425bb815Sopenharmony_ci                    const jerry_value_t prop_name_val);
5308425bb815Sopenharmony_ci```
5309425bb815Sopenharmony_ci
5310425bb815Sopenharmony_ci- `obj_val` - object value
5311425bb815Sopenharmony_ci- `prop_name_val` - property name
5312425bb815Sopenharmony_ci- return value
5313425bb815Sopenharmony_ci  - value of property, if success
5314425bb815Sopenharmony_ci  - thrown error, otherwise
5315425bb815Sopenharmony_ci
5316425bb815Sopenharmony_ci**Example**
5317425bb815Sopenharmony_ci
5318425bb815Sopenharmony_ci[doctest]: # ()
5319425bb815Sopenharmony_ci
5320425bb815Sopenharmony_ci```c
5321425bb815Sopenharmony_ci#include "jerryscript.h"
5322425bb815Sopenharmony_ci
5323425bb815Sopenharmony_ciint
5324425bb815Sopenharmony_cimain (void)
5325425bb815Sopenharmony_ci{
5326425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
5327425bb815Sopenharmony_ci
5328425bb815Sopenharmony_ci  jerry_value_t global_object = jerry_get_global_object ();
5329425bb815Sopenharmony_ci  jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "Object");
5330425bb815Sopenharmony_ci
5331425bb815Sopenharmony_ci  jerry_value_t prop_value = jerry_get_property (global_object, prop_name);
5332425bb815Sopenharmony_ci
5333425bb815Sopenharmony_ci  /* use "prop_value" then release it. */
5334425bb815Sopenharmony_ci
5335425bb815Sopenharmony_ci  jerry_release_value (prop_value);
5336425bb815Sopenharmony_ci  jerry_release_value (prop_name);
5337425bb815Sopenharmony_ci  jerry_release_value (global_object);
5338425bb815Sopenharmony_ci
5339425bb815Sopenharmony_ci  return 0;
5340425bb815Sopenharmony_ci}
5341425bb815Sopenharmony_ci```
5342425bb815Sopenharmony_ci
5343425bb815Sopenharmony_ci**See also**
5344425bb815Sopenharmony_ci
5345425bb815Sopenharmony_ci- [jerry_has_property](#jerry_has_property)
5346425bb815Sopenharmony_ci- [jerry_has_own_property](#jerry_has_own_property)
5347425bb815Sopenharmony_ci- [jerry_delete_property](#jerry_delete_property)
5348425bb815Sopenharmony_ci- [jerry_delete_property_by_index](#jerry_delete_property_by_index)
5349425bb815Sopenharmony_ci- [jerry_set_property](#jerry_set_property)
5350425bb815Sopenharmony_ci- [jerry_get_property_by_index](#jerry_get_property_by_index)
5351425bb815Sopenharmony_ci- [jerry_set_property_by_index](#jerry_set_property_by_index)
5352425bb815Sopenharmony_ci
5353425bb815Sopenharmony_ci
5354425bb815Sopenharmony_ci## jerry_get_property_by_index
5355425bb815Sopenharmony_ci
5356425bb815Sopenharmony_ci**Summary**
5357425bb815Sopenharmony_ci
5358425bb815Sopenharmony_ciGet value by an index from the specified object.
5359425bb815Sopenharmony_ci
5360425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
5361425bb815Sopenharmony_ciis no longer needed.
5362425bb815Sopenharmony_ci
5363425bb815Sopenharmony_ci**Prototype**
5364425bb815Sopenharmony_ci
5365425bb815Sopenharmony_ci```c
5366425bb815Sopenharmony_cijerry_value_t
5367425bb815Sopenharmony_cijerry_get_property_by_index (const jerry_value_t obj_val,
5368425bb815Sopenharmony_ci                             uint32_t index);
5369425bb815Sopenharmony_ci```
5370425bb815Sopenharmony_ci
5371425bb815Sopenharmony_ci- `obj_val` - object value
5372425bb815Sopenharmony_ci- `index` - index number
5373425bb815Sopenharmony_ci- return value
5374425bb815Sopenharmony_ci  - stored value on the specified index, if success
5375425bb815Sopenharmony_ci  - thrown exception, otherwise.
5376425bb815Sopenharmony_ci
5377425bb815Sopenharmony_ci**Example**
5378425bb815Sopenharmony_ci
5379425bb815Sopenharmony_ci```c
5380425bb815Sopenharmony_ci{
5381425bb815Sopenharmony_ci  jerry_value_t object;
5382425bb815Sopenharmony_ci
5383425bb815Sopenharmony_ci  ... // create or acquire object
5384425bb815Sopenharmony_ci
5385425bb815Sopenharmony_ci  jerry_value_t value = jerry_get_property_by_index (object, 5);
5386425bb815Sopenharmony_ci
5387425bb815Sopenharmony_ci  ...
5388425bb815Sopenharmony_ci
5389425bb815Sopenharmony_ci  jerry_release_value (value);
5390425bb815Sopenharmony_ci  jerry_release_value (object);
5391425bb815Sopenharmony_ci}
5392425bb815Sopenharmony_ci```
5393425bb815Sopenharmony_ci
5394425bb815Sopenharmony_ci**See also**
5395425bb815Sopenharmony_ci
5396425bb815Sopenharmony_ci- [jerry_has_property](#jerry_has_property)
5397425bb815Sopenharmony_ci- [jerry_has_own_property](#jerry_has_own_property)
5398425bb815Sopenharmony_ci- [jerry_delete_property](#jerry_delete_property)
5399425bb815Sopenharmony_ci- [jerry_delete_property_by_index](#jerry_delete_property_by_index)
5400425bb815Sopenharmony_ci- [jerry_get_property](#jerry_get_property)
5401425bb815Sopenharmony_ci- [jerry_set_property](#jerry_set_property)
5402425bb815Sopenharmony_ci- [jerry_set_property_by_index](#jerry_set_property_by_index)
5403425bb815Sopenharmony_ci
5404425bb815Sopenharmony_ci## jerry_get_internal_property
5405425bb815Sopenharmony_ci
5406425bb815Sopenharmony_ci**Summary**
5407425bb815Sopenharmony_ci
5408425bb815Sopenharmony_ciGet value of an internal property to the specified object with the given name.
5409425bb815Sopenharmony_ci
5410425bb815Sopenharmony_ci*Note*:
5411425bb815Sopenharmony_ci - Properties which were not created with [jerry_set_internal_property](#jerry_set_internal_property) are excluded
5412425bb815Sopenharmony_ci   during the operation.
5413425bb815Sopenharmony_ci - Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
5414425bb815Sopenharmony_ci   is no longer needed.
5415425bb815Sopenharmony_ci
5416425bb815Sopenharmony_ci**Prototype**
5417425bb815Sopenharmony_ci
5418425bb815Sopenharmony_ci```c
5419425bb815Sopenharmony_cijerry_value_t
5420425bb815Sopenharmony_cijerry_get_internal_property (const jerry_value_t obj_val,
5421425bb815Sopenharmony_ci                             const jerry_value_t prop_name_val);
5422425bb815Sopenharmony_ci```
5423425bb815Sopenharmony_ci
5424425bb815Sopenharmony_ci- `obj_val` - object value
5425425bb815Sopenharmony_ci- `prop_name_val` - property name
5426425bb815Sopenharmony_ci- return value
5427425bb815Sopenharmony_ci  - value of property, if the internal property exists
5428425bb815Sopenharmony_ci  - undefined value, if the, if the internal does not property exists
5429425bb815Sopenharmony_ci  - thrown error, otherwise
5430425bb815Sopenharmony_ci
5431425bb815Sopenharmony_ci*New in version 2.2*.
5432425bb815Sopenharmony_ci
5433425bb815Sopenharmony_ci**Example**
5434425bb815Sopenharmony_ci
5435425bb815Sopenharmony_ci[doctest]: # ()
5436425bb815Sopenharmony_ci
5437425bb815Sopenharmony_ci```c
5438425bb815Sopenharmony_ci#include "jerryscript.h"
5439425bb815Sopenharmony_ci
5440425bb815Sopenharmony_ciint
5441425bb815Sopenharmony_cimain (void)
5442425bb815Sopenharmony_ci{
5443425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
5444425bb815Sopenharmony_ci
5445425bb815Sopenharmony_ci  jerry_value_t global_object = jerry_get_global_object ();
5446425bb815Sopenharmony_ci  jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "hidden_property");
5447425bb815Sopenharmony_ci
5448425bb815Sopenharmony_ci  jerry_value_t prop_value = jerry_get_internal_property (global_object, prop_name);
5449425bb815Sopenharmony_ci
5450425bb815Sopenharmony_ci  /* use "prop_value" then release it. */
5451425bb815Sopenharmony_ci
5452425bb815Sopenharmony_ci  jerry_release_value (prop_value);
5453425bb815Sopenharmony_ci  jerry_release_value (prop_name);
5454425bb815Sopenharmony_ci  jerry_release_value (global_object);
5455425bb815Sopenharmony_ci
5456425bb815Sopenharmony_ci  return 0;
5457425bb815Sopenharmony_ci}
5458425bb815Sopenharmony_ci```
5459425bb815Sopenharmony_ci
5460425bb815Sopenharmony_ci**See also**
5461425bb815Sopenharmony_ci
5462425bb815Sopenharmony_ci- [jerry_has_internal_property](#jerry_has_internal_property)
5463425bb815Sopenharmony_ci- [jerry_delete_internal_property](#jerry_delete_internal_property)
5464425bb815Sopenharmony_ci- [jerry_set_internal_property](#jerry_set_internal_property)
5465425bb815Sopenharmony_ci
5466425bb815Sopenharmony_ci
5467425bb815Sopenharmony_ci## jerry_set_property
5468425bb815Sopenharmony_ci
5469425bb815Sopenharmony_ci**Summary**
5470425bb815Sopenharmony_ci
5471425bb815Sopenharmony_ciSet a property to the specified object with the given name.
5472425bb815Sopenharmony_ci
5473425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
5474425bb815Sopenharmony_ciis no longer needed.
5475425bb815Sopenharmony_ci
5476425bb815Sopenharmony_ci**Prototype**
5477425bb815Sopenharmony_ci
5478425bb815Sopenharmony_ci```c
5479425bb815Sopenharmony_cijerry_value_t
5480425bb815Sopenharmony_cijerry_set_property (const jerry_value_t obj_val,
5481425bb815Sopenharmony_ci                    const jerry_value_t prop_name_val,
5482425bb815Sopenharmony_ci                    const jerry_value_t value_to_set)
5483425bb815Sopenharmony_ci```
5484425bb815Sopenharmony_ci
5485425bb815Sopenharmony_ci- `obj_val` - object value
5486425bb815Sopenharmony_ci- `prop_name_val` - property name
5487425bb815Sopenharmony_ci- `value_to_set` - value to set
5488425bb815Sopenharmony_ci- return value
5489425bb815Sopenharmony_ci  - true, if success
5490425bb815Sopenharmony_ci  - thrown error, otherwise
5491425bb815Sopenharmony_ci
5492425bb815Sopenharmony_ci**Example**
5493425bb815Sopenharmony_ci
5494425bb815Sopenharmony_ci```c
5495425bb815Sopenharmony_ci{
5496425bb815Sopenharmony_ci  jerry_value_t value_to_set;
5497425bb815Sopenharmony_ci
5498425bb815Sopenharmony_ci  ... // create or acquire value to set
5499425bb815Sopenharmony_ci
5500425bb815Sopenharmony_ci  jerry_value_t glob_obj = jerry_get_global_object ();
5501425bb815Sopenharmony_ci  jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "my_prop");
5502425bb815Sopenharmony_ci
5503425bb815Sopenharmony_ci  jerry_value_t set_result = jerry_set_property (glob_obj, prop_name, value_to_set);
5504425bb815Sopenharmony_ci
5505425bb815Sopenharmony_ci  ... // check result of property set call
5506425bb815Sopenharmony_ci
5507425bb815Sopenharmony_ci  jerry_release_value (set_result);
5508425bb815Sopenharmony_ci  jerry_release_value (prop_name);
5509425bb815Sopenharmony_ci
5510425bb815Sopenharmony_ci  ...
5511425bb815Sopenharmony_ci
5512425bb815Sopenharmony_ci  jerry_release_value (value_to_set);
5513425bb815Sopenharmony_ci  jerry_release_value (glob_obj);
5514425bb815Sopenharmony_ci}
5515425bb815Sopenharmony_ci```
5516425bb815Sopenharmony_ci
5517425bb815Sopenharmony_ci**See also**
5518425bb815Sopenharmony_ci
5519425bb815Sopenharmony_ci- [jerry_has_property](#jerry_has_property)
5520425bb815Sopenharmony_ci- [jerry_has_own_property](#jerry_has_own_property)
5521425bb815Sopenharmony_ci- [jerry_delete_property](#jerry_delete_property)
5522425bb815Sopenharmony_ci- [jerry_delete_property_by_index](#jerry_delete_property_by_index)
5523425bb815Sopenharmony_ci- [jerry_get_property](#jerry_get_property)
5524425bb815Sopenharmony_ci- [jerry_get_property_by_index](#jerry_get_property_by_index)
5525425bb815Sopenharmony_ci- [jerry_set_property_by_index](#jerry_set_property_by_index)
5526425bb815Sopenharmony_ci
5527425bb815Sopenharmony_ci
5528425bb815Sopenharmony_ci## jerry_set_property_by_index
5529425bb815Sopenharmony_ci
5530425bb815Sopenharmony_ci**Summary**
5531425bb815Sopenharmony_ci
5532425bb815Sopenharmony_ciSet indexed value in the specified object
5533425bb815Sopenharmony_ci
5534425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
5535425bb815Sopenharmony_ciis no longer needed.
5536425bb815Sopenharmony_ci
5537425bb815Sopenharmony_ci**Prototype**
5538425bb815Sopenharmony_ci
5539425bb815Sopenharmony_ci```c
5540425bb815Sopenharmony_cijerry_value_t
5541425bb815Sopenharmony_cijerry_set_property_by_index (const jerry_value_t obj_val,
5542425bb815Sopenharmony_ci                             uint32_t index,
5543425bb815Sopenharmony_ci                             const jerry_value_t value_to_set);
5544425bb815Sopenharmony_ci```
5545425bb815Sopenharmony_ci
5546425bb815Sopenharmony_ci- `obj_val` - object value
5547425bb815Sopenharmony_ci- `index` - index number
5548425bb815Sopenharmony_ci- `value_to_set` - value to set
5549425bb815Sopenharmony_ci- return value
5550425bb815Sopenharmony_ci  - true, if field value was set successfully
5551425bb815Sopenharmony_ci  - thrown exception, otherwise
5552425bb815Sopenharmony_ci
5553425bb815Sopenharmony_ci**Example**
5554425bb815Sopenharmony_ci
5555425bb815Sopenharmony_ci```c
5556425bb815Sopenharmony_ci{
5557425bb815Sopenharmony_ci  jerry_value_t object;
5558425bb815Sopenharmony_ci  jerry_value_t value_to_set;
5559425bb815Sopenharmony_ci
5560425bb815Sopenharmony_ci  ... // create or acquire object and value to set
5561425bb815Sopenharmony_ci
5562425bb815Sopenharmony_ci  jerry_value_t ret_val = jerry_set_property_by_index (object, 5, value_to_set);
5563425bb815Sopenharmony_ci
5564425bb815Sopenharmony_ci  ...
5565425bb815Sopenharmony_ci
5566425bb815Sopenharmony_ci  jerry_release_value (value_to_set);
5567425bb815Sopenharmony_ci  jerry_release_value (ret_val);
5568425bb815Sopenharmony_ci  jerry_release_value (object);
5569425bb815Sopenharmony_ci}
5570425bb815Sopenharmony_ci```
5571425bb815Sopenharmony_ci
5572425bb815Sopenharmony_ci**See also**
5573425bb815Sopenharmony_ci
5574425bb815Sopenharmony_ci- [jerry_has_property](#jerry_has_property)
5575425bb815Sopenharmony_ci- [jerry_has_own_property](#jerry_has_own_property)
5576425bb815Sopenharmony_ci- [jerry_delete_property](#jerry_delete_property)
5577425bb815Sopenharmony_ci- [jerry_delete_property_by_index](#jerry_delete_property_by_index)
5578425bb815Sopenharmony_ci- [jerry_get_property](#jerry_get_property)
5579425bb815Sopenharmony_ci- [jerry_set_property](#jerry_set_property)
5580425bb815Sopenharmony_ci- [jerry_get_property_by_index](#jerry_get_property_by_index)
5581425bb815Sopenharmony_ci
5582425bb815Sopenharmony_ci
5583425bb815Sopenharmony_ci## jerry_set_internal_property
5584425bb815Sopenharmony_ci
5585425bb815Sopenharmony_ci**Summary**
5586425bb815Sopenharmony_ci
5587425bb815Sopenharmony_ciSet an internal property to the specified object with the given name.
5588425bb815Sopenharmony_ci
5589425bb815Sopenharmony_ci*Note*:
5590425bb815Sopenharmony_ci - The property cannot be accessed from the JavaScript context, only from the public API.
5591425bb815Sopenharmony_ci - It is different from [jerry_set_object_native_pointer](#jerry_set_object_native_pointer) in that any jerry API value
5592425bb815Sopenharmony_ci   can be hidden from the JavaScript context, not only native pointers.
5593425bb815Sopenharmony_ci
5594425bb815Sopenharmony_ci**Prototype**
5595425bb815Sopenharmony_ci
5596425bb815Sopenharmony_ci```c
5597425bb815Sopenharmony_cibool
5598425bb815Sopenharmony_cijerry_set_internal_property (const jerry_value_t obj_val,
5599425bb815Sopenharmony_ci                             const jerry_value_t prop_name_val,
5600425bb815Sopenharmony_ci                             const jerry_value_t value_to_set)
5601425bb815Sopenharmony_ci```
5602425bb815Sopenharmony_ci
5603425bb815Sopenharmony_ci- `obj_val` - object value
5604425bb815Sopenharmony_ci- `prop_name_val` - property name
5605425bb815Sopenharmony_ci- `value_to_set` - value to set
5606425bb815Sopenharmony_ci- return value
5607425bb815Sopenharmony_ci  - true, if success
5608425bb815Sopenharmony_ci  - thrown error, otherwise
5609425bb815Sopenharmony_ci
5610425bb815Sopenharmony_ci*New in version 2.2*.
5611425bb815Sopenharmony_ci
5612425bb815Sopenharmony_ci**Example**
5613425bb815Sopenharmony_ci
5614425bb815Sopenharmony_ci[doctest]: # ()
5615425bb815Sopenharmony_ci
5616425bb815Sopenharmony_ci```c
5617425bb815Sopenharmony_ci#include "jerryscript.h"
5618425bb815Sopenharmony_ci
5619425bb815Sopenharmony_ciint
5620425bb815Sopenharmony_cimain (void)
5621425bb815Sopenharmony_ci{
5622425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
5623425bb815Sopenharmony_ci
5624425bb815Sopenharmony_ci  jerry_value_t global_object = jerry_get_global_object ();
5625425bb815Sopenharmony_ci  jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "hidden_property");
5626425bb815Sopenharmony_ci  jerry_value_t value_to_set = jerry_create_number (5);
5627425bb815Sopenharmony_ci
5628425bb815Sopenharmony_ci  bool set_result = jerry_set_internal_property (global_object, prop_name, value_to_set);
5629425bb815Sopenharmony_ci
5630425bb815Sopenharmony_ci  /* check the result of internal property set call */
5631425bb815Sopenharmony_ci
5632425bb815Sopenharmony_ci  jerry_release_value (value_to_set);
5633425bb815Sopenharmony_ci  jerry_release_value (prop_name);
5634425bb815Sopenharmony_ci  jerry_release_value (global_object);
5635425bb815Sopenharmony_ci
5636425bb815Sopenharmony_ci  return 0;
5637425bb815Sopenharmony_ci}
5638425bb815Sopenharmony_ci```
5639425bb815Sopenharmony_ci
5640425bb815Sopenharmony_ci**See also**
5641425bb815Sopenharmony_ci
5642425bb815Sopenharmony_ci- [jerry_has_internal_property](#jerry_has_internal_property)
5643425bb815Sopenharmony_ci- [jerry_delete_internal_property](#jerry_delete_internal_property)
5644425bb815Sopenharmony_ci- [jerry_get_internal_property](#jerry_get_internal_property)
5645425bb815Sopenharmony_ci
5646425bb815Sopenharmony_ci
5647425bb815Sopenharmony_ci## jerry_init_property_descriptor_fields
5648425bb815Sopenharmony_ci
5649425bb815Sopenharmony_ci**Summary**
5650425bb815Sopenharmony_ci
5651425bb815Sopenharmony_ciInitialize property descriptor. This means that all fields in the `jerry_property_descriptor_t`
5652425bb815Sopenharmony_cistruct will be set to zero or false depending on the field's type.
5653425bb815Sopenharmony_ci
5654425bb815Sopenharmony_ci**Prototype**
5655425bb815Sopenharmony_ci
5656425bb815Sopenharmony_ci```c
5657425bb815Sopenharmony_civoid
5658425bb815Sopenharmony_cijerry_init_property_descriptor_fields (jerry_property_descriptor_t *prop_desc_p);
5659425bb815Sopenharmony_ci```
5660425bb815Sopenharmony_ci
5661425bb815Sopenharmony_ci- `prop_desc_p` - pointer to property descriptor
5662425bb815Sopenharmony_ci
5663425bb815Sopenharmony_ci**Example**
5664425bb815Sopenharmony_ci
5665425bb815Sopenharmony_ci```c
5666425bb815Sopenharmony_ci{
5667425bb815Sopenharmony_ci  jerry_property_descriptor_t prop_desc;
5668425bb815Sopenharmony_ci  jerry_init_property_descriptor_fields (&prop_desc);
5669425bb815Sopenharmony_ci
5670425bb815Sopenharmony_ci  ... // usage of prop_desc
5671425bb815Sopenharmony_ci
5672425bb815Sopenharmony_ci  jerry_free_property_descriptor_fields (&prop_desc);
5673425bb815Sopenharmony_ci}
5674425bb815Sopenharmony_ci```
5675425bb815Sopenharmony_ci
5676425bb815Sopenharmony_ciFor a more complete example see [jerry_define_own_property](#jerry_define_own_property).
5677425bb815Sopenharmony_ci
5678425bb815Sopenharmony_ci**See also**
5679425bb815Sopenharmony_ci
5680425bb815Sopenharmony_ci- [jerry_property_descriptor_t](#jerry_property_descriptor_t)
5681425bb815Sopenharmony_ci- [jerry_define_own_property](#jerry_define_own_property)
5682425bb815Sopenharmony_ci- [jerry_get_own_property_descriptor](#jerry_get_own_property_descriptor)
5683425bb815Sopenharmony_ci- [jerry_free_property_descriptor_fields](#jerry_free_property_descriptor_fields)
5684425bb815Sopenharmony_ci
5685425bb815Sopenharmony_ci
5686425bb815Sopenharmony_ci## jerry_define_own_property
5687425bb815Sopenharmony_ci
5688425bb815Sopenharmony_ci**Summary**
5689425bb815Sopenharmony_ci
5690425bb815Sopenharmony_ciDefine a property to the specified object with the given name.
5691425bb815Sopenharmony_ci
5692425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
5693425bb815Sopenharmony_ciis no longer needed.
5694425bb815Sopenharmony_ci
5695425bb815Sopenharmony_ci**Prototype**
5696425bb815Sopenharmony_ci
5697425bb815Sopenharmony_ci```c
5698425bb815Sopenharmony_cijerry_value_t
5699425bb815Sopenharmony_cijerry_define_own_property (const jerry_value_t obj_val,
5700425bb815Sopenharmony_ci                           const jerry_value_t prop_name_val,
5701425bb815Sopenharmony_ci                           const jerry_property_descriptor_t *prop_desc_p);
5702425bb815Sopenharmony_ci```
5703425bb815Sopenharmony_ci
5704425bb815Sopenharmony_ci- `obj_val` - target object where the property should be registered
5705425bb815Sopenharmony_ci- `prop_name_val` - property name
5706425bb815Sopenharmony_ci- `prop_desc_p` - pointer to property descriptor
5707425bb815Sopenharmony_ci- return value
5708425bb815Sopenharmony_ci  - true, if success
5709425bb815Sopenharmony_ci  - thrown error, otherwise
5710425bb815Sopenharmony_ci
5711425bb815Sopenharmony_ci**Example**
5712425bb815Sopenharmony_ci
5713425bb815Sopenharmony_ciRegistering a simple value property via the `jerry_define_own_property` method:
5714425bb815Sopenharmony_ci
5715425bb815Sopenharmony_ci[doctest]: # (name="02.API-REFERENCE-define-property.c")
5716425bb815Sopenharmony_ci
5717425bb815Sopenharmony_ci```c
5718425bb815Sopenharmony_ci#include "jerryscript.h"
5719425bb815Sopenharmony_ci
5720425bb815Sopenharmony_ciint
5721425bb815Sopenharmony_cimain (void)
5722425bb815Sopenharmony_ci{
5723425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
5724425bb815Sopenharmony_ci
5725425bb815Sopenharmony_ci  jerry_value_t global_obj_val = jerry_get_global_object ();
5726425bb815Sopenharmony_ci
5727425bb815Sopenharmony_ci  // configure the property
5728425bb815Sopenharmony_ci  jerry_property_descriptor_t prop_desc;
5729425bb815Sopenharmony_ci  jerry_init_property_descriptor_fields (&prop_desc);
5730425bb815Sopenharmony_ci
5731425bb815Sopenharmony_ci  jerry_value_t value_to_set;
5732425bb815Sopenharmony_ci
5733425bb815Sopenharmony_ci  // create or acquire value to set
5734425bb815Sopenharmony_ci  // For example:
5735425bb815Sopenharmony_ci  value_to_set = jerry_create_number (33);
5736425bb815Sopenharmony_ci
5737425bb815Sopenharmony_ci  // set the property descriptor fields:
5738425bb815Sopenharmony_ci  // set the "is_value_defined" field to "true" to indicate the "value"
5739425bb815Sopenharmony_ci  //  field should be used during the property registration.
5740425bb815Sopenharmony_ci  prop_desc.is_value_defined = true;
5741425bb815Sopenharmony_ci
5742425bb815Sopenharmony_ci  // set the "value" field to the number 33
5743425bb815Sopenharmony_ci  prop_desc.value = value_to_set;
5744425bb815Sopenharmony_ci
5745425bb815Sopenharmony_ci  // add the property as "my_prop" for the global object
5746425bb815Sopenharmony_ci  jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "my_prop");
5747425bb815Sopenharmony_ci  jerry_value_t return_value = jerry_define_own_property (global_obj_val, prop_name, &prop_desc);
5748425bb815Sopenharmony_ci  if (jerry_value_is_error (return_value))
5749425bb815Sopenharmony_ci  {
5750425bb815Sopenharmony_ci    // there was an error
5751425bb815Sopenharmony_ci  }
5752425bb815Sopenharmony_ci
5753425bb815Sopenharmony_ci  // if there was no error at this point the global object should have a "my_prop" property
5754425bb815Sopenharmony_ci
5755425bb815Sopenharmony_ci  jerry_release_value (return_value);
5756425bb815Sopenharmony_ci  jerry_release_value (prop_name);
5757425bb815Sopenharmony_ci
5758425bb815Sopenharmony_ci  jerry_free_property_descriptor_fields (&prop_desc);
5759425bb815Sopenharmony_ci  jerry_release_value (global_obj_val);
5760425bb815Sopenharmony_ci
5761425bb815Sopenharmony_ci  jerry_cleanup ();
5762425bb815Sopenharmony_ci  return 0;
5763425bb815Sopenharmony_ci}
5764425bb815Sopenharmony_ci```
5765425bb815Sopenharmony_ci
5766425bb815Sopenharmony_ci
5767425bb815Sopenharmony_ciRegistering a getter/setter property via the `jerry_define_own_property` method:
5768425bb815Sopenharmony_ci
5769425bb815Sopenharmony_ci[doctest]: # (name="02.API-REFERENCE-define-property-getset.c")
5770425bb815Sopenharmony_ci
5771425bb815Sopenharmony_ci```c
5772425bb815Sopenharmony_ci#include <stdio.h>
5773425bb815Sopenharmony_ci#include <string.h>
5774425bb815Sopenharmony_ci#include "jerryscript.h"
5775425bb815Sopenharmony_ci
5776425bb815Sopenharmony_cistatic int counter = 0;
5777425bb815Sopenharmony_ci
5778425bb815Sopenharmony_cistatic jerry_value_t
5779425bb815Sopenharmony_cimethod_getter (const jerry_value_t this_obj,
5780425bb815Sopenharmony_ci               const jerry_value_t func_obj,
5781425bb815Sopenharmony_ci               const jerry_value_t args[],
5782425bb815Sopenharmony_ci               const jerry_length_t argc)
5783425bb815Sopenharmony_ci{
5784425bb815Sopenharmony_ci  counter++;
5785425bb815Sopenharmony_ci  printf("Getter called, returning: %d\n", counter);
5786425bb815Sopenharmony_ci
5787425bb815Sopenharmony_ci  return jerry_create_number (counter);
5788425bb815Sopenharmony_ci}
5789425bb815Sopenharmony_ci
5790425bb815Sopenharmony_cistatic jerry_value_t
5791425bb815Sopenharmony_cimethod_setter (const jerry_value_t this_obj,
5792425bb815Sopenharmony_ci               const jerry_value_t func_obj,
5793425bb815Sopenharmony_ci               const jerry_value_t args[],
5794425bb815Sopenharmony_ci               const jerry_length_t argc)
5795425bb815Sopenharmony_ci{
5796425bb815Sopenharmony_ci  // Note: the arguments count and type should be checked
5797425bb815Sopenharmony_ci  // in this example it is ommitted!
5798425bb815Sopenharmony_ci
5799425bb815Sopenharmony_ci  double new_value = jerry_get_number_value (args[0]);
5800425bb815Sopenharmony_ci  counter = (int) new_value;
5801425bb815Sopenharmony_ci
5802425bb815Sopenharmony_ci  printf("Setter called, setting: %d\n", counter);
5803425bb815Sopenharmony_ci
5804425bb815Sopenharmony_ci  return jerry_create_undefined ();
5805425bb815Sopenharmony_ci}
5806425bb815Sopenharmony_ci
5807425bb815Sopenharmony_ciint
5808425bb815Sopenharmony_cimain (void)
5809425bb815Sopenharmony_ci{
5810425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
5811425bb815Sopenharmony_ci
5812425bb815Sopenharmony_ci  jerry_value_t global_obj_val = jerry_get_global_object ();
5813425bb815Sopenharmony_ci
5814425bb815Sopenharmony_ci  // configure the property
5815425bb815Sopenharmony_ci  jerry_property_descriptor_t prop_desc;
5816425bb815Sopenharmony_ci  jerry_init_property_descriptor_fields (&prop_desc);
5817425bb815Sopenharmony_ci
5818425bb815Sopenharmony_ci  // set the property descriptor fields:
5819425bb815Sopenharmony_ci
5820425bb815Sopenharmony_ci  prop_desc.is_get_defined = true;
5821425bb815Sopenharmony_ci  prop_desc.getter = jerry_create_external_function (method_getter);
5822425bb815Sopenharmony_ci  prop_desc.is_set_defined = true;
5823425bb815Sopenharmony_ci  prop_desc.setter = jerry_create_external_function (method_setter);
5824425bb815Sopenharmony_ci
5825425bb815Sopenharmony_ci  // add the property as "my_prop" for the global object
5826425bb815Sopenharmony_ci  jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "my_prop");
5827425bb815Sopenharmony_ci  jerry_value_t return_value = jerry_define_own_property (global_obj_val, prop_name, &prop_desc);
5828425bb815Sopenharmony_ci  if (jerry_value_is_error (return_value))
5829425bb815Sopenharmony_ci  {
5830425bb815Sopenharmony_ci    // there was an error
5831425bb815Sopenharmony_ci  }
5832425bb815Sopenharmony_ci
5833425bb815Sopenharmony_ci  // if there was no error at this point the global object should have a "my_prop" property
5834425bb815Sopenharmony_ci
5835425bb815Sopenharmony_ci  jerry_release_value (return_value);
5836425bb815Sopenharmony_ci  jerry_release_value (prop_name);
5837425bb815Sopenharmony_ci
5838425bb815Sopenharmony_ci  jerry_free_property_descriptor_fields (&prop_desc);
5839425bb815Sopenharmony_ci  jerry_release_value (global_obj_val);
5840425bb815Sopenharmony_ci
5841425bb815Sopenharmony_ci  // run an example js code to use the getter/setters
5842425bb815Sopenharmony_ci
5843425bb815Sopenharmony_ci  const char *src_p = "this.my_prop; this.my_prop; this.my_prop = 4; this.my_prop";
5844425bb815Sopenharmony_ci  jerry_value_t eval_result = jerry_eval ((const jerry_char_t *) src_p, strlen (src_p), JERRY_PARSE_NO_OPTS);
5845425bb815Sopenharmony_ci
5846425bb815Sopenharmony_ci  // "eval_result" is the last result of "this.my_prop" that is "5" currently.
5847425bb815Sopenharmony_ci  double result_number = jerry_get_number_value (eval_result);
5848425bb815Sopenharmony_ci  printf("output: %lf\n", result_number);
5849425bb815Sopenharmony_ci
5850425bb815Sopenharmony_ci  jerry_cleanup ();
5851425bb815Sopenharmony_ci
5852425bb815Sopenharmony_ci  return result_number != 5.0;
5853425bb815Sopenharmony_ci}
5854425bb815Sopenharmony_ci```
5855425bb815Sopenharmony_ci
5856425bb815Sopenharmony_ci**See also**
5857425bb815Sopenharmony_ci
5858425bb815Sopenharmony_ci- [jerry_property_descriptor_t](#jerry_property_descriptor_t)
5859425bb815Sopenharmony_ci- [jerry_init_property_descriptor_fields](#jerry_init_property_descriptor_fields)
5860425bb815Sopenharmony_ci- [jerry_get_own_property_descriptor](#jerry_get_own_property_descriptor)
5861425bb815Sopenharmony_ci- [jerry_free_property_descriptor_fields](#jerry_free_property_descriptor_fields)
5862425bb815Sopenharmony_ci
5863425bb815Sopenharmony_ci
5864425bb815Sopenharmony_ci## jerry_get_own_property_descriptor
5865425bb815Sopenharmony_ci
5866425bb815Sopenharmony_ci**Summary**
5867425bb815Sopenharmony_ci
5868425bb815Sopenharmony_ciConstruct property descriptor from specified property.
5869425bb815Sopenharmony_ci
5870425bb815Sopenharmony_ci**Prototype**
5871425bb815Sopenharmony_ci
5872425bb815Sopenharmony_ci```c
5873425bb815Sopenharmony_cibool
5874425bb815Sopenharmony_cijerry_get_own_property_descriptor (const jerry_value_t  obj_val,
5875425bb815Sopenharmony_ci                                   const jerry_value_t prop_name_val,
5876425bb815Sopenharmony_ci                                   jerry_property_descriptor_t *prop_desc_p);
5877425bb815Sopenharmony_ci```
5878425bb815Sopenharmony_ci
5879425bb815Sopenharmony_ci- `obj_val` - object value
5880425bb815Sopenharmony_ci- `prop_name_val` - property name
5881425bb815Sopenharmony_ci- `prop_desc_p` - pointer to property descriptor
5882425bb815Sopenharmony_ci- return value
5883425bb815Sopenharmony_ci
5884425bb815Sopenharmony_ci**Example**
5885425bb815Sopenharmony_ci
5886425bb815Sopenharmony_ci```c
5887425bb815Sopenharmony_ci{
5888425bb815Sopenharmony_ci  jerry_value_t global_obj_val = jerry_get_global_object ();
5889425bb815Sopenharmony_ci
5890425bb815Sopenharmony_ci  jerry_property_descriptor_t prop_desc;
5891425bb815Sopenharmony_ci  jerry_init_property_descriptor_fields (&prop_desc);
5892425bb815Sopenharmony_ci
5893425bb815Sopenharmony_ci  jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "my_prop");
5894425bb815Sopenharmony_ci  jerry_get_own_property_descriptor (global_obj_val, prop_name, &prop_desc);
5895425bb815Sopenharmony_ci  jerry_release_value (prop_name);
5896425bb815Sopenharmony_ci
5897425bb815Sopenharmony_ci  ... // usage of property descriptor
5898425bb815Sopenharmony_ci
5899425bb815Sopenharmony_ci  jerry_free_property_descriptor_fields (&prop_desc);
5900425bb815Sopenharmony_ci  jerry_release_value (global_obj_val);
5901425bb815Sopenharmony_ci}
5902425bb815Sopenharmony_ci```
5903425bb815Sopenharmony_ci
5904425bb815Sopenharmony_ci**See also**
5905425bb815Sopenharmony_ci
5906425bb815Sopenharmony_ci- [jerry_property_descriptor_t](#jerry_property_descriptor_t)
5907425bb815Sopenharmony_ci- [jerry_init_property_descriptor_fields](#jerry_init_property_descriptor_fields)
5908425bb815Sopenharmony_ci- [jerry_define_own_property](#jerry_define_own_property)
5909425bb815Sopenharmony_ci- [jerry_free_property_descriptor_fields](#jerry_free_property_descriptor_fields)
5910425bb815Sopenharmony_ci
5911425bb815Sopenharmony_ci
5912425bb815Sopenharmony_ci## jerry_free_property_descriptor_fields
5913425bb815Sopenharmony_ci
5914425bb815Sopenharmony_ci**Summary**
5915425bb815Sopenharmony_ci
5916425bb815Sopenharmony_ciFree fields of property descriptor (setter, getter and value).
5917425bb815Sopenharmony_ci
5918425bb815Sopenharmony_ci**Prototype**
5919425bb815Sopenharmony_ci
5920425bb815Sopenharmony_ci```c
5921425bb815Sopenharmony_civoid
5922425bb815Sopenharmony_cijerry_free_property_descriptor_fields (const jerry_property_descriptor_t *prop_desc_p);
5923425bb815Sopenharmony_ci```
5924425bb815Sopenharmony_ci
5925425bb815Sopenharmony_ci- `prop_desc_p` - pointer to property descriptor
5926425bb815Sopenharmony_ci
5927425bb815Sopenharmony_ci**Example**
5928425bb815Sopenharmony_ci
5929425bb815Sopenharmony_ci```c
5930425bb815Sopenharmony_ci{
5931425bb815Sopenharmony_ci  jerry_property_descriptor_t prop_desc;
5932425bb815Sopenharmony_ci  jerry_init_property_descriptor_fields (&prop_desc);
5933425bb815Sopenharmony_ci
5934425bb815Sopenharmony_ci  ... // usage of property descriptor
5935425bb815Sopenharmony_ci
5936425bb815Sopenharmony_ci  jerry_free_property_descriptor_fields (&prop_desc);
5937425bb815Sopenharmony_ci}
5938425bb815Sopenharmony_ci```
5939425bb815Sopenharmony_ci
5940425bb815Sopenharmony_ci**See also**
5941425bb815Sopenharmony_ci
5942425bb815Sopenharmony_ci- [jerry_init_property_descriptor_fields](#jerry_init_property_descriptor_fields)
5943425bb815Sopenharmony_ci- [jerry_define_own_property](#jerry_define_own_property)
5944425bb815Sopenharmony_ci- [jerry_get_own_property_descriptor](#jerry_get_own_property_descriptor)
5945425bb815Sopenharmony_ci
5946425bb815Sopenharmony_ci
5947425bb815Sopenharmony_ci## jerry_call_function
5948425bb815Sopenharmony_ci
5949425bb815Sopenharmony_ci**Summary**
5950425bb815Sopenharmony_ci
5951425bb815Sopenharmony_ciCall function specified by a function value. Error flag must
5952425bb815Sopenharmony_cinot be set for any arguments of this function. Value of `this`
5953425bb815Sopenharmony_ciparameter should be set to `undefined` for non-method calls.
5954425bb815Sopenharmony_ci
5955425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
5956425bb815Sopenharmony_ciis no longer needed.
5957425bb815Sopenharmony_ci
5958425bb815Sopenharmony_ci**Prototype**
5959425bb815Sopenharmony_ci
5960425bb815Sopenharmony_ci```c
5961425bb815Sopenharmony_cijerry_value_t
5962425bb815Sopenharmony_cijerry_call_function (const jerry_value_t func_obj_val,
5963425bb815Sopenharmony_ci                     const jerry_value_t this_val,
5964425bb815Sopenharmony_ci                     const jerry_value_t args_p[],
5965425bb815Sopenharmony_ci                     jerry_size_t args_count);
5966425bb815Sopenharmony_ci```
5967425bb815Sopenharmony_ci
5968425bb815Sopenharmony_ci- `func_obj_val` - the function object to call
5969425bb815Sopenharmony_ci- `this_val` - object for 'this' binding
5970425bb815Sopenharmony_ci- `args_p` - function's call arguments
5971425bb815Sopenharmony_ci- `args_count` - number of arguments
5972425bb815Sopenharmony_ci- return value - returned jerry value of the called function
5973425bb815Sopenharmony_ci
5974425bb815Sopenharmony_ci**Example**
5975425bb815Sopenharmony_ci
5976425bb815Sopenharmony_ci```c
5977425bb815Sopenharmony_ci{
5978425bb815Sopenharmony_ci  jerry_value_t target_function;
5979425bb815Sopenharmony_ci
5980425bb815Sopenharmony_ci  ... // create or get "target_function"
5981425bb815Sopenharmony_ci
5982425bb815Sopenharmony_ci  if (jerry_value_is_function (target_function))
5983425bb815Sopenharmony_ci  {
5984425bb815Sopenharmony_ci    jerry_value_t this_val = jerry_create_undefined ();
5985425bb815Sopenharmony_ci    jerry_value_t ret_val = jerry_call_function (target_function, this_val, NULL, 0);
5986425bb815Sopenharmony_ci
5987425bb815Sopenharmony_ci    if (!jerry_value_is_error (ret_val))
5988425bb815Sopenharmony_ci    {
5989425bb815Sopenharmony_ci      ... // handle return value
5990425bb815Sopenharmony_ci    }
5991425bb815Sopenharmony_ci
5992425bb815Sopenharmony_ci    jerry_release_value (ret_val);
5993425bb815Sopenharmony_ci    jerry_release_value (this_val);
5994425bb815Sopenharmony_ci  }
5995425bb815Sopenharmony_ci
5996425bb815Sopenharmony_ci  jerry_release_value (target_function);
5997425bb815Sopenharmony_ci}
5998425bb815Sopenharmony_ci```
5999425bb815Sopenharmony_ci
6000425bb815Sopenharmony_ci**See also**
6001425bb815Sopenharmony_ci
6002425bb815Sopenharmony_ci- [jerry_is_function](#jerry_is_function)
6003425bb815Sopenharmony_ci- [jerry_create_external_function](#jerry_create_external_function)
6004425bb815Sopenharmony_ci
6005425bb815Sopenharmony_ci
6006425bb815Sopenharmony_ci## jerry_construct_object
6007425bb815Sopenharmony_ci
6008425bb815Sopenharmony_ci**Summary**
6009425bb815Sopenharmony_ci
6010425bb815Sopenharmony_ciConstruct object, invoking specified function object as constructor.
6011425bb815Sopenharmony_ciError flag must not be set for any arguments of this function.
6012425bb815Sopenharmony_ci
6013425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
6014425bb815Sopenharmony_ciis no longer needed.
6015425bb815Sopenharmony_ci
6016425bb815Sopenharmony_ci**Prototype**
6017425bb815Sopenharmony_ci
6018425bb815Sopenharmony_ci```c
6019425bb815Sopenharmony_cijerry_value_t
6020425bb815Sopenharmony_cijerry_construct_object (const jerry_value_t func_obj_val,
6021425bb815Sopenharmony_ci                        const jerry_value_t args_p[],
6022425bb815Sopenharmony_ci                        jerry_size_t args_count);
6023425bb815Sopenharmony_ci```
6024425bb815Sopenharmony_ci
6025425bb815Sopenharmony_ci- `func_obj_val` - function object to call
6026425bb815Sopenharmony_ci- `args_p` - function's call arguments
6027425bb815Sopenharmony_ci- `args_count` - number of arguments
6028425bb815Sopenharmony_ci- return value - returned value of the invoked constructor
6029425bb815Sopenharmony_ci
6030425bb815Sopenharmony_ci**Example**
6031425bb815Sopenharmony_ci
6032425bb815Sopenharmony_ci```c
6033425bb815Sopenharmony_ci{
6034425bb815Sopenharmony_ci  jerry_value_t val;
6035425bb815Sopenharmony_ci
6036425bb815Sopenharmony_ci  ... // receiving val
6037425bb815Sopenharmony_ci
6038425bb815Sopenharmony_ci  if (jerry_is_constructor (val))
6039425bb815Sopenharmony_ci  {
6040425bb815Sopenharmony_ci    jerry_value_t ret_val = jerry_construct_object (val, NULL, 0);
6041425bb815Sopenharmony_ci
6042425bb815Sopenharmony_ci    if (!jerry_value_is_error (ret_val))
6043425bb815Sopenharmony_ci    {
6044425bb815Sopenharmony_ci      ... // handle return value
6045425bb815Sopenharmony_ci    }
6046425bb815Sopenharmony_ci
6047425bb815Sopenharmony_ci    jerry_release_value (ret_val);
6048425bb815Sopenharmony_ci  }
6049425bb815Sopenharmony_ci}
6050425bb815Sopenharmony_ci```
6051425bb815Sopenharmony_ci
6052425bb815Sopenharmony_ci**See also**
6053425bb815Sopenharmony_ci
6054425bb815Sopenharmony_ci - [jerry_is_constructor](#jerry_is_constructor)
6055425bb815Sopenharmony_ci
6056425bb815Sopenharmony_ci
6057425bb815Sopenharmony_ci## jerry_get_object_keys
6058425bb815Sopenharmony_ci
6059425bb815Sopenharmony_ci**Summary**
6060425bb815Sopenharmony_ci
6061425bb815Sopenharmony_ciGet keys of the specified object value.
6062425bb815Sopenharmony_ci
6063425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
6064425bb815Sopenharmony_ciis no longer needed.
6065425bb815Sopenharmony_ci
6066425bb815Sopenharmony_ci**Prototype**
6067425bb815Sopenharmony_ci
6068425bb815Sopenharmony_ci```c
6069425bb815Sopenharmony_cijerry_value_t
6070425bb815Sopenharmony_cijerry_get_object_keys (const jerry_value_t obj_val);
6071425bb815Sopenharmony_ci```
6072425bb815Sopenharmony_ci
6073425bb815Sopenharmony_ci- `obj_val` - object value
6074425bb815Sopenharmony_ci- return value
6075425bb815Sopenharmony_ci  - array object value, if success
6076425bb815Sopenharmony_ci  - thrown error, otherwise
6077425bb815Sopenharmony_ci
6078425bb815Sopenharmony_ci**Example**
6079425bb815Sopenharmony_ci
6080425bb815Sopenharmony_ci```c
6081425bb815Sopenharmony_ci{
6082425bb815Sopenharmony_ci  jerry_value_t object;
6083425bb815Sopenharmony_ci  ... // create or acquire object
6084425bb815Sopenharmony_ci
6085425bb815Sopenharmony_ci  jerry_value_t keys_array = jerry_get_object_keys (object);
6086425bb815Sopenharmony_ci
6087425bb815Sopenharmony_ci  ... // usage of keys_array
6088425bb815Sopenharmony_ci
6089425bb815Sopenharmony_ci  jerry_release_value (keys_array);
6090425bb815Sopenharmony_ci}
6091425bb815Sopenharmony_ci```
6092425bb815Sopenharmony_ci
6093425bb815Sopenharmony_ci**See also**
6094425bb815Sopenharmony_ci
6095425bb815Sopenharmony_ci- [jerry_get_property](#jerry_get_property)
6096425bb815Sopenharmony_ci- [jerry_set_property](#jerry_set_property)
6097425bb815Sopenharmony_ci
6098425bb815Sopenharmony_ci
6099425bb815Sopenharmony_ci## jerry_get_prototype
6100425bb815Sopenharmony_ci
6101425bb815Sopenharmony_ci**Summary**
6102425bb815Sopenharmony_ci
6103425bb815Sopenharmony_ciGet the prototype of the specified object.
6104425bb815Sopenharmony_ci
6105425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
6106425bb815Sopenharmony_ciis no longer needed.
6107425bb815Sopenharmony_ci
6108425bb815Sopenharmony_ci**Prototype**
6109425bb815Sopenharmony_ci
6110425bb815Sopenharmony_ci```c
6111425bb815Sopenharmony_cijerry_value_t
6112425bb815Sopenharmony_cijerry_get_prototype (const jerry_value_t obj_val);
6113425bb815Sopenharmony_ci```
6114425bb815Sopenharmony_ci
6115425bb815Sopenharmony_ci- `obj_val` - object value
6116425bb815Sopenharmony_ci- return value
6117425bb815Sopenharmony_ci  - object value, if success
6118425bb815Sopenharmony_ci  - null or thrown error, otherwise
6119425bb815Sopenharmony_ci
6120425bb815Sopenharmony_ci**Example**
6121425bb815Sopenharmony_ci
6122425bb815Sopenharmony_ci```c
6123425bb815Sopenharmony_ci{
6124425bb815Sopenharmony_ci  jerry_value_t object;
6125425bb815Sopenharmony_ci  ... // create or acquire object
6126425bb815Sopenharmony_ci
6127425bb815Sopenharmony_ci  jerry_value_t prototype = jerry_get_prototype (object);
6128425bb815Sopenharmony_ci
6129425bb815Sopenharmony_ci  ... // usage of prototype object
6130425bb815Sopenharmony_ci
6131425bb815Sopenharmony_ci  jerry_release_value (prototype);
6132425bb815Sopenharmony_ci  jerry_release_value (object);
6133425bb815Sopenharmony_ci}
6134425bb815Sopenharmony_ci```
6135425bb815Sopenharmony_ci
6136425bb815Sopenharmony_ci**See also**
6137425bb815Sopenharmony_ci
6138425bb815Sopenharmony_ci- [jerry_set_prototype](#jerry_set_prototype)
6139425bb815Sopenharmony_ci
6140425bb815Sopenharmony_ci
6141425bb815Sopenharmony_ci## jerry_set_prototype
6142425bb815Sopenharmony_ci
6143425bb815Sopenharmony_ci**Summary**
6144425bb815Sopenharmony_ci
6145425bb815Sopenharmony_ciSet the prototype of the specified object.
6146425bb815Sopenharmony_ci
6147425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
6148425bb815Sopenharmony_ciis no longer needed.
6149425bb815Sopenharmony_ci
6150425bb815Sopenharmony_ci**Prototype**
6151425bb815Sopenharmony_ci
6152425bb815Sopenharmony_ci```c
6153425bb815Sopenharmony_cijerry_value_t
6154425bb815Sopenharmony_cijerry_set_prototype (const jerry_value_t obj_val,
6155425bb815Sopenharmony_ci                     const jerry_value_t proto_obj_val);
6156425bb815Sopenharmony_ci```
6157425bb815Sopenharmony_ci
6158425bb815Sopenharmony_ci- `obj_val` - object value
6159425bb815Sopenharmony_ci- `proto_obj_val` - prototype object value
6160425bb815Sopenharmony_ci- return value
6161425bb815Sopenharmony_ci  - true, if success
6162425bb815Sopenharmony_ci  - thrown error, otherwise
6163425bb815Sopenharmony_ci
6164425bb815Sopenharmony_ci**Example**
6165425bb815Sopenharmony_ci
6166425bb815Sopenharmony_ci```c
6167425bb815Sopenharmony_ci{
6168425bb815Sopenharmony_ci  jerry_value_t object;
6169425bb815Sopenharmony_ci  jerry_value_t prototype;
6170425bb815Sopenharmony_ci
6171425bb815Sopenharmony_ci  ... // create or acquire object and prototype
6172425bb815Sopenharmony_ci
6173425bb815Sopenharmony_ci  jerry_value_t ret_val = jerry_set_prototype (object, prototype);
6174425bb815Sopenharmony_ci
6175425bb815Sopenharmony_ci  jerry_release_value (ret_val);
6176425bb815Sopenharmony_ci  jerry_release_value (prototype);
6177425bb815Sopenharmony_ci  jerry_release_value (object);
6178425bb815Sopenharmony_ci}
6179425bb815Sopenharmony_ci```
6180425bb815Sopenharmony_ci
6181425bb815Sopenharmony_ci**See also**
6182425bb815Sopenharmony_ci
6183425bb815Sopenharmony_ci- [jerry_get_prototype](#jerry_get_prototype)
6184425bb815Sopenharmony_ci
6185425bb815Sopenharmony_ci
6186425bb815Sopenharmony_ci## jerry_get_object_native_pointer
6187425bb815Sopenharmony_ci
6188425bb815Sopenharmony_ci**Summary**
6189425bb815Sopenharmony_ci
6190425bb815Sopenharmony_ciGet native pointer by the given type information.
6191425bb815Sopenharmony_ciThe pointer and the type information are previously associated with the object by
6192425bb815Sopenharmony_ci[jerry_set_object_native_pointer](#jerry_set_object_native_pointer).
6193425bb815Sopenharmony_ci
6194425bb815Sopenharmony_ci*Note*: `out_native_pointer_p` can be NULL, and it means the
6195425bb815Sopenharmony_ci        caller doesn't want to get the native_pointer.
6196425bb815Sopenharmony_ci
6197425bb815Sopenharmony_ci**Prototype**
6198425bb815Sopenharmony_ci
6199425bb815Sopenharmony_ci```c
6200425bb815Sopenharmony_cibool
6201425bb815Sopenharmony_cijerry_get_object_native_pointer (const jerry_value_t obj_val,
6202425bb815Sopenharmony_ci                                 void **out_native_pointer_p,
6203425bb815Sopenharmony_ci                                 const jerry_object_native_info_t *native_info_p)
6204425bb815Sopenharmony_ci```
6205425bb815Sopenharmony_ci
6206425bb815Sopenharmony_ci- `obj_val` - object value to get native pointer from.
6207425bb815Sopenharmony_ci- `out_native_pointer_p` - native pointer (output parameter).
6208425bb815Sopenharmony_ci- `native_info_p` - native pointer's type information.
6209425bb815Sopenharmony_ci- return value
6210425bb815Sopenharmony_ci  - true, if there is native pointer associated of the specified object with the given native type info
6211425bb815Sopenharmony_ci  - false, otherwise
6212425bb815Sopenharmony_ci
6213425bb815Sopenharmony_ci*New in version 2.0*: Changed from `jerry_get_object_native_handle`.
6214425bb815Sopenharmony_ci
6215425bb815Sopenharmony_ci**Example**
6216425bb815Sopenharmony_ci
6217425bb815Sopenharmony_ci[doctest]: # ()
6218425bb815Sopenharmony_ci
6219425bb815Sopenharmony_ci```c
6220425bb815Sopenharmony_ci#include <stdio.h>
6221425bb815Sopenharmony_ci#include <stdlib.h>
6222425bb815Sopenharmony_ci#include <string.h>
6223425bb815Sopenharmony_ci#include "jerryscript.h"
6224425bb815Sopenharmony_ci
6225425bb815Sopenharmony_citypedef struct
6226425bb815Sopenharmony_ci{
6227425bb815Sopenharmony_ci  char *data_p;
6228425bb815Sopenharmony_ci  unsigned int length;
6229425bb815Sopenharmony_ci} buffer_native_object_t;
6230425bb815Sopenharmony_ci
6231425bb815Sopenharmony_citypedef struct
6232425bb815Sopenharmony_ci{
6233425bb815Sopenharmony_ci  int area;
6234425bb815Sopenharmony_ci  int perimeter;
6235425bb815Sopenharmony_ci} shape_native_object_t;
6236425bb815Sopenharmony_ci
6237425bb815Sopenharmony_ci#define SECRET_INFO ((void *) 42)
6238425bb815Sopenharmony_ci
6239425bb815Sopenharmony_cistatic void
6240425bb815Sopenharmony_cibuffer_native_freecb (void *native_p)
6241425bb815Sopenharmony_ci{
6242425bb815Sopenharmony_ci  char *data_p = ((buffer_native_object_t*)native_p)->data_p;
6243425bb815Sopenharmony_ci
6244425bb815Sopenharmony_ci  if (data_p != NULL)
6245425bb815Sopenharmony_ci  {
6246425bb815Sopenharmony_ci    free (data_p);
6247425bb815Sopenharmony_ci  }
6248425bb815Sopenharmony_ci
6249425bb815Sopenharmony_ci  free (native_p);
6250425bb815Sopenharmony_ci}
6251425bb815Sopenharmony_ci
6252425bb815Sopenharmony_cistatic void
6253425bb815Sopenharmony_cishape_native_freecb (void *native_p)
6254425bb815Sopenharmony_ci{
6255425bb815Sopenharmony_ci  free (native_p);
6256425bb815Sopenharmony_ci}
6257425bb815Sopenharmony_ci
6258425bb815Sopenharmony_cistatic void
6259425bb815Sopenharmony_cidestructor_freecb (void *native_p)
6260425bb815Sopenharmony_ci{
6261425bb815Sopenharmony_ci   printf("Note: the object has been freed\n");
6262425bb815Sopenharmony_ci}
6263425bb815Sopenharmony_ci
6264425bb815Sopenharmony_ci// NOTE: The address (!) of type_info acts as a way to uniquely "identify" the
6265425bb815Sopenharmony_ci// C type `buffer_native_object_t *`.
6266425bb815Sopenharmony_cistatic const jerry_object_native_info_t buffer_obj_type_info =
6267425bb815Sopenharmony_ci{
6268425bb815Sopenharmony_ci  .free_cb = buffer_native_freecb
6269425bb815Sopenharmony_ci};
6270425bb815Sopenharmony_ci
6271425bb815Sopenharmony_ci// NOTE: The address (!) of type_info acts as a way to uniquely "identify" the
6272425bb815Sopenharmony_ci// C type `shape_native_object_t *`.
6273425bb815Sopenharmony_cistatic const jerry_object_native_info_t shape_obj_type_info =
6274425bb815Sopenharmony_ci{
6275425bb815Sopenharmony_ci  .free_cb = shape_native_freecb
6276425bb815Sopenharmony_ci};
6277425bb815Sopenharmony_ci
6278425bb815Sopenharmony_ci// NOTE: The address (!) of type_info is the unique "identifier"
6279425bb815Sopenharmony_cistatic const jerry_object_native_info_t destructor_obj_type_info =
6280425bb815Sopenharmony_ci{
6281425bb815Sopenharmony_ci  .free_cb = destructor_freecb
6282425bb815Sopenharmony_ci};
6283425bb815Sopenharmony_ci
6284425bb815Sopenharmony_cistatic void
6285425bb815Sopenharmony_ciprint_buffer (char *data_p,
6286425bb815Sopenharmony_ci              unsigned int length)
6287425bb815Sopenharmony_ci{
6288425bb815Sopenharmony_ci  for (unsigned int i = 0; i < length; ++i)
6289425bb815Sopenharmony_ci  {
6290425bb815Sopenharmony_ci    printf("%c", data_p[i]);
6291425bb815Sopenharmony_ci  }
6292425bb815Sopenharmony_ci
6293425bb815Sopenharmony_ci  printf("\n");
6294425bb815Sopenharmony_ci}
6295425bb815Sopenharmony_ci
6296425bb815Sopenharmony_cistatic void
6297425bb815Sopenharmony_cido_stuff (jerry_value_t object)
6298425bb815Sopenharmony_ci{
6299425bb815Sopenharmony_ci  void *native_p;
6300425bb815Sopenharmony_ci  bool has_p = jerry_get_object_native_pointer (object, &native_p, &buffer_obj_type_info);
6301425bb815Sopenharmony_ci
6302425bb815Sopenharmony_ci  if (!has_p)
6303425bb815Sopenharmony_ci  {
6304425bb815Sopenharmony_ci    // Process the error
6305425bb815Sopenharmony_ci    return;
6306425bb815Sopenharmony_ci  }
6307425bb815Sopenharmony_ci
6308425bb815Sopenharmony_ci  // It is safe to cast to buffer_native_object_t * and dereference the pointer:
6309425bb815Sopenharmony_ci  buffer_native_object_t *buffer_p = (buffer_native_object_t *) native_p;
6310425bb815Sopenharmony_ci  print_buffer (buffer_p->data_p, buffer_p->length); // Usage of buffer_p
6311425bb815Sopenharmony_ci
6312425bb815Sopenharmony_ci  bool need_shape_info = true; // implementation dependent
6313425bb815Sopenharmony_ci
6314425bb815Sopenharmony_ci  if (need_shape_info)
6315425bb815Sopenharmony_ci  {
6316425bb815Sopenharmony_ci    has_p = jerry_get_object_native_pointer (object, &native_p, &shape_obj_type_info);
6317425bb815Sopenharmony_ci
6318425bb815Sopenharmony_ci    if (!has_p)
6319425bb815Sopenharmony_ci    {
6320425bb815Sopenharmony_ci      // Process the error
6321425bb815Sopenharmony_ci      return;
6322425bb815Sopenharmony_ci    }
6323425bb815Sopenharmony_ci
6324425bb815Sopenharmony_ci    // It is safe to cast to shape_native_object_t * and dereference the pointer:
6325425bb815Sopenharmony_ci    shape_native_object_t *shape_p = (shape_native_object_t *) native_p;
6326425bb815Sopenharmony_ci
6327425bb815Sopenharmony_ci    printf("Area: %d\tPerimeter: %d\n", shape_p->area, shape_p->perimeter); // Usage of shape_p
6328425bb815Sopenharmony_ci  }
6329425bb815Sopenharmony_ci
6330425bb815Sopenharmony_ci  bool need_secret_info = true; // implementation dependent
6331425bb815Sopenharmony_ci
6332425bb815Sopenharmony_ci  if (need_secret_info)
6333425bb815Sopenharmony_ci  {
6334425bb815Sopenharmony_ci    has_p = jerry_get_object_native_pointer (object, &native_p, NULL);
6335425bb815Sopenharmony_ci
6336425bb815Sopenharmony_ci    if (!has_p)
6337425bb815Sopenharmony_ci    {
6338425bb815Sopenharmony_ci      // Process the error
6339425bb815Sopenharmony_ci      return;
6340425bb815Sopenharmony_ci    }
6341425bb815Sopenharmony_ci
6342425bb815Sopenharmony_ci    printf("Secret: %d\n", (int)((uintptr_t) native_p)); // Usage of native_p
6343425bb815Sopenharmony_ci
6344425bb815Sopenharmony_ci    bool deleted = jerry_delete_object_native_pointer (object, NULL);
6345425bb815Sopenharmony_ci
6346425bb815Sopenharmony_ci    if (deleted)
6347425bb815Sopenharmony_ci    {
6348425bb815Sopenharmony_ci      printf("The secret is no longer available\n");
6349425bb815Sopenharmony_ci    }
6350425bb815Sopenharmony_ci  }
6351425bb815Sopenharmony_ci}
6352425bb815Sopenharmony_ci
6353425bb815Sopenharmony_ciint
6354425bb815Sopenharmony_cimain (void)
6355425bb815Sopenharmony_ci{
6356425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
6357425bb815Sopenharmony_ci
6358425bb815Sopenharmony_ci  jerry_value_t object = jerry_create_object ();
6359425bb815Sopenharmony_ci  buffer_native_object_t *buffer_p = (buffer_native_object_t *) malloc (sizeof (buffer_native_object_t));
6360425bb815Sopenharmony_ci  buffer_p->length = 14;
6361425bb815Sopenharmony_ci  buffer_p->data_p = (char *) malloc (buffer_p->length * sizeof (char));
6362425bb815Sopenharmony_ci  memcpy (buffer_p->data_p, "My buffer data", buffer_p->length);
6363425bb815Sopenharmony_ci  jerry_set_object_native_pointer (object, buffer_p, &buffer_obj_type_info);
6364425bb815Sopenharmony_ci
6365425bb815Sopenharmony_ci  shape_native_object_t *shape_p = (shape_native_object_t *) malloc (sizeof (shape_native_object_t));
6366425bb815Sopenharmony_ci  shape_p->area = 6;
6367425bb815Sopenharmony_ci  shape_p->perimeter = 12;
6368425bb815Sopenharmony_ci  jerry_set_object_native_pointer (object, shape_p, &shape_obj_type_info);
6369425bb815Sopenharmony_ci
6370425bb815Sopenharmony_ci  // The native pointer can be NULL. This gives possibily to get notified via the native type info's
6371425bb815Sopenharmony_ci  // free callback when the object has been freed by the GC.
6372425bb815Sopenharmony_ci  jerry_set_object_native_pointer (object, NULL, &destructor_obj_type_info);
6373425bb815Sopenharmony_ci
6374425bb815Sopenharmony_ci  // The native type info can be NULL as well. In this case the registered property is simply freed
6375425bb815Sopenharmony_ci  // when the object is freed by te GC.
6376425bb815Sopenharmony_ci  jerry_set_object_native_pointer (object, SECRET_INFO, NULL);
6377425bb815Sopenharmony_ci
6378425bb815Sopenharmony_ci  do_stuff (object);
6379425bb815Sopenharmony_ci
6380425bb815Sopenharmony_ci  jerry_release_value (object);
6381425bb815Sopenharmony_ci  jerry_cleanup ();
6382425bb815Sopenharmony_ci
6383425bb815Sopenharmony_ci  return 0;
6384425bb815Sopenharmony_ci}
6385425bb815Sopenharmony_ci```
6386425bb815Sopenharmony_ci
6387425bb815Sopenharmony_ci**See also**
6388425bb815Sopenharmony_ci
6389425bb815Sopenharmony_ci- [jerry_create_object](#jerry_create_object)
6390425bb815Sopenharmony_ci- [jerry_set_object_native_pointer](#jerry_set_object_native_pointer)
6391425bb815Sopenharmony_ci- [jerry_object_native_info_t](#jerry_object_native_info_t)
6392425bb815Sopenharmony_ci
6393425bb815Sopenharmony_ci
6394425bb815Sopenharmony_ci## jerry_set_object_native_pointer
6395425bb815Sopenharmony_ci
6396425bb815Sopenharmony_ci**Summary**
6397425bb815Sopenharmony_ci
6398425bb815Sopenharmony_ciSet native pointer and an optional type information for the specified object.
6399425bb815Sopenharmony_ciYou can get them by calling [jerry_get_object_native_pointer](#jerry_get_object_native_pointer) later.
6400425bb815Sopenharmony_ci
6401425bb815Sopenharmony_ci*Notes*:
6402425bb815Sopenharmony_ci - If a native pointer was already set for the object with the same type information, its value is updated.
6403425bb815Sopenharmony_ci - If a non-NULL free callback is specified in the native type information,
6404425bb815Sopenharmony_ci   it will be called by the garbage collector when the object is freed.
6405425bb815Sopenharmony_ci - If the object is only referenced via the "global" object (or one of it's "child"),
6406425bb815Sopenharmony_ci   the free callback will be invoked during the execution of `jerry_cleanup`.
6407425bb815Sopenharmony_ci - The free callback can invoke API functions.
6408425bb815Sopenharmony_ci
6409425bb815Sopenharmony_ci*Note*: If possible do not store API values in native pointers, rather check
6410425bb815Sopenharmony_ci        [jerry_set_internal_property](#jerry_set_internal_property).
6411425bb815Sopenharmony_ci
6412425bb815Sopenharmony_ci**Prototype**
6413425bb815Sopenharmony_ci
6414425bb815Sopenharmony_ci```c
6415425bb815Sopenharmony_civoid
6416425bb815Sopenharmony_cijerry_set_object_native_pointer (const jerry_value_t obj_val,
6417425bb815Sopenharmony_ci                                 void *native_p,
6418425bb815Sopenharmony_ci                                 const jerry_object_native_info_t *info_p)
6419425bb815Sopenharmony_ci```
6420425bb815Sopenharmony_ci
6421425bb815Sopenharmony_ci- `obj_val` - object to set native pointer in.
6422425bb815Sopenharmony_ci- `native_p` - native pointer.
6423425bb815Sopenharmony_ci- `info_p` - native pointer's type information or NULL. When used, this should
6424425bb815Sopenharmony_ci             be a long-lived pointer, usually a pointer to a
6425425bb815Sopenharmony_ci             `static const jerry_object_native_info_t` makes most sense.
6426425bb815Sopenharmony_ci
6427425bb815Sopenharmony_ci*New in version 2.0*: Changed from `jerry_set_object_native_handle`.
6428425bb815Sopenharmony_ci
6429425bb815Sopenharmony_ci**Example**
6430425bb815Sopenharmony_ci
6431425bb815Sopenharmony_ciSee [jerry_get_object_native_pointer](#jerry_get_object_native_pointer) for a
6432425bb815Sopenharmony_cibest-practice example.
6433425bb815Sopenharmony_ci
6434425bb815Sopenharmony_ci**See also**
6435425bb815Sopenharmony_ci
6436425bb815Sopenharmony_ci- [jerry_create_object](#jerry_create_object)
6437425bb815Sopenharmony_ci- [jerry_get_object_native_pointer](#jerry_get_object_native_pointer)
6438425bb815Sopenharmony_ci- [jerry_object_native_info_t](#jerry_object_native_info_t)
6439425bb815Sopenharmony_ci
6440425bb815Sopenharmony_ci## jerry_delete_object_native_pointer
6441425bb815Sopenharmony_ci
6442425bb815Sopenharmony_ci**Summary**
6443425bb815Sopenharmony_ci
6444425bb815Sopenharmony_ciDelete the native pointer of the specified object associated with the given native type info.
6445425bb815Sopenharmony_ci
6446425bb815Sopenharmony_ci*Notes*:
6447425bb815Sopenharmony_ci - If the specified object has no matching native pointer for the given native type info the operation has no effect.
6448425bb815Sopenharmony_ci - The method does not invoke the free callback specified in the type info.
6449425bb815Sopenharmony_ci   If the native pointer should be freed then one must get the native pointer first and invoke the free callback manually
6450425bb815Sopenharmony_ci   before calling this method.
6451425bb815Sopenharmony_ci - This operation cannot throw an exception.
6452425bb815Sopenharmony_ci
6453425bb815Sopenharmony_ci**Prototype**
6454425bb815Sopenharmony_ci
6455425bb815Sopenharmony_ci```c
6456425bb815Sopenharmony_cibool
6457425bb815Sopenharmony_cijerry_delete_object_native_pointer (const jerry_value_t obj_val,
6458425bb815Sopenharmony_ci                                    const jerry_object_native_info_t *info_p)
6459425bb815Sopenharmony_ci```
6460425bb815Sopenharmony_ci
6461425bb815Sopenharmony_ci- `obj_val` - object to delete native pointer from.
6462425bb815Sopenharmony_ci- `info_p` - native pointer's type information.
6463425bb815Sopenharmony_ci
6464425bb815Sopenharmony_ci*New in version 2.0*.
6465425bb815Sopenharmony_ci
6466425bb815Sopenharmony_ci**Example**
6467425bb815Sopenharmony_ci
6468425bb815Sopenharmony_ciSee [jerry_get_object_native_pointer](#jerry_get_object_native_pointer) for a
6469425bb815Sopenharmony_cibest-practice example.
6470425bb815Sopenharmony_ci
6471425bb815Sopenharmony_ci**See also**
6472425bb815Sopenharmony_ci
6473425bb815Sopenharmony_ci- [jerry_create_object](#jerry_create_object)
6474425bb815Sopenharmony_ci- [jerry_get_object_native_pointer](#jerry_get_object_native_pointer)
6475425bb815Sopenharmony_ci- [jerry_get_object_native_pointer](#jerry_set_object_native_pointer)
6476425bb815Sopenharmony_ci- [jerry_object_native_info_t](#jerry_object_native_info_t)
6477425bb815Sopenharmony_ci
6478425bb815Sopenharmony_ci
6479425bb815Sopenharmony_ci## jerry_foreach_object_property
6480425bb815Sopenharmony_ci
6481425bb815Sopenharmony_ci**Summary**
6482425bb815Sopenharmony_ci
6483425bb815Sopenharmony_ciApplies the given function to every enumerable(!) property in the given object.
6484425bb815Sopenharmony_ci
6485425bb815Sopenharmony_ciThe "iterator" `foreach_p` method should return `true` value to continue the iteration.
6486425bb815Sopenharmony_ciIf the method returns `false` the iteration will end.
6487425bb815Sopenharmony_ci
6488425bb815Sopenharmony_ci**Prototype**
6489425bb815Sopenharmony_ci
6490425bb815Sopenharmony_ci```c
6491425bb815Sopenharmony_cibool
6492425bb815Sopenharmony_cijerry_foreach_object_property (jerry_value_t obj_val,
6493425bb815Sopenharmony_ci                               jerry_object_property_foreach_t foreach_p,
6494425bb815Sopenharmony_ci                               void *user_data_p);
6495425bb815Sopenharmony_ci```
6496425bb815Sopenharmony_ci
6497425bb815Sopenharmony_ci- `obj_val` - object value
6498425bb815Sopenharmony_ci- `foreach_p` - foreach function, that will be applied for each property
6499425bb815Sopenharmony_ci- `user_data_p` - user data for foreach function
6500425bb815Sopenharmony_ci- return value
6501425bb815Sopenharmony_ci  - true, if object fields traversal was performed successfully, i.e.:
6502425bb815Sopenharmony_ci    - no unhandled exceptions were thrown in object fields traversal
6503425bb815Sopenharmony_ci    - object fields traversal was stopped on callback that returned false
6504425bb815Sopenharmony_ci  - false, otherwise
6505425bb815Sopenharmony_ci
6506425bb815Sopenharmony_ci**Example**
6507425bb815Sopenharmony_ci
6508425bb815Sopenharmony_ci
6509425bb815Sopenharmony_ci[doctest]: # (name="02.API-REFERENCE-foreach-property.c")
6510425bb815Sopenharmony_ci
6511425bb815Sopenharmony_ci```c
6512425bb815Sopenharmony_ci#include <stdio.h>
6513425bb815Sopenharmony_ci#include "jerryscript.h"
6514425bb815Sopenharmony_ci
6515425bb815Sopenharmony_ci/* Example structure used as user data for the property iteration. */
6516425bb815Sopenharmony_cistruct iteration_data {
6517425bb815Sopenharmony_ci  int string_property_count;
6518425bb815Sopenharmony_ci};
6519425bb815Sopenharmony_ci
6520425bb815Sopenharmony_ci/*
6521425bb815Sopenharmony_ci * Example foreach function to print out property names.
6522425bb815Sopenharmony_ci */
6523425bb815Sopenharmony_cistatic bool
6524425bb815Sopenharmony_ciforeach_function (const jerry_value_t prop_name,
6525425bb815Sopenharmony_ci                  const jerry_value_t prop_value,
6526425bb815Sopenharmony_ci                  void *user_data_p)
6527425bb815Sopenharmony_ci{
6528425bb815Sopenharmony_ci  if (jerry_value_is_string (prop_name)) {
6529425bb815Sopenharmony_ci    jerry_char_t string_buffer[128];
6530425bb815Sopenharmony_ci    jerry_size_t copied_bytes = jerry_substring_to_char_buffer (prop_name,
6531425bb815Sopenharmony_ci                                                                0,
6532425bb815Sopenharmony_ci                                                                127,
6533425bb815Sopenharmony_ci                                                                string_buffer,
6534425bb815Sopenharmony_ci                                                                127);
6535425bb815Sopenharmony_ci    string_buffer[copied_bytes] = '\0';
6536425bb815Sopenharmony_ci
6537425bb815Sopenharmony_ci    printf ("Property: %s\n", string_buffer);
6538425bb815Sopenharmony_ci
6539425bb815Sopenharmony_ci    struct iteration_data *data = (struct iteration_data *) user_data_p;
6540425bb815Sopenharmony_ci    data->string_property_count++;
6541425bb815Sopenharmony_ci  }
6542425bb815Sopenharmony_ci
6543425bb815Sopenharmony_ci  /* return true to continue iteration */
6544425bb815Sopenharmony_ci  return true;
6545425bb815Sopenharmony_ci}
6546425bb815Sopenharmony_ci
6547425bb815Sopenharmony_ciint
6548425bb815Sopenharmony_cimain (void)
6549425bb815Sopenharmony_ci{
6550425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
6551425bb815Sopenharmony_ci
6552425bb815Sopenharmony_ci  /* Construct an example object with a single property. */
6553425bb815Sopenharmony_ci  jerry_value_t object = jerry_create_object ();
6554425bb815Sopenharmony_ci  {
6555425bb815Sopenharmony_ci    jerry_value_t test_property = jerry_create_string ((const jerry_char_t *) "DemoProp");
6556425bb815Sopenharmony_ci    jerry_value_t test_value = jerry_create_number (3);
6557425bb815Sopenharmony_ci    /* By default all properties added to an object are enumerable. */
6558425bb815Sopenharmony_ci    jerry_value_t set_result = jerry_set_property (object, test_property, test_value);
6559425bb815Sopenharmony_ci    /* The `set_result` should be checked if it is an error or not. */
6560425bb815Sopenharmony_ci    jerry_release_value (set_result);
6561425bb815Sopenharmony_ci    jerry_release_value (test_value);
6562425bb815Sopenharmony_ci    jerry_release_value (test_property);
6563425bb815Sopenharmony_ci  }
6564425bb815Sopenharmony_ci
6565425bb815Sopenharmony_ci  /* Iterate on the object's properties with the given user data. */
6566425bb815Sopenharmony_ci  struct iteration_data user_data = { 0 };
6567425bb815Sopenharmony_ci
6568425bb815Sopenharmony_ci  bool iteration_result = jerry_foreach_object_property (object, foreach_function, &user_data);
6569425bb815Sopenharmony_ci  /* Check and process the `iteration_result` if required. */
6570425bb815Sopenharmony_ci
6571425bb815Sopenharmony_ci  jerry_release_value (object);
6572425bb815Sopenharmony_ci
6573425bb815Sopenharmony_ci  jerry_cleanup ();
6574425bb815Sopenharmony_ci
6575425bb815Sopenharmony_ci  return user_data.string_property_count == 0;
6576425bb815Sopenharmony_ci}
6577425bb815Sopenharmony_ci```
6578425bb815Sopenharmony_ci
6579425bb815Sopenharmony_ci**See also**
6580425bb815Sopenharmony_ci
6581425bb815Sopenharmony_ci- [jerry_object_property_foreach_t](#jerry_object_property_foreach_t)
6582425bb815Sopenharmony_ci
6583425bb815Sopenharmony_ci## jerry_objects_foreach
6584425bb815Sopenharmony_ci
6585425bb815Sopenharmony_ci**Summary**
6586425bb815Sopenharmony_ci
6587425bb815Sopenharmony_ciIterate over all objects available in the engine.
6588425bb815Sopenharmony_ci
6589425bb815Sopenharmony_ciThe "iterator" `foreach_p` method should return `true` value to continue the search.
6590425bb815Sopenharmony_ciIf the method returns `false` the search for the object is finished.
6591425bb815Sopenharmony_ci
6592425bb815Sopenharmony_ci*Note*: Values obtained in `foreach_p` must be retained using [jerry_acquire_value](#jerry_acquire_value).
6593425bb815Sopenharmony_ci
6594425bb815Sopenharmony_ci**Prototype**
6595425bb815Sopenharmony_ci
6596425bb815Sopenharmony_ci```c
6597425bb815Sopenharmony_cibool
6598425bb815Sopenharmony_cijerry_objects_foreach (jerry_objects_foreach_t foreach_p,
6599425bb815Sopenharmony_ci                       void *user_data_p);
6600425bb815Sopenharmony_ci```
6601425bb815Sopenharmony_ci
6602425bb815Sopenharmony_ci- `foreach_p` - function that will be invoked for each object.
6603425bb815Sopenharmony_ci- `user_data_p` - User data to pass to the function.
6604425bb815Sopenharmony_ci- return value
6605425bb815Sopenharmony_ci  - `true`, if the search function terminated the traversal by returning `false`
6606425bb815Sopenharmony_ci  - `false`, if the end of the list of objects was reached
6607425bb815Sopenharmony_ci
6608425bb815Sopenharmony_ci*New in version 2.0*.
6609425bb815Sopenharmony_ci
6610425bb815Sopenharmony_ci**Example**
6611425bb815Sopenharmony_ci
6612425bb815Sopenharmony_ci[doctest]: # (name="02.API-REFERENCE-objects-foreach.c")
6613425bb815Sopenharmony_ci
6614425bb815Sopenharmony_ci```c
6615425bb815Sopenharmony_ci#include <stdio.h>
6616425bb815Sopenharmony_ci#include "jerryscript.h"
6617425bb815Sopenharmony_ci
6618425bb815Sopenharmony_ci/* Create a custom structure to guide the search and store the result. */
6619425bb815Sopenharmony_citypedef struct
6620425bb815Sopenharmony_ci{
6621425bb815Sopenharmony_ci  jerry_value_t property_name;
6622425bb815Sopenharmony_ci  jerry_value_t result;
6623425bb815Sopenharmony_ci} find_my_object_info_t;
6624425bb815Sopenharmony_ci
6625425bb815Sopenharmony_ci/*
6626425bb815Sopenharmony_ci * Find the first object with the given property.
6627425bb815Sopenharmony_ci */
6628425bb815Sopenharmony_cistatic bool
6629425bb815Sopenharmony_cifind_my_object (const jerry_value_t candidate,
6630425bb815Sopenharmony_ci                void *user_data_p)
6631425bb815Sopenharmony_ci{
6632425bb815Sopenharmony_ci  find_my_object_info_t *info_p = (find_my_object_info_t *) user_data_p;
6633425bb815Sopenharmony_ci
6634425bb815Sopenharmony_ci  /* Check if the given object has the required property. */
6635425bb815Sopenharmony_ci  jerry_value_t has_property = jerry_has_property (candidate, info_p->property_name);
6636425bb815Sopenharmony_ci  bool object_found = jerry_get_boolean_value (has_property);
6637425bb815Sopenharmony_ci
6638425bb815Sopenharmony_ci  if (object_found)
6639425bb815Sopenharmony_ci  {
6640425bb815Sopenharmony_ci    /* We found it, so we acquire the value and record it. */
6641425bb815Sopenharmony_ci    info_p->result = jerry_acquire_value (candidate);
6642425bb815Sopenharmony_ci  }
6643425bb815Sopenharmony_ci
6644425bb815Sopenharmony_ci  jerry_release_value (has_property);
6645425bb815Sopenharmony_ci
6646425bb815Sopenharmony_ci  /* If the object was not found continue the search. */
6647425bb815Sopenharmony_ci  return !object_found;
6648425bb815Sopenharmony_ci} /* find_my_object */
6649425bb815Sopenharmony_ci
6650425bb815Sopenharmony_ciint
6651425bb815Sopenharmony_cimain (void)
6652425bb815Sopenharmony_ci{
6653425bb815Sopenharmony_ci  int return_value = 0;
6654425bb815Sopenharmony_ci
6655425bb815Sopenharmony_ci  /* Initialize JerryScript engine. */
6656425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
6657425bb815Sopenharmony_ci
6658425bb815Sopenharmony_ci  /* Create the test object. */
6659425bb815Sopenharmony_ci  {
6660425bb815Sopenharmony_ci    jerry_value_t test_object = jerry_create_object ();
6661425bb815Sopenharmony_ci
6662425bb815Sopenharmony_ci    {
6663425bb815Sopenharmony_ci      jerry_value_t test_property = jerry_create_string ((const jerry_char_t *) "DemoProp");
6664425bb815Sopenharmony_ci      jerry_value_t test_value = jerry_create_number (3);
6665425bb815Sopenharmony_ci      jerry_value_t set_result = jerry_set_property (test_object, test_property, test_value);
6666425bb815Sopenharmony_ci      /* The `set_result` should be checked if it is an error or not. */
6667425bb815Sopenharmony_ci      jerry_release_value (set_result);
6668425bb815Sopenharmony_ci      jerry_release_value (test_value);
6669425bb815Sopenharmony_ci      jerry_release_value (test_property);
6670425bb815Sopenharmony_ci    }
6671425bb815Sopenharmony_ci
6672425bb815Sopenharmony_ci    {
6673425bb815Sopenharmony_ci      /* Register the test object into the global object. */
6674425bb815Sopenharmony_ci      jerry_value_t global_object = jerry_get_global_object ();
6675425bb815Sopenharmony_ci      jerry_value_t demo_property = jerry_create_string ((const jerry_char_t *) "DemoObject");
6676425bb815Sopenharmony_ci      jerry_value_t set_result = jerry_set_property (global_object, demo_property, test_object);
6677425bb815Sopenharmony_ci      /* The `set_result` should be checked if it is an error or not. */
6678425bb815Sopenharmony_ci      jerry_release_value (set_result);
6679425bb815Sopenharmony_ci      jerry_release_value (demo_property);
6680425bb815Sopenharmony_ci      jerry_release_value (global_object);
6681425bb815Sopenharmony_ci    }
6682425bb815Sopenharmony_ci
6683425bb815Sopenharmony_ci    jerry_release_value (test_object);
6684425bb815Sopenharmony_ci  }
6685425bb815Sopenharmony_ci
6686425bb815Sopenharmony_ci  /* Look up the test object base on a property name. */
6687425bb815Sopenharmony_ci  find_my_object_info_t search_info =
6688425bb815Sopenharmony_ci  {
6689425bb815Sopenharmony_ci    .property_name = jerry_create_string ((const jerry_char_t *) "DemoProp")
6690425bb815Sopenharmony_ci  };
6691425bb815Sopenharmony_ci
6692425bb815Sopenharmony_ci  if (jerry_objects_foreach (find_my_object, &search_info))
6693425bb815Sopenharmony_ci  {
6694425bb815Sopenharmony_ci    /* The search was successful. Do something useful with search_info.result. */
6695425bb815Sopenharmony_ci    // ...
6696425bb815Sopenharmony_ci    printf ("Object found\n");
6697425bb815Sopenharmony_ci
6698425bb815Sopenharmony_ci    /* Release the found object after we're done using it. */
6699425bb815Sopenharmony_ci    jerry_release_value (search_info.result);
6700425bb815Sopenharmony_ci  }
6701425bb815Sopenharmony_ci  else
6702425bb815Sopenharmony_ci  {
6703425bb815Sopenharmony_ci    /* The search has failed. */
6704425bb815Sopenharmony_ci    printf ("Object not found\n");
6705425bb815Sopenharmony_ci
6706425bb815Sopenharmony_ci    return_value = 1;
6707425bb815Sopenharmony_ci  }
6708425bb815Sopenharmony_ci
6709425bb815Sopenharmony_ci  jerry_release_value (search_info.property_name);
6710425bb815Sopenharmony_ci
6711425bb815Sopenharmony_ci  /* Engine cleanup */
6712425bb815Sopenharmony_ci  jerry_cleanup ();
6713425bb815Sopenharmony_ci  return return_value;
6714425bb815Sopenharmony_ci}
6715425bb815Sopenharmony_ci```
6716425bb815Sopenharmony_ci
6717425bb815Sopenharmony_ci**See also**
6718425bb815Sopenharmony_ci
6719425bb815Sopenharmony_ci- [jerry_objects_foreach_t](#jerry_objects_foreach_t)
6720425bb815Sopenharmony_ci
6721425bb815Sopenharmony_ci## jerry_objects_foreach_by_native_info
6722425bb815Sopenharmony_ci
6723425bb815Sopenharmony_ci**Summary**
6724425bb815Sopenharmony_ci
6725425bb815Sopenharmony_ciIterate over all objects in the engine matching a certain native data type.
6726425bb815Sopenharmony_ci
6727425bb815Sopenharmony_ciThe "iterator" `foreach_p` method should return `true` value to continue the search.
6728425bb815Sopenharmony_ciIf the method returns `false` the search for the object is finished.
6729425bb815Sopenharmony_ci
6730425bb815Sopenharmony_ci*Note*: Values obtained in `foreach_p` must be retained using [jerry_acquire_value](#jerry_acquire_value).
6731425bb815Sopenharmony_ci
6732425bb815Sopenharmony_ci**Prototype**
6733425bb815Sopenharmony_ci
6734425bb815Sopenharmony_ci```c
6735425bb815Sopenharmony_cibool
6736425bb815Sopenharmony_cijerry_objects_foreach_by_native_info (const jerry_object_native_info_t *native_info_p,
6737425bb815Sopenharmony_ci                                      jerry_objects_foreach_by_native_info_t foreach_p,
6738425bb815Sopenharmony_ci                                      void *user_data_p);
6739425bb815Sopenharmony_ci```
6740425bb815Sopenharmony_ci
6741425bb815Sopenharmony_ci- `native_info_p` - native pointer's type information.
6742425bb815Sopenharmony_ci- `foreach_p` - function that will be invoked for each object.
6743425bb815Sopenharmony_ci- return value
6744425bb815Sopenharmony_ci  - `true`, if the search function terminated the traversal by returning `false`
6745425bb815Sopenharmony_ci  - `false`, if the end of the list of objects was reached
6746425bb815Sopenharmony_ci
6747425bb815Sopenharmony_ci*New in version 2.0*.
6748425bb815Sopenharmony_ci
6749425bb815Sopenharmony_ci**Example**
6750425bb815Sopenharmony_ci
6751425bb815Sopenharmony_ci[doctest]: # (name="02.API-REFERENCE-objects-foreach-nativeptr.c")
6752425bb815Sopenharmony_ci
6753425bb815Sopenharmony_ci```c
6754425bb815Sopenharmony_ci#include <stdio.h>
6755425bb815Sopenharmony_ci#include <stdlib.h>
6756425bb815Sopenharmony_ci#include "jerryscript.h"
6757425bb815Sopenharmony_ci
6758425bb815Sopenharmony_citypedef struct
6759425bb815Sopenharmony_ci{
6760425bb815Sopenharmony_ci  int foo;
6761425bb815Sopenharmony_ci  bool bar;
6762425bb815Sopenharmony_ci} native_obj_t;
6763425bb815Sopenharmony_ci
6764425bb815Sopenharmony_citypedef struct
6765425bb815Sopenharmony_ci{
6766425bb815Sopenharmony_ci  jerry_value_t found_object;
6767425bb815Sopenharmony_ci  native_obj_t *found_native_data_p;
6768425bb815Sopenharmony_ci
6769425bb815Sopenharmony_ci  int match_foo_value;
6770425bb815Sopenharmony_ci} find_object_data_t;
6771425bb815Sopenharmony_ci
6772425bb815Sopenharmony_cistatic void native_freecb (void *native_p)
6773425bb815Sopenharmony_ci{
6774425bb815Sopenharmony_ci  /* `native_p` was allocated via malloc. */
6775425bb815Sopenharmony_ci  free (native_p);
6776425bb815Sopenharmony_ci} /* native_freecb */
6777425bb815Sopenharmony_ci
6778425bb815Sopenharmony_ci/*
6779425bb815Sopenharmony_ci * NOTE: The address (!) of type_info acts as a way to uniquely "identify" the
6780425bb815Sopenharmony_ci * C type `native_obj_t *`.
6781425bb815Sopenharmony_ci */
6782425bb815Sopenharmony_cistatic const jerry_object_native_info_t native_obj_type_info =
6783425bb815Sopenharmony_ci{
6784425bb815Sopenharmony_ci  .free_cb = native_freecb
6785425bb815Sopenharmony_ci};
6786425bb815Sopenharmony_ci
6787425bb815Sopenharmony_ci/*
6788425bb815Sopenharmony_ci * Function creating JS object that is "backed" by a `native_obj_t`.
6789425bb815Sopenharmony_ci */
6790425bb815Sopenharmony_cistatic void
6791425bb815Sopenharmony_ciadd_object_with_nativeptr (int foo_value)
6792425bb815Sopenharmony_ci{
6793425bb815Sopenharmony_ci  // construct object and native_set value:
6794425bb815Sopenharmony_ci  jerry_value_t test_object = jerry_create_object ();
6795425bb815Sopenharmony_ci  native_obj_t *native_obj_p = malloc (sizeof (*native_obj_p));
6796425bb815Sopenharmony_ci  native_obj_p->foo = foo_value;
6797425bb815Sopenharmony_ci  native_obj_p->bar = true;
6798425bb815Sopenharmony_ci
6799425bb815Sopenharmony_ci  jerry_set_object_native_pointer (test_object, native_obj_p, &native_obj_type_info);
6800425bb815Sopenharmony_ci
6801425bb815Sopenharmony_ci  /* Register the test object into the global object. */
6802425bb815Sopenharmony_ci  jerry_value_t global_object = jerry_get_global_object ();
6803425bb815Sopenharmony_ci  jerry_value_t demo_property = jerry_create_string ((const jerry_char_t *) "DemoObject");
6804425bb815Sopenharmony_ci  jerry_value_t set_result = jerry_set_property (global_object, demo_property, test_object);
6805425bb815Sopenharmony_ci  /* The `set_result` should be checked if it is an error or not. */
6806425bb815Sopenharmony_ci  jerry_release_value (set_result);
6807425bb815Sopenharmony_ci  jerry_release_value (demo_property);
6808425bb815Sopenharmony_ci  jerry_release_value (global_object);
6809425bb815Sopenharmony_ci
6810425bb815Sopenharmony_ci  jerry_release_value (test_object);
6811425bb815Sopenharmony_ci} /* create_object_with_nativeptr */
6812425bb815Sopenharmony_ci
6813425bb815Sopenharmony_ci/*
6814425bb815Sopenharmony_ci * Example native method that searches for a JavaScript object
6815425bb815Sopenharmony_ci * with a `native_obj_type_info` has the correct value.
6816425bb815Sopenharmony_ci */
6817425bb815Sopenharmony_cistatic bool
6818425bb815Sopenharmony_cifind_object (const jerry_value_t candidate, void *data_p, void *user_data_p)
6819425bb815Sopenharmony_ci{
6820425bb815Sopenharmony_ci  find_object_data_t *find_data_p = (find_object_data_t *) user_data_p;
6821425bb815Sopenharmony_ci  native_obj_t *native_obj_p = (native_obj_t *) data_p;
6822425bb815Sopenharmony_ci
6823425bb815Sopenharmony_ci  if (find_data_p->match_foo_value == native_obj_p->foo)
6824425bb815Sopenharmony_ci  {
6825425bb815Sopenharmony_ci    /* If the object was found, acquire it and store it in the user data. */
6826425bb815Sopenharmony_ci    find_data_p->found_object = jerry_acquire_value (candidate);
6827425bb815Sopenharmony_ci    find_data_p->found_native_data_p = native_obj_p;
6828425bb815Sopenharmony_ci
6829425bb815Sopenharmony_ci    /* Stop traversing over the objects. */
6830425bb815Sopenharmony_ci    return false;
6831425bb815Sopenharmony_ci  }
6832425bb815Sopenharmony_ci
6833425bb815Sopenharmony_ci  /* Indicate that the object was not found, so traversal must continue. */
6834425bb815Sopenharmony_ci  return true;
6835425bb815Sopenharmony_ci} /* find_object */
6836425bb815Sopenharmony_ci
6837425bb815Sopenharmony_ciint
6838425bb815Sopenharmony_cimain (void)
6839425bb815Sopenharmony_ci{
6840425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
6841425bb815Sopenharmony_ci
6842425bb815Sopenharmony_ci  add_object_with_nativeptr (4);
6843425bb815Sopenharmony_ci  add_object_with_nativeptr (3);
6844425bb815Sopenharmony_ci  add_object_with_nativeptr (2);
6845425bb815Sopenharmony_ci
6846425bb815Sopenharmony_ci  find_object_data_t find_data =
6847425bb815Sopenharmony_ci  {
6848425bb815Sopenharmony_ci    .match_foo_value = 3,
6849425bb815Sopenharmony_ci  };
6850425bb815Sopenharmony_ci
6851425bb815Sopenharmony_ci  if (jerry_objects_foreach_by_native_info (&native_obj_type_info, find_object, &find_data))
6852425bb815Sopenharmony_ci  {
6853425bb815Sopenharmony_ci    /* The object was found and is now stored in `find_data.found_object`. After using it, it must be released. */
6854425bb815Sopenharmony_ci    printf ("Object found, native foo value: %d\n", find_data.found_native_data_p->foo);
6855425bb815Sopenharmony_ci
6856425bb815Sopenharmony_ci    jerry_release_value (find_data.found_object);
6857425bb815Sopenharmony_ci  }
6858425bb815Sopenharmony_ci  else
6859425bb815Sopenharmony_ci  {
6860425bb815Sopenharmony_ci    printf ("Object not found\n");
6861425bb815Sopenharmony_ci  }
6862425bb815Sopenharmony_ci
6863425bb815Sopenharmony_ci  jerry_cleanup ();
6864425bb815Sopenharmony_ci
6865425bb815Sopenharmony_ci  return 0;
6866425bb815Sopenharmony_ci}
6867425bb815Sopenharmony_ci```
6868425bb815Sopenharmony_ci
6869425bb815Sopenharmony_ci**See also**
6870425bb815Sopenharmony_ci
6871425bb815Sopenharmony_ci- [jerry_create_object](#jerry_create_object)
6872425bb815Sopenharmony_ci- [jerry_set_object_native_pointer](#jerry_set_object_native_pointer)
6873425bb815Sopenharmony_ci- [jerry_get_object_native_pointer](#jerry_get_object_native_pointer)
6874425bb815Sopenharmony_ci- [jerry_object_native_info_t](#jerry_object_native_info_t)
6875425bb815Sopenharmony_ci- [jerry_objects_foreach](#jerry_objects_foreach)
6876425bb815Sopenharmony_ci
6877425bb815Sopenharmony_ci
6878425bb815Sopenharmony_ci# Input validator functions
6879425bb815Sopenharmony_ci
6880425bb815Sopenharmony_ci## jerry_is_valid_utf8_string
6881425bb815Sopenharmony_ci
6882425bb815Sopenharmony_ci**Summary**
6883425bb815Sopenharmony_ci
6884425bb815Sopenharmony_ciCheck if a given character buffer is a valid UTF-8 string.
6885425bb815Sopenharmony_ci
6886425bb815Sopenharmony_ci**Notes**: Calling this method is safe in any time. It can be called
6887425bb815Sopenharmony_cieven before engine initialization.
6888425bb815Sopenharmony_ci
6889425bb815Sopenharmony_ci**Prototype**
6890425bb815Sopenharmony_ci
6891425bb815Sopenharmony_ci```c
6892425bb815Sopenharmony_cibool
6893425bb815Sopenharmony_cijerry_is_valid_utf8_string (const jerry_char_t *utf8_buf_p, /**< UTF-8 string */
6894425bb815Sopenharmony_ci                            jerry_size_t buf_size) /**< string size */
6895425bb815Sopenharmony_ci```
6896425bb815Sopenharmony_ci
6897425bb815Sopenharmony_ci- `utf8_buf_p` - UTF-8 input string buffer.
6898425bb815Sopenharmony_ci- `buf_size` - input string buffer size in bytes.
6899425bb815Sopenharmony_ci- return value
6900425bb815Sopenharmony_ci  - true, if the provided string was a valid UTF-8 string.
6901425bb815Sopenharmony_ci  - false, if the string is not valid as an UTF-8 string.
6902425bb815Sopenharmony_ci
6903425bb815Sopenharmony_ci*New in version 2.0*.
6904425bb815Sopenharmony_ci
6905425bb815Sopenharmony_ci**Example**
6906425bb815Sopenharmony_ci
6907425bb815Sopenharmony_ci[doctest]: # ()
6908425bb815Sopenharmony_ci
6909425bb815Sopenharmony_ci```c
6910425bb815Sopenharmony_ci#include "jerryscript.h"
6911425bb815Sopenharmony_ci
6912425bb815Sopenharmony_ciint
6913425bb815Sopenharmony_cimain (void)
6914425bb815Sopenharmony_ci{
6915425bb815Sopenharmony_ci  const jerry_char_t script[] = "print ('Hello, World!');";
6916425bb815Sopenharmony_ci  const jerry_size_t script_size = sizeof (script) - 1;
6917425bb815Sopenharmony_ci
6918425bb815Sopenharmony_ci  if (jerry_is_valid_utf8_string (script, script_size))
6919425bb815Sopenharmony_ci  {
6920425bb815Sopenharmony_ci    jerry_run_simple (script, script_size, JERRY_INIT_EMPTY);
6921425bb815Sopenharmony_ci  }
6922425bb815Sopenharmony_ci
6923425bb815Sopenharmony_ci  return 0;
6924425bb815Sopenharmony_ci}
6925425bb815Sopenharmony_ci```
6926425bb815Sopenharmony_ci
6927425bb815Sopenharmony_ci**See also**
6928425bb815Sopenharmony_ci
6929425bb815Sopenharmony_ci- [jerry_run_simple](#jerry_run_simple)
6930425bb815Sopenharmony_ci- [jerry_create_string_from_utf8](#jerry_create_string_from_utf8)
6931425bb815Sopenharmony_ci- [jerry_create_string_sz_from_utf8](#jerry_create_string_sz_from_utf8)
6932425bb815Sopenharmony_ci- [jerry_get_utf8_string_size](#jerry_get_utf8_string_size)
6933425bb815Sopenharmony_ci- [jerry_get_utf8_string_length](#jerry_get_utf8_string_length)
6934425bb815Sopenharmony_ci- [jerry_string_to_utf8_char_buffer](#jerry_string_to_utf8_char_buffer)
6935425bb815Sopenharmony_ci- [jerry_substring_to_utf8_char_buffer](#jerry_substring_to_utf8_char_buffer)
6936425bb815Sopenharmony_ci
6937425bb815Sopenharmony_ci## jerry_is_valid_cesu8_string
6938425bb815Sopenharmony_ci
6939425bb815Sopenharmony_ci**Summary**
6940425bb815Sopenharmony_ci
6941425bb815Sopenharmony_ciCheck if a given character buffer is a valid CESU-8 string.
6942425bb815Sopenharmony_ci
6943425bb815Sopenharmony_ci**Notes**: Calling this method is safe in any time. It can be called
6944425bb815Sopenharmony_cieven before engine initialization.
6945425bb815Sopenharmony_ci
6946425bb815Sopenharmony_ci**Prototype**
6947425bb815Sopenharmony_ci
6948425bb815Sopenharmony_ci```c
6949425bb815Sopenharmony_cibool
6950425bb815Sopenharmony_cijerry_is_valid_cesu8_string (const jerry_char_t *cesu8_buf_p, /**< CESU-8 string */
6951425bb815Sopenharmony_ci                             jerry_size_t buf_size) /**< string size */
6952425bb815Sopenharmony_ci```
6953425bb815Sopenharmony_ci
6954425bb815Sopenharmony_ci- `cesu8_buf_p` - CESU-8 input string buffer.
6955425bb815Sopenharmony_ci- `buf_size` - input string buffer size in bytes.
6956425bb815Sopenharmony_ci- return value
6957425bb815Sopenharmony_ci  - true, if the provided string was a valid CESU-8 string.
6958425bb815Sopenharmony_ci  - false, if the string is not valid as a CESU-8 string.
6959425bb815Sopenharmony_ci
6960425bb815Sopenharmony_ci*New in version 2.0*.
6961425bb815Sopenharmony_ci
6962425bb815Sopenharmony_ci**Example**
6963425bb815Sopenharmony_ci
6964425bb815Sopenharmony_ci[doctest]: # ()
6965425bb815Sopenharmony_ci
6966425bb815Sopenharmony_ci```c
6967425bb815Sopenharmony_ci#include "jerryscript.h"
6968425bb815Sopenharmony_ci
6969425bb815Sopenharmony_ciint
6970425bb815Sopenharmony_cimain (void)
6971425bb815Sopenharmony_ci{
6972425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
6973425bb815Sopenharmony_ci
6974425bb815Sopenharmony_ci  const jerry_char_t script[] = "Hello, World!";
6975425bb815Sopenharmony_ci  const jerry_size_t script_size = sizeof (script) - 1;
6976425bb815Sopenharmony_ci
6977425bb815Sopenharmony_ci  if (jerry_is_valid_cesu8_string (script, script_size))
6978425bb815Sopenharmony_ci  {
6979425bb815Sopenharmony_ci    jerry_value_t string_value = jerry_create_string_sz (script,
6980425bb815Sopenharmony_ci                                                         script_size);
6981425bb815Sopenharmony_ci
6982425bb815Sopenharmony_ci    // usage of string_value
6983425bb815Sopenharmony_ci
6984425bb815Sopenharmony_ci    jerry_release_value (string_value);
6985425bb815Sopenharmony_ci  }
6986425bb815Sopenharmony_ci
6987425bb815Sopenharmony_ci  jerry_cleanup ();
6988425bb815Sopenharmony_ci  return 0;
6989425bb815Sopenharmony_ci}
6990425bb815Sopenharmony_ci```
6991425bb815Sopenharmony_ci
6992425bb815Sopenharmony_ci**See also**
6993425bb815Sopenharmony_ci
6994425bb815Sopenharmony_ci- [jerry_create_string](#jerry_create_string)
6995425bb815Sopenharmony_ci- [jerry_create_string_sz](#jerry_create_string_sz)
6996425bb815Sopenharmony_ci- [jerry_get_string_size](#jerry_get_string_size)
6997425bb815Sopenharmony_ci- [jerry_get_string_length](#jerry_get_string_length)
6998425bb815Sopenharmony_ci- [jerry_string_to_char_buffer](#jerry_string_to_char_buffer)
6999425bb815Sopenharmony_ci- [jerry_substring_to_char_buffer](#jerry_substring_to_char_buffer)
7000425bb815Sopenharmony_ci
7001425bb815Sopenharmony_ci
7002425bb815Sopenharmony_ci# Dynamic memory management functions
7003425bb815Sopenharmony_ci
7004425bb815Sopenharmony_ci## jerry_heap_alloc
7005425bb815Sopenharmony_ci
7006425bb815Sopenharmony_ci**Summary**
7007425bb815Sopenharmony_ci
7008425bb815Sopenharmony_ciAllocate memory on the engine's heap.
7009425bb815Sopenharmony_ci
7010425bb815Sopenharmony_ci*Note*: This function may take away memory from the executed JavaScript code.
7011425bb815Sopenharmony_ciIf any other dynamic memory allocation API is available (e.g., libc malloc), it
7012425bb815Sopenharmony_cishould be used instead.
7013425bb815Sopenharmony_ci
7014425bb815Sopenharmony_ci**Prototype**
7015425bb815Sopenharmony_ci
7016425bb815Sopenharmony_ci```c
7017425bb815Sopenharmony_civoid *jerry_heap_alloc (size_t size);
7018425bb815Sopenharmony_ci```
7019425bb815Sopenharmony_ci
7020425bb815Sopenharmony_ci- `size`: size of the memory block.
7021425bb815Sopenharmony_ci- return value: non-NULL pointer, if the memory is successfully allocated,
7022425bb815Sopenharmony_ci                NULL otherwise.
7023425bb815Sopenharmony_ci
7024425bb815Sopenharmony_ci*New in version 2.0*.
7025425bb815Sopenharmony_ci
7026425bb815Sopenharmony_ci**See also**
7027425bb815Sopenharmony_ci
7028425bb815Sopenharmony_ci- [jerry_heap_free](#jerry_heap_free)
7029425bb815Sopenharmony_ci
7030425bb815Sopenharmony_ci## jerry_heap_free
7031425bb815Sopenharmony_ci
7032425bb815Sopenharmony_ci**Summary**
7033425bb815Sopenharmony_ci
7034425bb815Sopenharmony_ciFree memory allocated on the engine's heap.
7035425bb815Sopenharmony_ci
7036425bb815Sopenharmony_ci**Prototype**
7037425bb815Sopenharmony_ci
7038425bb815Sopenharmony_ci```c
7039425bb815Sopenharmony_civoid jerry_heap_free (void *mem_p, size_t size);
7040425bb815Sopenharmony_ci```
7041425bb815Sopenharmony_ci
7042425bb815Sopenharmony_ci- `mem_p`: value returned by `jerry_heap_alloc`.
7043425bb815Sopenharmony_ci- `size`: same size as passed to `jerry_heap_alloc`.
7044425bb815Sopenharmony_ci
7045425bb815Sopenharmony_ci*New in version 2.0*.
7046425bb815Sopenharmony_ci
7047425bb815Sopenharmony_ci**See also**
7048425bb815Sopenharmony_ci
7049425bb815Sopenharmony_ci- [jerry_heap_alloc](#jerry_heap_alloc)
7050425bb815Sopenharmony_ci
7051425bb815Sopenharmony_ci
7052425bb815Sopenharmony_ci# External context functions
7053425bb815Sopenharmony_ci
7054425bb815Sopenharmony_ci## jerry_create_context
7055425bb815Sopenharmony_ci
7056425bb815Sopenharmony_ci**Summary**
7057425bb815Sopenharmony_ci
7058425bb815Sopenharmony_ciCreate an external JerryScript engine context.
7059425bb815Sopenharmony_ci
7060425bb815Sopenharmony_ci**Prototype**
7061425bb815Sopenharmony_ci
7062425bb815Sopenharmony_ci```c
7063425bb815Sopenharmony_cijerry_context_t *
7064425bb815Sopenharmony_cijerry_create_context (uint32_t heap_size,
7065425bb815Sopenharmony_ci                      jerry_context_alloc_t alloc,
7066425bb815Sopenharmony_ci                      void *cb_data_p);
7067425bb815Sopenharmony_ci```
7068425bb815Sopenharmony_ci
7069425bb815Sopenharmony_ci- `heap_size` - requested heap size of the JerryScript context
7070425bb815Sopenharmony_ci- `alloc` - function for allocation
7071425bb815Sopenharmony_ci- `cb_data_p` - user data
7072425bb815Sopenharmony_ci- return value
7073425bb815Sopenharmony_ci  - pointer to the newly created JerryScript context if success
7074425bb815Sopenharmony_ci  - NULL otherwise.
7075425bb815Sopenharmony_ci
7076425bb815Sopenharmony_ci*New in version 2.0*.
7077425bb815Sopenharmony_ci
7078425bb815Sopenharmony_ci**Example**
7079425bb815Sopenharmony_ci
7080425bb815Sopenharmony_ci[doctest]: # (test="compile", name="02.API-REFERENCE-create-context.c")
7081425bb815Sopenharmony_ci
7082425bb815Sopenharmony_ci```c
7083425bb815Sopenharmony_ci#include <stdlib.h>
7084425bb815Sopenharmony_ci#include <pthread.h>
7085425bb815Sopenharmony_ci
7086425bb815Sopenharmony_ci#include "jerryscript.h"
7087425bb815Sopenharmony_ci#include "jerryscript-port.h"
7088425bb815Sopenharmony_ci
7089425bb815Sopenharmony_ci/* A different Thread Local Storage variable for each jerry context. */
7090425bb815Sopenharmony_ci__thread jerry_context_t *tls_context;
7091425bb815Sopenharmony_ci
7092425bb815Sopenharmony_cijerry_context_t *
7093425bb815Sopenharmony_cijerry_port_get_current_context (void)
7094425bb815Sopenharmony_ci{
7095425bb815Sopenharmony_ci  /* Returns the context assigned to the thread. */
7096425bb815Sopenharmony_ci  return tls_context;
7097425bb815Sopenharmony_ci}
7098425bb815Sopenharmony_ci
7099425bb815Sopenharmony_ci/* Allocate JerryScript heap for each thread. */
7100425bb815Sopenharmony_cistatic void *
7101425bb815Sopenharmony_cicontext_alloc_fn (size_t size, void *cb_data)
7102425bb815Sopenharmony_ci{
7103425bb815Sopenharmony_ci  (void) cb_data;
7104425bb815Sopenharmony_ci  return malloc (size);
7105425bb815Sopenharmony_ci}
7106425bb815Sopenharmony_ci
7107425bb815Sopenharmony_cistatic void *
7108425bb815Sopenharmony_cithread_function (void *param)
7109425bb815Sopenharmony_ci{
7110425bb815Sopenharmony_ci  tls_context = jerry_create_context (512 * 1024,
7111425bb815Sopenharmony_ci                                      context_alloc_fn,
7112425bb815Sopenharmony_ci                                      NULL);
7113425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
7114425bb815Sopenharmony_ci  /* Run JerryScript in the context (e.g.: jerry_parse & jerry_run) */
7115425bb815Sopenharmony_ci  jerry_cleanup ();
7116425bb815Sopenharmony_ci
7117425bb815Sopenharmony_ci  /* Deallocate JerryScript context */
7118425bb815Sopenharmony_ci  free (tls_context);
7119425bb815Sopenharmony_ci
7120425bb815Sopenharmony_ci  return NULL;
7121425bb815Sopenharmony_ci}
7122425bb815Sopenharmony_ci
7123425bb815Sopenharmony_ci#define NUM_OF_THREADS 8
7124425bb815Sopenharmony_ci
7125425bb815Sopenharmony_ciint
7126425bb815Sopenharmony_cimain (void)
7127425bb815Sopenharmony_ci{
7128425bb815Sopenharmony_ci  pthread_t threads[NUM_OF_THREADS];
7129425bb815Sopenharmony_ci
7130425bb815Sopenharmony_ci  /* Create the threads. */
7131425bb815Sopenharmony_ci  for (int i = 0; i < NUM_OF_THREADS; i++)
7132425bb815Sopenharmony_ci  {
7133425bb815Sopenharmony_ci    pthread_create (&threads[i], NULL, thread_function, (void *) (intptr_t) i);
7134425bb815Sopenharmony_ci  }
7135425bb815Sopenharmony_ci
7136425bb815Sopenharmony_ci  /* Wait for the threads to complete, and release their resources. */
7137425bb815Sopenharmony_ci  for (int i = 0; i < NUM_OF_THREADS; i++)
7138425bb815Sopenharmony_ci  {
7139425bb815Sopenharmony_ci    pthread_join (threads[i], NULL);
7140425bb815Sopenharmony_ci  }
7141425bb815Sopenharmony_ci
7142425bb815Sopenharmony_ci  return 0;
7143425bb815Sopenharmony_ci}
7144425bb815Sopenharmony_ci```
7145425bb815Sopenharmony_ci
7146425bb815Sopenharmony_ci**See also**
7147425bb815Sopenharmony_ci
7148425bb815Sopenharmony_ci- [jerry_context_t](#jerry_context_t)
7149425bb815Sopenharmony_ci- [jerry_context_alloc_t](#jerry_context_alloc_t)
7150425bb815Sopenharmony_ci- [jerry_port_get_current_context](05.PORT-API.md#jerry_port_get_current_context)
7151425bb815Sopenharmony_ci
7152425bb815Sopenharmony_ci
7153425bb815Sopenharmony_ci# Snapshot functions
7154425bb815Sopenharmony_ci
7155425bb815Sopenharmony_ci## jerry_generate_snapshot
7156425bb815Sopenharmony_ci
7157425bb815Sopenharmony_ci**Summary**
7158425bb815Sopenharmony_ci
7159425bb815Sopenharmony_ciGenerate snapshot from the specified source code.
7160425bb815Sopenharmony_ci
7161425bb815Sopenharmony_ci*Notes*:
7162425bb815Sopenharmony_ci- Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
7163425bb815Sopenharmony_ci  is no longer needed.
7164425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_SNAPSHOT_SAVE`) and can be checked in runtime with
7165425bb815Sopenharmony_ci  the `JERRY_FEATURE_SNAPSHOT_SAVE` feature enum value, see [jerry_is_feature_enabled](#jerry_is_feature_enabled).
7166425bb815Sopenharmony_ci  If the feature is not enabled the function will return an error.
7167425bb815Sopenharmony_ci
7168425bb815Sopenharmony_ci**Prototype**
7169425bb815Sopenharmony_ci
7170425bb815Sopenharmony_ci```c
7171425bb815Sopenharmony_cijerry_value_t
7172425bb815Sopenharmony_cijerry_generate_snapshot (const jerry_char_t *resource_name_p,
7173425bb815Sopenharmony_ci                         size_t resource_name_length,
7174425bb815Sopenharmony_ci                         const jerry_char_t *source_p,
7175425bb815Sopenharmony_ci                         size_t source_size,
7176425bb815Sopenharmony_ci                         uint32_t generate_snapshot_opts,
7177425bb815Sopenharmony_ci                         uint32_t *buffer_p,
7178425bb815Sopenharmony_ci                         size_t buffer_size);
7179425bb815Sopenharmony_ci```
7180425bb815Sopenharmony_ci
7181425bb815Sopenharmony_ci- `resource_name_p` - resource (file) name of the source code. Currently unused, the debugger may use it in the future.
7182425bb815Sopenharmony_ci- `resource_name_length` - length of resource name.
7183425bb815Sopenharmony_ci- `source_p` - script source, it must be a valid utf8 string.
7184425bb815Sopenharmony_ci- `source_size` - script source size, in bytes.
7185425bb815Sopenharmony_ci- `generate_snapshot_opts` - any combination of [jerry_generate_snapshot_opts_t](#jerry_generate_snapshot_opts_t) flags.
7186425bb815Sopenharmony_ci- `buffer_p` - output buffer (aligned to 4 bytes) to save snapshot to.
7187425bb815Sopenharmony_ci- `buffer_size` - the output buffer's size in bytes.
7188425bb815Sopenharmony_ci- return value
7189425bb815Sopenharmony_ci  - the size of the generated snapshot in bytes as number value, if it was generated succesfully (i.e. there
7190425bb815Sopenharmony_ci    are no syntax errors in source code, buffer size is sufficient, and snapshot support is enabled in
7191425bb815Sopenharmony_ci    current configuration through JERRY_SNAPSHOT_SAVE)
7192425bb815Sopenharmony_ci  - thrown error, otherwise.
7193425bb815Sopenharmony_ci
7194425bb815Sopenharmony_ci*New in version 2.0*.
7195425bb815Sopenharmony_ci
7196425bb815Sopenharmony_ci**Example**
7197425bb815Sopenharmony_ci
7198425bb815Sopenharmony_ci[doctest]: # ()
7199425bb815Sopenharmony_ci
7200425bb815Sopenharmony_ci```c
7201425bb815Sopenharmony_ci#include "jerryscript.h"
7202425bb815Sopenharmony_ci
7203425bb815Sopenharmony_ciint
7204425bb815Sopenharmony_cimain (void)
7205425bb815Sopenharmony_ci{
7206425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
7207425bb815Sopenharmony_ci
7208425bb815Sopenharmony_ci  static uint32_t global_mode_snapshot_buffer[256];
7209425bb815Sopenharmony_ci  const jerry_char_t script_to_snapshot[] = "(function () { return 'string from snapshot'; }) ();";
7210425bb815Sopenharmony_ci
7211425bb815Sopenharmony_ci  jerry_value_t generate_result;
7212425bb815Sopenharmony_ci  generate_result = jerry_generate_snapshot (NULL,
7213425bb815Sopenharmony_ci                                             0,
7214425bb815Sopenharmony_ci                                             script_to_snapshot,
7215425bb815Sopenharmony_ci                                             sizeof (script_to_snapshot) - 1,
7216425bb815Sopenharmony_ci                                             0,
7217425bb815Sopenharmony_ci                                             global_mode_snapshot_buffer,
7218425bb815Sopenharmony_ci                                             sizeof (global_mode_snapshot_buffer) / sizeof (uint32_t));
7219425bb815Sopenharmony_ci
7220425bb815Sopenharmony_ci  if (!jerry_value_is_error (generate_result))
7221425bb815Sopenharmony_ci  {
7222425bb815Sopenharmony_ci    size_t snapshot_size = (size_t) jerry_get_number_value (generate_result);
7223425bb815Sopenharmony_ci  }
7224425bb815Sopenharmony_ci
7225425bb815Sopenharmony_ci  jerry_release_value (generate_result);
7226425bb815Sopenharmony_ci
7227425bb815Sopenharmony_ci  jerry_cleanup ();
7228425bb815Sopenharmony_ci  return 0;
7229425bb815Sopenharmony_ci}
7230425bb815Sopenharmony_ci```
7231425bb815Sopenharmony_ci
7232425bb815Sopenharmony_ci**See also**
7233425bb815Sopenharmony_ci
7234425bb815Sopenharmony_ci- [jerry_init](#jerry_init)
7235425bb815Sopenharmony_ci- [jerry_cleanup](#jerry_cleanup)
7236425bb815Sopenharmony_ci- [jerry_generate_function_snapshot](#jerry_generate_function_snapshot)
7237425bb815Sopenharmony_ci- [jerry_exec_snapshot](#jerry_exec_snapshot)
7238425bb815Sopenharmony_ci
7239425bb815Sopenharmony_ci
7240425bb815Sopenharmony_ci## jerry_generate_function_snapshot
7241425bb815Sopenharmony_ci
7242425bb815Sopenharmony_ci**Summary**
7243425bb815Sopenharmony_ci
7244425bb815Sopenharmony_ciGenerate function snapshot from the specified source code
7245425bb815Sopenharmony_ciwith the given arguments.
7246425bb815Sopenharmony_ci
7247425bb815Sopenharmony_ciThe function arguments and function body are
7248425bb815Sopenharmony_cipassed as separated arguments.
7249425bb815Sopenharmony_ci
7250425bb815Sopenharmony_ci*Notes*:
7251425bb815Sopenharmony_ci- Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
7252425bb815Sopenharmony_ci  is no longer needed.
7253425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_SNAPSHOT_SAVE`) and can be checked in runtime with
7254425bb815Sopenharmony_ci  the `JERRY_FEATURE_SNAPSHOT_SAVE` feature enum value, see [jerry_is_feature_enabled](#jerry_is_feature_enabled).
7255425bb815Sopenharmony_ci  If the feature is not enabled the function will return an error.
7256425bb815Sopenharmony_ci
7257425bb815Sopenharmony_ci**Prototype**
7258425bb815Sopenharmony_ci
7259425bb815Sopenharmony_ci```c
7260425bb815Sopenharmony_cijerry_value_t
7261425bb815Sopenharmony_cijerry_generate_function_snapshot (const jerry_char_t *resource_name_p,
7262425bb815Sopenharmony_ci                                  size_t resource_name_length,
7263425bb815Sopenharmony_ci                                  const jerry_char_t *source_p,
7264425bb815Sopenharmony_ci                                  size_t source_size,
7265425bb815Sopenharmony_ci                                  const jerry_char_t *args_p,
7266425bb815Sopenharmony_ci                                  size_t args_size,
7267425bb815Sopenharmony_ci                                  uint32_t generate_snapshot_opts,
7268425bb815Sopenharmony_ci                                  uint32_t *buffer_p,
7269425bb815Sopenharmony_ci                                  size_t buffer_size)
7270425bb815Sopenharmony_ci```
7271425bb815Sopenharmony_ci
7272425bb815Sopenharmony_ci- `resource_name_p` - resource (file) name of the source code. Currently unused, the debugger may use it in the future.
7273425bb815Sopenharmony_ci- `resource_name_length` - length of resource name.
7274425bb815Sopenharmony_ci- `source_p` - script source, it must be a valid utf8 string.
7275425bb815Sopenharmony_ci- `source_size` - script source size, in bytes.
7276425bb815Sopenharmony_ci- `args_p` - function arguments, it must be a valid utf8 string.
7277425bb815Sopenharmony_ci- `args_size` - function argument size, in bytes.
7278425bb815Sopenharmony_ci- `generate_snapshot_opts` - any combination of [jerry_generate_snapshot_opts_t](#jerry_generate_snapshot_opts_t) flags.
7279425bb815Sopenharmony_ci- `buffer_p` - buffer (aligned to 4 bytes) to save snapshot to.
7280425bb815Sopenharmony_ci- `buffer_size` - the buffer's size in bytes.
7281425bb815Sopenharmony_ci- return value
7282425bb815Sopenharmony_ci  - the size of the generated snapshot in bytes as number value, if it was generated succesfully (i.e. there
7283425bb815Sopenharmony_ci    are no syntax errors in source code, buffer size is sufficient, and snapshot support is enabled in
7284425bb815Sopenharmony_ci    current configuration through JERRY_SNAPSHOT_SAVE)
7285425bb815Sopenharmony_ci  - thrown error, otherwise.
7286425bb815Sopenharmony_ci
7287425bb815Sopenharmony_ci*New in version 2.0*.
7288425bb815Sopenharmony_ci
7289425bb815Sopenharmony_ci**Example**
7290425bb815Sopenharmony_ci
7291425bb815Sopenharmony_ci[doctest]: # ()
7292425bb815Sopenharmony_ci
7293425bb815Sopenharmony_ci```c
7294425bb815Sopenharmony_ci#include "jerryscript.h"
7295425bb815Sopenharmony_ci
7296425bb815Sopenharmony_ciint
7297425bb815Sopenharmony_cimain (void)
7298425bb815Sopenharmony_ci{
7299425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
7300425bb815Sopenharmony_ci
7301425bb815Sopenharmony_ci  static uint32_t func_snapshot_buffer[256];
7302425bb815Sopenharmony_ci  const jerry_char_t args[] = "a, b";
7303425bb815Sopenharmony_ci  const jerry_char_t src[] = "return a + b;";
7304425bb815Sopenharmony_ci
7305425bb815Sopenharmony_ci  jerry_value_t generate_result;
7306425bb815Sopenharmony_ci  generate_result = jerry_generate_function_snapshot (NULL,
7307425bb815Sopenharmony_ci                                                      0,
7308425bb815Sopenharmony_ci                                                      src,
7309425bb815Sopenharmony_ci                                                      sizeof (src) - 1,
7310425bb815Sopenharmony_ci                                                      args,
7311425bb815Sopenharmony_ci                                                      sizeof (args) - 1,
7312425bb815Sopenharmony_ci                                                      0,
7313425bb815Sopenharmony_ci                                                      func_snapshot_buffer,
7314425bb815Sopenharmony_ci                                                      sizeof (func_snapshot_buffer) / sizeof (uint32_t));
7315425bb815Sopenharmony_ci
7316425bb815Sopenharmony_ci  if (!jerry_value_is_error (generate_result))
7317425bb815Sopenharmony_ci  {
7318425bb815Sopenharmony_ci    size_t snapshot_size = (size_t) jerry_get_number_value (generate_result);
7319425bb815Sopenharmony_ci  }
7320425bb815Sopenharmony_ci
7321425bb815Sopenharmony_ci  jerry_release_value (generate_result);
7322425bb815Sopenharmony_ci
7323425bb815Sopenharmony_ci  jerry_cleanup ();
7324425bb815Sopenharmony_ci  return 0;
7325425bb815Sopenharmony_ci}
7326425bb815Sopenharmony_ci```
7327425bb815Sopenharmony_ci
7328425bb815Sopenharmony_ci**See also**
7329425bb815Sopenharmony_ci
7330425bb815Sopenharmony_ci- [jerry_init](#jerry_init)
7331425bb815Sopenharmony_ci- [jerry_cleanup](#jerry_cleanup)
7332425bb815Sopenharmony_ci- [jerry_generate_snapshot](#jerry_generate_snapshot)
7333425bb815Sopenharmony_ci- [jerry_load_function_snapshot_at](#jerry_load_function_snapshot_at)
7334425bb815Sopenharmony_ci
7335425bb815Sopenharmony_ci
7336425bb815Sopenharmony_ci## jerry_exec_snapshot
7337425bb815Sopenharmony_ci
7338425bb815Sopenharmony_ci**Summary**
7339425bb815Sopenharmony_ci
7340425bb815Sopenharmony_ciExecute snapshot from the specified buffer.
7341425bb815Sopenharmony_ci
7342425bb815Sopenharmony_ci*Notes*:
7343425bb815Sopenharmony_ci- Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
7344425bb815Sopenharmony_ci  is no longer needed.
7345425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_SNAPSHOT_EXEC`) and can be checked in runtime with
7346425bb815Sopenharmony_ci  the `JERRY_FEATURE_SNAPSHOT_EXEC` feature enum value, see [jerry_is_feature_enabled](#jerry_is_feature_enabled).
7347425bb815Sopenharmony_ci  If the feature is not enabled the function will return an error.
7348425bb815Sopenharmony_ci
7349425bb815Sopenharmony_ci**Prototype**
7350425bb815Sopenharmony_ci
7351425bb815Sopenharmony_ci```c
7352425bb815Sopenharmony_cijerry_value_t
7353425bb815Sopenharmony_cijerry_exec_snapshot (const uint32_t *snapshot_p,
7354425bb815Sopenharmony_ci                     size_t snapshot_size,
7355425bb815Sopenharmony_ci                     size_t func_index,
7356425bb815Sopenharmony_ci                     uint32_t exec_snapshot_opts);
7357425bb815Sopenharmony_ci```
7358425bb815Sopenharmony_ci
7359425bb815Sopenharmony_ci- `snapshot_p` - pointer to snapshot.
7360425bb815Sopenharmony_ci- `snapshot_size` - size of snapshot in bytes.
7361425bb815Sopenharmony_ci- `func_index` - index of executed function.
7362425bb815Sopenharmony_ci- `exec_snapshot_opts` - any combination of [jerry_exec_snapshot_opts_t](#jerry_exec_snapshot_opts_t) flags.
7363425bb815Sopenharmony_ci- return value
7364425bb815Sopenharmony_ci  - result of bytecode, if run was successful.
7365425bb815Sopenharmony_ci  - thrown error, otherwise (an error is reported if the snapshot execution feature is not enabled).
7366425bb815Sopenharmony_ci
7367425bb815Sopenharmony_ci*Changed in version 2.0*: Added `func_index` and `exec_snapshot_opts` arguments. Removed the `copy_bytecode` last argument.
7368425bb815Sopenharmony_ci
7369425bb815Sopenharmony_ci**Example**
7370425bb815Sopenharmony_ci
7371425bb815Sopenharmony_ci[doctest]: # ()
7372425bb815Sopenharmony_ci
7373425bb815Sopenharmony_ci```c
7374425bb815Sopenharmony_ci#include "jerryscript.h"
7375425bb815Sopenharmony_ci
7376425bb815Sopenharmony_ciint
7377425bb815Sopenharmony_cimain (void)
7378425bb815Sopenharmony_ci{
7379425bb815Sopenharmony_ci  static uint32_t global_mode_snapshot_buffer[256];
7380425bb815Sopenharmony_ci  const jerry_char_t script_to_snapshot[] = "(function () { return 'string from snapshot'; }) ();";
7381425bb815Sopenharmony_ci
7382425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
7383425bb815Sopenharmony_ci
7384425bb815Sopenharmony_ci  jerry_value_t generate_result;
7385425bb815Sopenharmony_ci  generate_result = jerry_generate_snapshot (NULL,
7386425bb815Sopenharmony_ci                                             0,
7387425bb815Sopenharmony_ci                                             script_to_snapshot,
7388425bb815Sopenharmony_ci                                             sizeof (script_to_snapshot) - 1,
7389425bb815Sopenharmony_ci                                             0,
7390425bb815Sopenharmony_ci                                             global_mode_snapshot_buffer,
7391425bb815Sopenharmony_ci                                             sizeof (global_mode_snapshot_buffer) / sizeof (uint32_t));
7392425bb815Sopenharmony_ci  // generate_result should be checked if it is an error or not
7393425bb815Sopenharmony_ci
7394425bb815Sopenharmony_ci  size_t global_mode_snapshot_size = (size_t) jerry_get_number_value (generate_result);
7395425bb815Sopenharmony_ci  jerry_release_value (generate_result);
7396425bb815Sopenharmony_ci
7397425bb815Sopenharmony_ci  jerry_cleanup ();
7398425bb815Sopenharmony_ci
7399425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
7400425bb815Sopenharmony_ci
7401425bb815Sopenharmony_ci  jerry_value_t res = jerry_exec_snapshot (global_mode_snapshot_buffer,
7402425bb815Sopenharmony_ci                                           global_mode_snapshot_size,
7403425bb815Sopenharmony_ci                                           0,
7404425bb815Sopenharmony_ci                                           0);
7405425bb815Sopenharmony_ci
7406425bb815Sopenharmony_ci  // check the `res` value for error and process the result.
7407425bb815Sopenharmony_ci
7408425bb815Sopenharmony_ci  jerry_release_value (res);
7409425bb815Sopenharmony_ci
7410425bb815Sopenharmony_ci  jerry_cleanup ();
7411425bb815Sopenharmony_ci  return 0;
7412425bb815Sopenharmony_ci}
7413425bb815Sopenharmony_ci```
7414425bb815Sopenharmony_ci
7415425bb815Sopenharmony_ci**See also**
7416425bb815Sopenharmony_ci
7417425bb815Sopenharmony_ci- [jerry_init](#jerry_init)
7418425bb815Sopenharmony_ci- [jerry_cleanup](#jerry_cleanup)
7419425bb815Sopenharmony_ci- [jerry_parse_and_save_snapshot](#jerry_parse_and_save_snapshot)
7420425bb815Sopenharmony_ci
7421425bb815Sopenharmony_ci
7422425bb815Sopenharmony_ci## jerry_load_function_snapshot
7423425bb815Sopenharmony_ci
7424425bb815Sopenharmony_ci**Summary**
7425425bb815Sopenharmony_ci
7426425bb815Sopenharmony_ciLoad the selected snapshot function from the specified buffer as a function object.
7427425bb815Sopenharmony_ci
7428425bb815Sopenharmony_ciThe lexical environment of the loaded function is always the global lexical environment.
7429425bb815Sopenharmony_ci
7430425bb815Sopenharmony_ci*Notes*:
7431425bb815Sopenharmony_ci- Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
7432425bb815Sopenharmony_ci  is no longer needed.
7433425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_SNAPSHOT_EXEC`) and can be checked in runtime with
7434425bb815Sopenharmony_ci  the `JERRY_FEATURE_SNAPSHOT_EXEC` feature enum value, see [jerry_is_feature_enabled](#jerry_is_feature_enabled).
7435425bb815Sopenharmony_ci  If the feature is not enabled the function will return an error.
7436425bb815Sopenharmony_ci
7437425bb815Sopenharmony_ci**Prototype**
7438425bb815Sopenharmony_ci
7439425bb815Sopenharmony_ci```c
7440425bb815Sopenharmony_cijerry_value_t
7441425bb815Sopenharmony_cijerry_load_function_snapshot (const uint32_t *snapshot_p,
7442425bb815Sopenharmony_ci                              size_t snapshot_size,
7443425bb815Sopenharmony_ci                              size_t func_index,
7444425bb815Sopenharmony_ci                              uint32_t exec_snapshot_opts);
7445425bb815Sopenharmony_ci```
7446425bb815Sopenharmony_ci
7447425bb815Sopenharmony_ci- `snapshot_p` - pointer to snapshot.
7448425bb815Sopenharmony_ci- `snapshot_size` - size of snapshot in bytes.
7449425bb815Sopenharmony_ci- `func_index` - index of function to load from the snapshot.
7450425bb815Sopenharmony_ci- `exec_snapshot_opts` - any combination of [jerry_exec_snapshot_opts_t](#jerry_exec_snapshot_opts_t) flags.
7451425bb815Sopenharmony_ci- return value
7452425bb815Sopenharmony_ci  - function object built from the snapshot.
7453425bb815Sopenharmony_ci  - thrown error, otherwise.
7454425bb815Sopenharmony_ci
7455425bb815Sopenharmony_ci*New in version 2.0*.
7456425bb815Sopenharmony_ci
7457425bb815Sopenharmony_ci**Example**
7458425bb815Sopenharmony_ci
7459425bb815Sopenharmony_ci[doctest]: # ()
7460425bb815Sopenharmony_ci
7461425bb815Sopenharmony_ci```c
7462425bb815Sopenharmony_ci#include "jerryscript.h"
7463425bb815Sopenharmony_ci
7464425bb815Sopenharmony_ciint
7465425bb815Sopenharmony_cimain (void)
7466425bb815Sopenharmony_ci{
7467425bb815Sopenharmony_ci  static uint32_t snapshot_buffer[256];
7468425bb815Sopenharmony_ci  const jerry_char_t func_args[] = "a, b";
7469425bb815Sopenharmony_ci  const jerry_char_t func_src[] = "return a + b;";
7470425bb815Sopenharmony_ci
7471425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
7472425bb815Sopenharmony_ci
7473425bb815Sopenharmony_ci  jerry_value_t generate_result;
7474425bb815Sopenharmony_ci  generate_result = jerry_generate_function_snapshot (NULL,
7475425bb815Sopenharmony_ci                                                      0,
7476425bb815Sopenharmony_ci                                                      func_src,
7477425bb815Sopenharmony_ci                                                      sizeof (func_src) - 1,
7478425bb815Sopenharmony_ci                                                      func_args,
7479425bb815Sopenharmony_ci                                                      sizeof (func_args) - 1,
7480425bb815Sopenharmony_ci                                                      false,
7481425bb815Sopenharmony_ci                                                      snapshot_buffer,
7482425bb815Sopenharmony_ci                                                      sizeof (snapshot_buffer) / sizeof (uint32_t));
7483425bb815Sopenharmony_ci
7484425bb815Sopenharmony_ci  size_t snapshot_size = (size_t) jerry_get_number_value (generate_result);
7485425bb815Sopenharmony_ci  jerry_release_value (generate_result);
7486425bb815Sopenharmony_ci
7487425bb815Sopenharmony_ci  jerry_cleanup ();
7488425bb815Sopenharmony_ci
7489425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
7490425bb815Sopenharmony_ci
7491425bb815Sopenharmony_ci  jerry_value_t func = jerry_load_function_snapshot (snapshot_buffer,
7492425bb815Sopenharmony_ci                                                     snapshot_size,
7493425bb815Sopenharmony_ci                                                     0,
7494425bb815Sopenharmony_ci                                                     0);
7495425bb815Sopenharmony_ci  /* 'func' can be used now as a function object */
7496425bb815Sopenharmony_ci
7497425bb815Sopenharmony_ci  jerry_value_t this_value = jerry_create_undefined ();
7498425bb815Sopenharmony_ci  jerry_value_t args[2];
7499425bb815Sopenharmony_ci  args[0] = jerry_create_number (1.0);
7500425bb815Sopenharmony_ci  args[1] = jerry_create_number (2.0);
7501425bb815Sopenharmony_ci
7502425bb815Sopenharmony_ci  jerry_value_t res = jerry_call_function (func, this_value, args, 2);
7503425bb815Sopenharmony_ci
7504425bb815Sopenharmony_ci  /* 'res' now contains the value 3 as a jerry_value_t */
7505425bb815Sopenharmony_ci
7506425bb815Sopenharmony_ci  jerry_release_value (args[0]);
7507425bb815Sopenharmony_ci  jerry_release_value (args[1]);
7508425bb815Sopenharmony_ci  jerry_release_value (this_value);
7509425bb815Sopenharmony_ci  jerry_release_value (func);
7510425bb815Sopenharmony_ci
7511425bb815Sopenharmony_ci  jerry_cleanup ();
7512425bb815Sopenharmony_ci  return 0;
7513425bb815Sopenharmony_ci}
7514425bb815Sopenharmony_ci```
7515425bb815Sopenharmony_ci
7516425bb815Sopenharmony_ci**See also**
7517425bb815Sopenharmony_ci
7518425bb815Sopenharmony_ci- [jerry_init](#jerry_init)
7519425bb815Sopenharmony_ci- [jerry_cleanup](#jerry_cleanup)
7520425bb815Sopenharmony_ci- [jerry_parse_and_save_function_snapshot](#jerry_parse_and_save_function_snapshot)
7521425bb815Sopenharmony_ci
7522425bb815Sopenharmony_ci
7523425bb815Sopenharmony_ci## jerry_get_literals_from_snapshot
7524425bb815Sopenharmony_ci
7525425bb815Sopenharmony_ci**Summary**
7526425bb815Sopenharmony_ci
7527425bb815Sopenharmony_ciCollect the used literals from the given snapshot and save them into a buffer in list or C format.
7528425bb815Sopenharmony_ciNone of these literals are magic strings. In C format only valid identifiers are collected.
7529425bb815Sopenharmony_ci
7530425bb815Sopenharmony_ci*Note*:
7531425bb815Sopenharmony_ci- This API depends on a build option (`JERRY_SNAPSHOT_SAVE`) and can be checked in runtime with
7532425bb815Sopenharmony_ci  the `JERRY_FEATURE_SNAPSHOT_SAVE` feature enum value, see [jerry_is_feature_enabled](#jerry_is_feature_enabled).
7533425bb815Sopenharmony_ci  If the feature is not enabled the function will return zero.
7534425bb815Sopenharmony_ci
7535425bb815Sopenharmony_ci**Prototype**
7536425bb815Sopenharmony_ci
7537425bb815Sopenharmony_ci```c
7538425bb815Sopenharmony_cisize_t
7539425bb815Sopenharmony_cijerry_get_literals_from_snapshot (const uint32_t *snapshot_p,
7540425bb815Sopenharmony_ci                                  size_t snapshot_size,
7541425bb815Sopenharmony_ci                                  jerry_char_t *lit_buf_p,
7542425bb815Sopenharmony_ci                                  size_t lit_buf_size,
7543425bb815Sopenharmony_ci                                  bool is_c_format);
7544425bb815Sopenharmony_ci```
7545425bb815Sopenharmony_ci
7546425bb815Sopenharmony_ci- `snapshot_p` - input snapshot buffer.
7547425bb815Sopenharmony_ci- `snapshot_size` - size of snapshot in bytes.
7548425bb815Sopenharmony_ci- `lit_buf_p` - buffer to save literals to.
7549425bb815Sopenharmony_ci- `lit_buf_size` - the buffer's size.
7550425bb815Sopenharmony_ci- `is_c_format` - the output format would be C-style (true) or a simple list (false).
7551425bb815Sopenharmony_ci- return value
7552425bb815Sopenharmony_ci  - the size of the literal-list, if it was generated succesfully (i.e. the list of literals isn't empty,
7553425bb815Sopenharmony_ci    and literal-save support is enabled in current configuration through JERRY_SNAPSHOT_SAVE)
7554425bb815Sopenharmony_ci  - 0 otherwise.
7555425bb815Sopenharmony_ci
7556425bb815Sopenharmony_ci*New in version 2.0*.
7557425bb815Sopenharmony_ci
7558425bb815Sopenharmony_ci**Example**
7559425bb815Sopenharmony_ci
7560425bb815Sopenharmony_ci[doctest]: # (test="link")
7561425bb815Sopenharmony_ci
7562425bb815Sopenharmony_ci```c
7563425bb815Sopenharmony_ci#include <stdio.h>
7564425bb815Sopenharmony_ci#include "jerryscript.h"
7565425bb815Sopenharmony_ci
7566425bb815Sopenharmony_ciint
7567425bb815Sopenharmony_cimain (void)
7568425bb815Sopenharmony_ci{
7569425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
7570425bb815Sopenharmony_ci
7571425bb815Sopenharmony_ci  static jerry_char_t literal_buffer[256];
7572425bb815Sopenharmony_ci  static uint32_t snapshot_buffer[256];
7573425bb815Sopenharmony_ci  const jerry_char_t script_for_literal_save[] = "var obj = { a:'aa', bb:'Bb' }";
7574425bb815Sopenharmony_ci
7575425bb815Sopenharmony_ci  jerry_value_t generate_result = jerry_generate_snapshot (NULL,
7576425bb815Sopenharmony_ci                                                           0,
7577425bb815Sopenharmony_ci                                                           script_for_literal_save,
7578425bb815Sopenharmony_ci                                                           sizeof (script_for_literal_save) - 1,
7579425bb815Sopenharmony_ci                                                           0,
7580425bb815Sopenharmony_ci                                                           snapshot_buffer,
7581425bb815Sopenharmony_ci                                                           256);
7582425bb815Sopenharmony_ci  size_t snapshot_size = (size_t) jerry_get_number_value (generate_result);
7583425bb815Sopenharmony_ci  jerry_release_value (generate_result);
7584425bb815Sopenharmony_ci
7585425bb815Sopenharmony_ci  const size_t literal_size = jerry_get_literals_from_snapshot (snapshot_buffer,
7586425bb815Sopenharmony_ci                                                                snapshot_size,
7587425bb815Sopenharmony_ci                                                                literal_buffer,
7588425bb815Sopenharmony_ci                                                                256,
7589425bb815Sopenharmony_ci                                                                true);
7590425bb815Sopenharmony_ci
7591425bb815Sopenharmony_ci  if (literal_size != 0)
7592425bb815Sopenharmony_ci  {
7593425bb815Sopenharmony_ci    FILE *literal_file_p = fopen ("literals.h", "wb");
7594425bb815Sopenharmony_ci    fwrite (literal_buffer, sizeof (uint8_t), literal_size, literal_file_p);
7595425bb815Sopenharmony_ci    fclose (literal_file_p);
7596425bb815Sopenharmony_ci  }
7597425bb815Sopenharmony_ci
7598425bb815Sopenharmony_ci  jerry_cleanup ();
7599425bb815Sopenharmony_ci  return 0;
7600425bb815Sopenharmony_ci}
7601425bb815Sopenharmony_ci```
7602425bb815Sopenharmony_ci
7603425bb815Sopenharmony_ci**See also**
7604425bb815Sopenharmony_ci
7605425bb815Sopenharmony_ci- [jerry_init](#jerry_init)
7606425bb815Sopenharmony_ci- [jerry_cleanup](#jerry_cleanup)
7607425bb815Sopenharmony_ci- [jerry_register_magic_strings](#jerry_register_magic_strings)
7608425bb815Sopenharmony_ci
7609425bb815Sopenharmony_ci
7610425bb815Sopenharmony_ci# Miscellaneous functions
7611425bb815Sopenharmony_ci
7612425bb815Sopenharmony_ci## jerry_set_vm_exec_stop_callback
7613425bb815Sopenharmony_ci
7614425bb815Sopenharmony_ci**Summary**
7615425bb815Sopenharmony_ci
7616425bb815Sopenharmony_ciWhen JERRY_FEATURE_VM_EXEC_STOP is enabled a callback function can be
7617425bb815Sopenharmony_cispecified by this function. This callback is periodically called when
7618425bb815Sopenharmony_ciJerryScript executes an ECMAScript program.
7619425bb815Sopenharmony_ci
7620425bb815Sopenharmony_ciIf the callback returns with undefined value the ECMAScript execution
7621425bb815Sopenharmony_cicontinues. Otherwise the result is thrown by the engine (if the error
7622425bb815Sopenharmony_ciflag is not set for the returned value the engine automatically sets
7623425bb815Sopenharmony_ciit). The callback function might be called again even if it threw
7624425bb815Sopenharmony_cian error. In this case the function must throw the same error again.
7625425bb815Sopenharmony_ci
7626425bb815Sopenharmony_ciTo reduce the CPU overhead of constantly checking the termination
7627425bb815Sopenharmony_cicondition the callback is called when a backward jump is executed
7628425bb815Sopenharmony_cior an exception is caught. Setting the `frequency` to a greater
7629425bb815Sopenharmony_cithan `1` value reduces this overhead further. If its value is N
7630425bb815Sopenharmony_cionly every Nth event (backward jump, etc.) trigger the next check.
7631425bb815Sopenharmony_ci
7632425bb815Sopenharmony_ci
7633425bb815Sopenharmony_ci**Prototype**
7634425bb815Sopenharmony_ci
7635425bb815Sopenharmony_ci```c
7636425bb815Sopenharmony_civoid
7637425bb815Sopenharmony_cijerry_set_vm_exec_stop_callback (jerry_vm_exec_stop_callback_t stop_cb,
7638425bb815Sopenharmony_ci                                 void *user_p,
7639425bb815Sopenharmony_ci                                 uint32_t frequency);
7640425bb815Sopenharmony_ci```
7641425bb815Sopenharmony_ci
7642425bb815Sopenharmony_ci- `stop_cb` - periodically called callback (passing NULL disables this feature)
7643425bb815Sopenharmony_ci- `user_p` - user pointer passed to the `stop_cb` function
7644425bb815Sopenharmony_ci- `frequency` - frequency of calling the `stop_cb` function
7645425bb815Sopenharmony_ci
7646425bb815Sopenharmony_ci*New in version 2.0*.
7647425bb815Sopenharmony_ci
7648425bb815Sopenharmony_ci**Example**
7649425bb815Sopenharmony_ci
7650425bb815Sopenharmony_ci[doctest]: # (test="link")
7651425bb815Sopenharmony_ci
7652425bb815Sopenharmony_ci```c
7653425bb815Sopenharmony_ci#include "jerryscript.h"
7654425bb815Sopenharmony_ci
7655425bb815Sopenharmony_cistatic int countdown = 10;
7656425bb815Sopenharmony_ci
7657425bb815Sopenharmony_cistatic jerry_value_t
7658425bb815Sopenharmony_civm_exec_stop_callback (void *user_p)
7659425bb815Sopenharmony_ci{
7660425bb815Sopenharmony_ci  while (countdown > 0)
7661425bb815Sopenharmony_ci  {
7662425bb815Sopenharmony_ci    countdown--;
7663425bb815Sopenharmony_ci    return jerry_create_undefined ();
7664425bb815Sopenharmony_ci  }
7665425bb815Sopenharmony_ci
7666425bb815Sopenharmony_ci  // The error flag is added automatically.
7667425bb815Sopenharmony_ci  return jerry_create_string ((const jerry_char_t *) "Abort script");
7668425bb815Sopenharmony_ci}
7669425bb815Sopenharmony_ci
7670425bb815Sopenharmony_ciint
7671425bb815Sopenharmony_cimain (void)
7672425bb815Sopenharmony_ci{
7673425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
7674425bb815Sopenharmony_ci
7675425bb815Sopenharmony_ci  jerry_set_vm_exec_stop_callback (vm_exec_stop_callback, &countdown, 16);
7676425bb815Sopenharmony_ci
7677425bb815Sopenharmony_ci  // Inifinte loop.
7678425bb815Sopenharmony_ci  const jerry_char_t script[] = "while(true) {}";
7679425bb815Sopenharmony_ci
7680425bb815Sopenharmony_ci  jerry_value_t parsed_code = jerry_parse (NULL, 0, script, sizeof (script) - 1, JERRY_PARSE_NO_OPTS);
7681425bb815Sopenharmony_ci  jerry_release_value (jerry_run (parsed_code));
7682425bb815Sopenharmony_ci  jerry_release_value (parsed_code);
7683425bb815Sopenharmony_ci  jerry_cleanup ();
7684425bb815Sopenharmony_ci}
7685425bb815Sopenharmony_ci```
7686425bb815Sopenharmony_ci
7687425bb815Sopenharmony_ci**See also**
7688425bb815Sopenharmony_ci
7689425bb815Sopenharmony_ci- [jerry_init](#jerry_init)
7690425bb815Sopenharmony_ci- [jerry_cleanup](#jerry_cleanup)
7691425bb815Sopenharmony_ci- [jerry_parse](#jerry_parse)
7692425bb815Sopenharmony_ci- [jerry_run](#jerry_run)
7693425bb815Sopenharmony_ci- [jerry_vm_exec_stop_callback_t](#jerry_vm_exec_stop_callback_t)
7694425bb815Sopenharmony_ci
7695425bb815Sopenharmony_ci## jerry_get_backtrace
7696425bb815Sopenharmony_ci
7697425bb815Sopenharmony_ci**Summary**
7698425bb815Sopenharmony_ci
7699425bb815Sopenharmony_ciGet backtrace. The backtrace is an array of strings where
7700425bb815Sopenharmony_cieach string contains the position of the corresponding frame.
7701425bb815Sopenharmony_ciThe array length is zero if the backtrace is not available.
7702425bb815Sopenharmony_ci
7703425bb815Sopenharmony_ciThis function is typically called from native callbacks.
7704425bb815Sopenharmony_ci
7705425bb815Sopenharmony_ci*Notes*:
7706425bb815Sopenharmony_ci- Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
7707425bb815Sopenharmony_ciis no longer needed.
7708425bb815Sopenharmony_ci- This feature depends on build option (`JERRY_LINE_INFO`) and can be checked
7709425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_LINE_INFO` feature enum value,
7710425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
7711425bb815Sopenharmony_ci
7712425bb815Sopenharmony_ci**Prototype**
7713425bb815Sopenharmony_ci
7714425bb815Sopenharmony_ci```c
7715425bb815Sopenharmony_cijerry_value_t
7716425bb815Sopenharmony_cijerry_get_backtrace (uint32_t max_depth);
7717425bb815Sopenharmony_ci```
7718425bb815Sopenharmony_ci
7719425bb815Sopenharmony_ci- `max_depth` - backtrace collection stops after reaching this value, 0 = unlimited
7720425bb815Sopenharmony_ci- return value
7721425bb815Sopenharmony_ci  - a newly constructed JS array
7722425bb815Sopenharmony_ci
7723425bb815Sopenharmony_ci*New in version 2.0*.
7724425bb815Sopenharmony_ci
7725425bb815Sopenharmony_ci**Example**
7726425bb815Sopenharmony_ci
7727425bb815Sopenharmony_ci[doctest]: # (name="02.API-REFERENCE-jsbacktrace.c")
7728425bb815Sopenharmony_ci
7729425bb815Sopenharmony_ci```c
7730425bb815Sopenharmony_ci#include <stdio.h>
7731425bb815Sopenharmony_ci#include <string.h>
7732425bb815Sopenharmony_ci#include "jerryscript.h"
7733425bb815Sopenharmony_ci
7734425bb815Sopenharmony_cistatic jerry_value_t
7735425bb815Sopenharmony_cibacktrace_handler (const jerry_value_t function_obj,
7736425bb815Sopenharmony_ci                   const jerry_value_t this_val,
7737425bb815Sopenharmony_ci                   const jerry_value_t args_p[],
7738425bb815Sopenharmony_ci                   const jerry_length_t args_count)
7739425bb815Sopenharmony_ci{
7740425bb815Sopenharmony_ci  if (!jerry_is_feature_enabled (JERRY_FEATURE_LINE_INFO))
7741425bb815Sopenharmony_ci  {
7742425bb815Sopenharmony_ci    printf ("Line info disabled, no backtrace will be printed\n");
7743425bb815Sopenharmony_ci  }
7744425bb815Sopenharmony_ci
7745425bb815Sopenharmony_ci  /* If the line info feature is disabled an empty array will be returned. */
7746425bb815Sopenharmony_ci  jerry_value_t backtrace_array = jerry_get_backtrace (5);
7747425bb815Sopenharmony_ci  uint32_t array_length = jerry_get_array_length (backtrace_array);
7748425bb815Sopenharmony_ci
7749425bb815Sopenharmony_ci  for (uint32_t idx = 0; idx < array_length; idx++)
7750425bb815Sopenharmony_ci  {
7751425bb815Sopenharmony_ci    jerry_value_t property = jerry_get_property_by_index (backtrace_array, idx);
7752425bb815Sopenharmony_ci
7753425bb815Sopenharmony_ci    jerry_char_t string_buffer[64];
7754425bb815Sopenharmony_ci    jerry_size_t copied_bytes = jerry_substring_to_char_buffer (property,
7755425bb815Sopenharmony_ci                                                                0,
7756425bb815Sopenharmony_ci                                                                63,
7757425bb815Sopenharmony_ci                                                                string_buffer,
7758425bb815Sopenharmony_ci                                                                63);
7759425bb815Sopenharmony_ci    string_buffer[copied_bytes] = '\0';
7760425bb815Sopenharmony_ci    printf(" %d: %s\n", idx, string_buffer);
7761425bb815Sopenharmony_ci
7762425bb815Sopenharmony_ci    jerry_release_value (property);
7763425bb815Sopenharmony_ci  }
7764425bb815Sopenharmony_ci
7765425bb815Sopenharmony_ci  jerry_release_value (backtrace_array);
7766425bb815Sopenharmony_ci
7767425bb815Sopenharmony_ci  return jerry_create_undefined ();
7768425bb815Sopenharmony_ci} /* backtrace_handler */
7769425bb815Sopenharmony_ci
7770425bb815Sopenharmony_ciint
7771425bb815Sopenharmony_cimain (void)
7772425bb815Sopenharmony_ci{
7773425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
7774425bb815Sopenharmony_ci
7775425bb815Sopenharmony_ci  jerry_value_t global = jerry_get_global_object ();
7776425bb815Sopenharmony_ci
7777425bb815Sopenharmony_ci  /* Register the "dump_backtrace" method. */
7778425bb815Sopenharmony_ci  {
7779425bb815Sopenharmony_ci    jerry_value_t func = jerry_create_external_function (backtrace_handler);
7780425bb815Sopenharmony_ci    jerry_value_t name = jerry_create_string ((const jerry_char_t *) "backtrace");
7781425bb815Sopenharmony_ci    jerry_value_t result = jerry_set_property (global, name, func);
7782425bb815Sopenharmony_ci    jerry_release_value (result);
7783425bb815Sopenharmony_ci    jerry_release_value (name);
7784425bb815Sopenharmony_ci    jerry_release_value (func);
7785425bb815Sopenharmony_ci  }
7786425bb815Sopenharmony_ci
7787425bb815Sopenharmony_ci  jerry_release_value (global);
7788425bb815Sopenharmony_ci
7789425bb815Sopenharmony_ci  const char *source = ("function f() { g (); }\n"
7790425bb815Sopenharmony_ci                        "function g() { h (); }\n"
7791425bb815Sopenharmony_ci                        "function h() { backtrace (); }\n"
7792425bb815Sopenharmony_ci                        "f ();\n");
7793425bb815Sopenharmony_ci  const char *resource = "demo_memoryjs";
7794425bb815Sopenharmony_ci
7795425bb815Sopenharmony_ci  jerry_value_t program = jerry_parse ((const jerry_char_t *) resource,
7796425bb815Sopenharmony_ci                                       strlen (resource),
7797425bb815Sopenharmony_ci                                       (const jerry_char_t *) source,
7798425bb815Sopenharmony_ci                                       strlen (source),
7799425bb815Sopenharmony_ci                                       JERRY_PARSE_NO_OPTS);
7800425bb815Sopenharmony_ci  if (!jerry_value_is_error (program))
7801425bb815Sopenharmony_ci  {
7802425bb815Sopenharmony_ci    jerry_value_t run_result = jerry_run (program);
7803425bb815Sopenharmony_ci    jerry_release_value (run_result);
7804425bb815Sopenharmony_ci  }
7805425bb815Sopenharmony_ci
7806425bb815Sopenharmony_ci  jerry_release_value (program);
7807425bb815Sopenharmony_ci  jerry_cleanup ();
7808425bb815Sopenharmony_ci
7809425bb815Sopenharmony_ci  return 0;
7810425bb815Sopenharmony_ci}
7811425bb815Sopenharmony_ci```
7812425bb815Sopenharmony_ci
7813425bb815Sopenharmony_ci**See also**
7814425bb815Sopenharmony_ci
7815425bb815Sopenharmony_ci- [jerry_create_external_function](#jerry_create_external_function)
7816425bb815Sopenharmony_ci
7817425bb815Sopenharmony_ci
7818425bb815Sopenharmony_ci## jerry_get_resource_name
7819425bb815Sopenharmony_ci
7820425bb815Sopenharmony_ci**Summary**
7821425bb815Sopenharmony_ci
7822425bb815Sopenharmony_ciGet the resource name (usually a file name) of the currently executed script or the given function object.
7823425bb815Sopenharmony_ci
7824425bb815Sopenharmony_ciThis function is typically called from native callbacks.
7825425bb815Sopenharmony_ci
7826425bb815Sopenharmony_ci*Notes*:
7827425bb815Sopenharmony_ci- Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
7828425bb815Sopenharmony_ciis no longer needed.
7829425bb815Sopenharmony_ci- This feature depends on build option (`JERRY_LINE_INFO`) and can be checked
7830425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_LINE_INFO` feature enum value,
7831425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
7832425bb815Sopenharmony_ci
7833425bb815Sopenharmony_ci**Prototype**
7834425bb815Sopenharmony_ci
7835425bb815Sopenharmony_ci```c
7836425bb815Sopenharmony_cijerry_value_t
7837425bb815Sopenharmony_cijerry_get_resource_name (jerry_value_t value);
7838425bb815Sopenharmony_ci```
7839425bb815Sopenharmony_ci- `value` - api value to obtain the resource name from
7840425bb815Sopenharmony_ci- return string value constructed from
7841425bb815Sopenharmony_ci  - the currently executed function object's resource name, if the given value is undefined
7842425bb815Sopenharmony_ci  - resource name of the function object, if the given value is a function object
7843425bb815Sopenharmony_ci  - "<anonymous>", otherwise
7844425bb815Sopenharmony_ci
7845425bb815Sopenharmony_ci*New in version 2.2*.
7846425bb815Sopenharmony_ci
7847425bb815Sopenharmony_ci**Example**
7848425bb815Sopenharmony_ci
7849425bb815Sopenharmony_ci[doctest]: # (name="02.API-REFERENCE-jsresourcename.c")
7850425bb815Sopenharmony_ci
7851425bb815Sopenharmony_ci```c
7852425bb815Sopenharmony_ci#include <stdio.h>
7853425bb815Sopenharmony_ci#include <string.h>
7854425bb815Sopenharmony_ci#include "jerryscript.h"
7855425bb815Sopenharmony_ci
7856425bb815Sopenharmony_cistatic jerry_value_t
7857425bb815Sopenharmony_ciresource_name_handler (const jerry_value_t function_obj,
7858425bb815Sopenharmony_ci                       const jerry_value_t this_val,
7859425bb815Sopenharmony_ci                       const jerry_value_t args_p[],
7860425bb815Sopenharmony_ci                       const jerry_length_t args_count)
7861425bb815Sopenharmony_ci{
7862425bb815Sopenharmony_ci  jerry_value_t undefined_value = jerry_create_undefined ();
7863425bb815Sopenharmony_ci  jerry_value_t resource_name = jerry_get_resource_name (args_count > 0 ? args_p[0] : undefined_value);
7864425bb815Sopenharmony_ci  jerry_release_value (undefined_value);
7865425bb815Sopenharmony_ci
7866425bb815Sopenharmony_ci  return resource_name;
7867425bb815Sopenharmony_ci} /* resource_name_handler */
7868425bb815Sopenharmony_ci
7869425bb815Sopenharmony_ciint
7870425bb815Sopenharmony_cimain (void)
7871425bb815Sopenharmony_ci{
7872425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
7873425bb815Sopenharmony_ci
7874425bb815Sopenharmony_ci  jerry_value_t global = jerry_get_global_object ();
7875425bb815Sopenharmony_ci
7876425bb815Sopenharmony_ci  /* Register the "resourceName" method. */
7877425bb815Sopenharmony_ci  {
7878425bb815Sopenharmony_ci    jerry_value_t func = jerry_create_external_function (resource_name_handler);
7879425bb815Sopenharmony_ci    jerry_value_t name = jerry_create_string ((const jerry_char_t *) "resourceName");
7880425bb815Sopenharmony_ci    jerry_value_t result = jerry_set_property (global, name, func);
7881425bb815Sopenharmony_ci    jerry_release_value (result);
7882425bb815Sopenharmony_ci    jerry_release_value (name);
7883425bb815Sopenharmony_ci    jerry_release_value (func);
7884425bb815Sopenharmony_ci  }
7885425bb815Sopenharmony_ci
7886425bb815Sopenharmony_ci  jerry_release_value (global);
7887425bb815Sopenharmony_ci
7888425bb815Sopenharmony_ci  const jerry_char_t source[] = "function myFunction() { return resourceName() }; myFunction()";
7889425bb815Sopenharmony_ci  const jerry_char_t resource[] = "demo.js";
7890425bb815Sopenharmony_ci
7891425bb815Sopenharmony_ci  jerry_value_t program = jerry_parse (resource,
7892425bb815Sopenharmony_ci                                       sizeof (resource) - 1,
7893425bb815Sopenharmony_ci                                       source,
7894425bb815Sopenharmony_ci                                       sizeof (source) - 1,
7895425bb815Sopenharmony_ci                                       JERRY_PARSE_NO_OPTS);
7896425bb815Sopenharmony_ci
7897425bb815Sopenharmony_ci  if (!jerry_value_is_error (program))
7898425bb815Sopenharmony_ci  {
7899425bb815Sopenharmony_ci    /* `run_result` contains "demo.js" */
7900425bb815Sopenharmony_ci    jerry_value_t run_result = jerry_run (program);
7901425bb815Sopenharmony_ci
7902425bb815Sopenharmony_ci    /* usage of `run_result` */
7903425bb815Sopenharmony_ci
7904425bb815Sopenharmony_ci    jerry_release_value (run_result);
7905425bb815Sopenharmony_ci  }
7906425bb815Sopenharmony_ci
7907425bb815Sopenharmony_ci  jerry_release_value (program);
7908425bb815Sopenharmony_ci  jerry_cleanup ();
7909425bb815Sopenharmony_ci
7910425bb815Sopenharmony_ci  return 0;
7911425bb815Sopenharmony_ci}
7912425bb815Sopenharmony_ci```
7913425bb815Sopenharmony_ci
7914425bb815Sopenharmony_ci**See also**
7915425bb815Sopenharmony_ci
7916425bb815Sopenharmony_ci- [jerry_create_external_function](#jerry_create_external_function)
7917425bb815Sopenharmony_ci
7918425bb815Sopenharmony_ci## jerry_get_new_target
7919425bb815Sopenharmony_ci
7920425bb815Sopenharmony_ci**Summary**
7921425bb815Sopenharmony_ci
7922425bb815Sopenharmony_ciReturns the current "new.target" JavaScript function at the call site.
7923425bb815Sopenharmony_ci
7924425bb815Sopenharmony_ciIf used outside of a native C function it will return "undefined" value.
7925425bb815Sopenharmony_ci
7926425bb815Sopenharmony_ci*Notes*:
7927425bb815Sopenharmony_ci- Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
7928425bb815Sopenharmony_ciis no longer needed.
7929425bb815Sopenharmony_ci- This feature depends on build option (`JERRY_ES2015`) and can be checked
7930425bb815Sopenharmony_ci  in runtime with the `JERRY_FEATURE_SYMBOL` feature enum value (as symbols are enabled in case of ES2015),
7931425bb815Sopenharmony_ci  see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
7932425bb815Sopenharmony_ci- If the ES2015 mode is not enabled this method will always return the "undefined" value.
7933425bb815Sopenharmony_ci
7934425bb815Sopenharmony_ci**Prototype**
7935425bb815Sopenharmony_ci
7936425bb815Sopenharmony_ci```c
7937425bb815Sopenharmony_cijerry_value_t
7938425bb815Sopenharmony_cijerry_get_new_target (void);
7939425bb815Sopenharmony_ci```
7940425bb815Sopenharmony_ci- return
7941425bb815Sopenharmony_ci  - "undefined" - if at the call site it was not a constructor call.
7942425bb815Sopenharmony_ci  - function object - if the current call site is in a constructor call.
7943425bb815Sopenharmony_ci
7944425bb815Sopenharmony_ci*New in version 2.2*.
7945425bb815Sopenharmony_ci
7946425bb815Sopenharmony_ci**Example 1**
7947425bb815Sopenharmony_ci
7948425bb815Sopenharmony_ci[doctest]: # (name="02.API-REFERENCE-jsnewtarget-01.c")
7949425bb815Sopenharmony_ci
7950425bb815Sopenharmony_ci```c
7951425bb815Sopenharmony_ci#include <stdio.h>
7952425bb815Sopenharmony_ci#include <string.h>
7953425bb815Sopenharmony_ci#include <jerryscript.h>
7954425bb815Sopenharmony_ci
7955425bb815Sopenharmony_cistatic jerry_value_t
7956425bb815Sopenharmony_cidemo_handler (const jerry_value_t func_obj_val,
7957425bb815Sopenharmony_ci              const jerry_value_t this_val,
7958425bb815Sopenharmony_ci              const jerry_value_t args_p[],
7959425bb815Sopenharmony_ci              const jerry_length_t args_cnt)
7960425bb815Sopenharmony_ci{
7961425bb815Sopenharmony_ci  jerry_value_t new_target = jerry_get_new_target ();
7962425bb815Sopenharmony_ci
7963425bb815Sopenharmony_ci  /* new_target is the "demo" JS function object */
7964425bb815Sopenharmony_ci  if (jerry_value_get_type (new_target) == JERRY_TYPE_FUNCTION)
7965425bb815Sopenharmony_ci  {
7966425bb815Sopenharmony_ci    printf ("This is a construct call\r\n");
7967425bb815Sopenharmony_ci  }
7968425bb815Sopenharmony_ci
7969425bb815Sopenharmony_ci  jerry_release_value (new_target);
7970425bb815Sopenharmony_ci
7971425bb815Sopenharmony_ci  return jerry_create_undefined ();
7972425bb815Sopenharmony_ci}
7973425bb815Sopenharmony_ci
7974425bb815Sopenharmony_ciint
7975425bb815Sopenharmony_cimain (int argc, char** argv)
7976425bb815Sopenharmony_ci{
7977425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
7978425bb815Sopenharmony_ci
7979425bb815Sopenharmony_ci  jerry_value_t function_val = jerry_create_external_function (demo_handler);
7980425bb815Sopenharmony_ci
7981425bb815Sopenharmony_ci  jerry_value_t ret_val = jerry_construct_object (function_val, NULL, 0);
7982425bb815Sopenharmony_ci
7983425bb815Sopenharmony_ci  jerry_release_value (ret_val);
7984425bb815Sopenharmony_ci  jerry_release_value (function_val);
7985425bb815Sopenharmony_ci
7986425bb815Sopenharmony_ci  jerry_cleanup ();
7987425bb815Sopenharmony_ci  return 0;
7988425bb815Sopenharmony_ci}
7989425bb815Sopenharmony_ci```
7990425bb815Sopenharmony_ci
7991425bb815Sopenharmony_ci**Example 2**
7992425bb815Sopenharmony_ci
7993425bb815Sopenharmony_ci[doctest]: # (name="02.API-REFERENCE-jsnewtarget-02.c")
7994425bb815Sopenharmony_ci
7995425bb815Sopenharmony_ci```c
7996425bb815Sopenharmony_ci#include <stdio.h>
7997425bb815Sopenharmony_ci#include <string.h>
7998425bb815Sopenharmony_ci#include <jerryscript.h>
7999425bb815Sopenharmony_ci
8000425bb815Sopenharmony_cistatic jerry_value_t
8001425bb815Sopenharmony_cidemo_handler (const jerry_value_t func_obj_val,
8002425bb815Sopenharmony_ci              const jerry_value_t this_val,
8003425bb815Sopenharmony_ci              const jerry_value_t args_p[],
8004425bb815Sopenharmony_ci              const jerry_length_t args_cnt)
8005425bb815Sopenharmony_ci{
8006425bb815Sopenharmony_ci  jerry_value_t new_target = jerry_get_new_target ();
8007425bb815Sopenharmony_ci
8008425bb815Sopenharmony_ci  /* new_target is a JS function object */
8009425bb815Sopenharmony_ci  if (jerry_value_get_type (new_target) == JERRY_TYPE_FUNCTION)
8010425bb815Sopenharmony_ci  {
8011425bb815Sopenharmony_ci    printf ("This is a construct call\r\n");
8012425bb815Sopenharmony_ci  }
8013425bb815Sopenharmony_ci
8014425bb815Sopenharmony_ci  jerry_release_value (new_target);
8015425bb815Sopenharmony_ci
8016425bb815Sopenharmony_ci  return jerry_create_undefined ();
8017425bb815Sopenharmony_ci}
8018425bb815Sopenharmony_ci
8019425bb815Sopenharmony_ciint
8020425bb815Sopenharmony_cimain (int argc, char** argv)
8021425bb815Sopenharmony_ci{
8022425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
8023425bb815Sopenharmony_ci
8024425bb815Sopenharmony_ci  /* register C method */
8025425bb815Sopenharmony_ci  jerry_value_t global_obj_val = jerry_get_global_object ();
8026425bb815Sopenharmony_ci  jerry_value_t function_val = jerry_create_external_function (demo_handler);
8027425bb815Sopenharmony_ci  jerry_value_t function_name_val = jerry_create_string ((const jerry_char_t *) "demo");
8028425bb815Sopenharmony_ci  jerry_value_t result_val = jerry_set_property (global_obj_val, function_name_val, function_val);
8029425bb815Sopenharmony_ci  jerry_release_value (result_val);
8030425bb815Sopenharmony_ci  jerry_release_value (function_name_val);
8031425bb815Sopenharmony_ci  jerry_release_value (function_val);
8032425bb815Sopenharmony_ci  jerry_release_value (global_obj_val);
8033425bb815Sopenharmony_ci
8034425bb815Sopenharmony_ci  /* Invoke C method via JS */
8035425bb815Sopenharmony_ci  const char *src = "new demo ()";
8036425bb815Sopenharmony_ci  jerry_value_t ret_val = jerry_eval ((const jerry_char_t *) src,
8037425bb815Sopenharmony_ci                                      strlen (src),
8038425bb815Sopenharmony_ci                                      JERRY_PARSE_NO_OPTS);
8039425bb815Sopenharmony_ci
8040425bb815Sopenharmony_ci  jerry_release_value (ret_val);
8041425bb815Sopenharmony_ci
8042425bb815Sopenharmony_ci  jerry_cleanup ();
8043425bb815Sopenharmony_ci  return 0;
8044425bb815Sopenharmony_ci}
8045425bb815Sopenharmony_ci```
8046425bb815Sopenharmony_ci
8047425bb815Sopenharmony_ci**See also**
8048425bb815Sopenharmony_ci
8049425bb815Sopenharmony_ci- [jerry_construct_object](#jerry_construct_object)
8050425bb815Sopenharmony_ci
8051425bb815Sopenharmony_ci# ArrayBuffer and TypedArray functions
8052425bb815Sopenharmony_ci
8053425bb815Sopenharmony_ciThese APIs all depend on the ES2015-subset profile.
8054425bb815Sopenharmony_ci
8055425bb815Sopenharmony_ci## jerry_get_arraybuffer_byte_length
8056425bb815Sopenharmony_ci
8057425bb815Sopenharmony_ci**Summary**
8058425bb815Sopenharmony_ci
8059425bb815Sopenharmony_ciGet the byte length property of the ArrayBuffer. This is the
8060425bb815Sopenharmony_cisame value which was passed to the ArrayBuffer constructor call.
8061425bb815Sopenharmony_ci
8062425bb815Sopenharmony_ci**Prototype**
8063425bb815Sopenharmony_ci
8064425bb815Sopenharmony_ci```c
8065425bb815Sopenharmony_cijerry_length_t
8066425bb815Sopenharmony_cijerry_get_arraybuffer_byte_length (const jerry_value_t value);
8067425bb815Sopenharmony_ci```
8068425bb815Sopenharmony_ci
8069425bb815Sopenharmony_ci- `value` - ArrayBuffer object
8070425bb815Sopenharmony_ci- return value
8071425bb815Sopenharmony_ci  - size of the ArrayBuffer in bytes
8072425bb815Sopenharmony_ci  - 0 if the `value` parameter is not an ArrayBuffer
8073425bb815Sopenharmony_ci
8074425bb815Sopenharmony_ci*New in version 2.0*.
8075425bb815Sopenharmony_ci
8076425bb815Sopenharmony_ci**Example**
8077425bb815Sopenharmony_ci
8078425bb815Sopenharmony_ci```c
8079425bb815Sopenharmony_ci{
8080425bb815Sopenharmony_ci  jerry_value_t buffer = jerry_create_arraybuffer (15);
8081425bb815Sopenharmony_ci  jerry_length_t length = jerry_get_arraybuffer_byte_length (buffer);
8082425bb815Sopenharmony_ci  // length should be 15
8083425bb815Sopenharmony_ci
8084425bb815Sopenharmony_ci  jerry_release_value (buffer);
8085425bb815Sopenharmony_ci}
8086425bb815Sopenharmony_ci```
8087425bb815Sopenharmony_ci
8088425bb815Sopenharmony_ci**See also**
8089425bb815Sopenharmony_ci- [jerry_create_arraybuffer](#jerry_create_arraybuffer)
8090425bb815Sopenharmony_ci
8091425bb815Sopenharmony_ci
8092425bb815Sopenharmony_ci## jerry_arraybuffer_read
8093425bb815Sopenharmony_ci
8094425bb815Sopenharmony_ci**Summary**
8095425bb815Sopenharmony_ci
8096425bb815Sopenharmony_ciCopy the portion of the ArrayBuffer into a user provided buffer.
8097425bb815Sopenharmony_ciThe start offset of the read operation can be specified.
8098425bb815Sopenharmony_ci
8099425bb815Sopenharmony_ciThe number bytes to be read can be specified via the `buf_size`
8100425bb815Sopenharmony_ciparameter. It is not possible to read more than the length of
8101425bb815Sopenharmony_cithe ArrayBuffer.
8102425bb815Sopenharmony_ci
8103425bb815Sopenharmony_ciFunction returns the number of bytes read from the ArrayBuffer
8104425bb815Sopenharmony_ci(and written to the buffer parameter). This value is
8105425bb815Sopenharmony_cicalculated in the following way: `min(array buffer length - offset, buf_size)`.
8106425bb815Sopenharmony_ci
8107425bb815Sopenharmony_ci**Prototype**
8108425bb815Sopenharmony_ci
8109425bb815Sopenharmony_ci```c
8110425bb815Sopenharmony_cijerry_length_t
8111425bb815Sopenharmony_cijerry_arraybuffer_read (const jerry_value_t value,
8112425bb815Sopenharmony_ci                        jerry_length_t offset,
8113425bb815Sopenharmony_ci                        uint8_t *buf_p,
8114425bb815Sopenharmony_ci                        jerry_length_t buf_size);
8115425bb815Sopenharmony_ci```
8116425bb815Sopenharmony_ci
8117425bb815Sopenharmony_ci- `value` - ArrayBuffer to read from
8118425bb815Sopenharmony_ci- `offset` - start offset of the read operation
8119425bb815Sopenharmony_ci- `buf_p` - buffer to read the data to
8120425bb815Sopenharmony_ci- `buf_size` - maximum number of bytes to read into the buffer
8121425bb815Sopenharmony_ci- return value
8122425bb815Sopenharmony_ci  - number of bytes written into the buffer (read from the ArrayBuffer)
8123425bb815Sopenharmony_ci  - 0 if the `value` is not an ArrayBuffer object
8124425bb815Sopenharmony_ci  - 0 if the `buf_size` is zero or there is nothing to read
8125425bb815Sopenharmony_ci
8126425bb815Sopenharmony_ci*New in version 2.0*.
8127425bb815Sopenharmony_ci
8128425bb815Sopenharmony_ci**Example**
8129425bb815Sopenharmony_ci
8130425bb815Sopenharmony_ci```c
8131425bb815Sopenharmony_ci{
8132425bb815Sopenharmony_ci  uint8_t data[20];
8133425bb815Sopenharmony_ci  jerry_value_t buffer;
8134425bb815Sopenharmony_ci  // ... create the ArrayBuffer or acuiqre it from somewhere.
8135425bb815Sopenharmony_ci
8136425bb815Sopenharmony_ci  jerry_value_t bytes_read;
8137425bb815Sopenharmony_ci
8138425bb815Sopenharmony_ci  // read 10 bytes from the start of the ArrayBuffer.
8139425bb815Sopenharmony_ci  bytes_read = jerry_arraybuffer_read (buffer, 0, data, 10);
8140425bb815Sopenharmony_ci  // read the next 10 bytes
8141425bb815Sopenharmony_ci  bytes_read += jerry_arraybuffer_read (buffer, bytes_read, data + bytes_read, 10);
8142425bb815Sopenharmony_ci
8143425bb815Sopenharmony_ci  // process the data variable
8144425bb815Sopenharmony_ci
8145425bb815Sopenharmony_ci  jerry_release_value (buffer);
8146425bb815Sopenharmony_ci}
8147425bb815Sopenharmony_ci```
8148425bb815Sopenharmony_ci
8149425bb815Sopenharmony_ci**See also**
8150425bb815Sopenharmony_ci
8151425bb815Sopenharmony_ci- [jerry_create_arraybuffer](#jerry_create_arraybuffer)
8152425bb815Sopenharmony_ci- [jerry_arraybuffer_write](#jerry_arraybuffer_write)
8153425bb815Sopenharmony_ci- [jerry_get_arraybuffer_byte_length](#jerry_get_arraybuffer_byte_length)
8154425bb815Sopenharmony_ci
8155425bb815Sopenharmony_ci
8156425bb815Sopenharmony_ci## jerry_arraybuffer_write
8157425bb815Sopenharmony_ci
8158425bb815Sopenharmony_ci**Summary**
8159425bb815Sopenharmony_ci
8160425bb815Sopenharmony_ciCopy the contents of a buffer into the ArrayBuffer.
8161425bb815Sopenharmony_ciThe start offset of the write operation can be specified.
8162425bb815Sopenharmony_ci
8163425bb815Sopenharmony_ciThe number bytes to be written can be specified via the `buf_size`
8164425bb815Sopenharmony_ciparameter. It is not possible to write more than the length of
8165425bb815Sopenharmony_cithe ArrayBuffer.
8166425bb815Sopenharmony_ci
8167425bb815Sopenharmony_ciFunction returns the number of bytes written into the ArrayBuffer
8168425bb815Sopenharmony_ci(and read from the buffer parameter). This value is
8169425bb815Sopenharmony_cicalculated in the following way: `min(array buffer length - offset, buf_size)`.
8170425bb815Sopenharmony_ci
8171425bb815Sopenharmony_ci**Prototype**
8172425bb815Sopenharmony_ci
8173425bb815Sopenharmony_ci```c
8174425bb815Sopenharmony_cijerry_length_t
8175425bb815Sopenharmony_cijerry_arraybuffer_write (const jerry_value_t value,
8176425bb815Sopenharmony_ci                         jerry_length_t offset,
8177425bb815Sopenharmony_ci                         const uint8_t *buf_p,
8178425bb815Sopenharmony_ci                         jerry_length_t buf_size);
8179425bb815Sopenharmony_ci```
8180425bb815Sopenharmony_ci
8181425bb815Sopenharmony_ci- `value` - ArrayBuffer to write to
8182425bb815Sopenharmony_ci- `offset` - start offset of the write operation
8183425bb815Sopenharmony_ci- `buf_p` - buffer to read the data from
8184425bb815Sopenharmony_ci- `buf_size` - maximum number of bytes to write into the ArrayBuffer
8185425bb815Sopenharmony_ci- return value
8186425bb815Sopenharmony_ci  - number of bytes written into the ArrayBuffer (read from the buffer parameter)
8187425bb815Sopenharmony_ci  - 0 if the `value` is not an ArrayBuffer object
8188425bb815Sopenharmony_ci  - 0 if the `buf_size` is zero or there is nothing to write
8189425bb815Sopenharmony_ci
8190425bb815Sopenharmony_ci*New in version 2.0*.
8191425bb815Sopenharmony_ci
8192425bb815Sopenharmony_ci**Example**
8193425bb815Sopenharmony_ci
8194425bb815Sopenharmony_ci```c
8195425bb815Sopenharmony_ci{
8196425bb815Sopenharmony_ci  uint8_t data[20];
8197425bb815Sopenharmony_ci
8198425bb815Sopenharmony_ci  // fill the data with values
8199425bb815Sopenharmony_ci  for (int i = 0; i < 20; i++)
8200425bb815Sopenharmony_ci  {
8201425bb815Sopenharmony_ci    data[i] = (uint8_t) (i * 2);
8202425bb815Sopenharmony_ci  }
8203425bb815Sopenharmony_ci
8204425bb815Sopenharmony_ci  jerry_value_t buffer;
8205425bb815Sopenharmony_ci  // ... create the ArrayBuffer or acquire it from somewhere.
8206425bb815Sopenharmony_ci
8207425bb815Sopenharmony_ci  jerry_value_t bytes_written;
8208425bb815Sopenharmony_ci
8209425bb815Sopenharmony_ci  // write 10 bytes from to the start of the ArrayBuffer.
8210425bb815Sopenharmony_ci  bytes_written = jerry_arraybuffer_write (buffer, 0, data, 10);
8211425bb815Sopenharmony_ci  // read the next 10 bytes
8212425bb815Sopenharmony_ci  bytes_written += jerry_arraybuffer_write (buffer, bytes_written, data + bytes_written, 10);
8213425bb815Sopenharmony_ci
8214425bb815Sopenharmony_ci  // use the ArrayBuffer
8215425bb815Sopenharmony_ci
8216425bb815Sopenharmony_ci  jerry_release_value (buffer);
8217425bb815Sopenharmony_ci}
8218425bb815Sopenharmony_ci```
8219425bb815Sopenharmony_ci
8220425bb815Sopenharmony_ci**See also**
8221425bb815Sopenharmony_ci
8222425bb815Sopenharmony_ci- [jerry_create_arraybuffer](#jerry_create_arraybuffer)
8223425bb815Sopenharmony_ci- [jerry_arraybuffer_write](#jerry_arraybuffer_write)
8224425bb815Sopenharmony_ci- [jerry_get_arraybuffer_byte_length](#jerry_get_arraybuffer_byte_length)
8225425bb815Sopenharmony_ci
8226425bb815Sopenharmony_ci
8227425bb815Sopenharmony_ci## jerry_get_arraybuffer_pointer
8228425bb815Sopenharmony_ci
8229425bb815Sopenharmony_ci**Summary**
8230425bb815Sopenharmony_ci
8231425bb815Sopenharmony_ciThe function allows access to the contents of the Array Buffer directly.
8232425bb815Sopenharmony_ci
8233425bb815Sopenharmony_ci**WARNING!** This operation is for expert use only! The programmer must
8234425bb815Sopenharmony_ciensure that the returned memory area is used correctly. That is
8235425bb815Sopenharmony_cithere is no out of bounds reads or writes. The lifetime of the underlying
8236425bb815Sopenharmony_cidata buffer is managed by the ArrayBuffer value. Make sure to acquire the
8237425bb815Sopenharmony_civalue with [`jerry_acquire_value`](#jerry_acquire_value) if the data
8238425bb815Sopenharmony_cibuffer is needed later.
8239425bb815Sopenharmony_ci
8240425bb815Sopenharmony_ci**Prototype**
8241425bb815Sopenharmony_ci
8242425bb815Sopenharmony_ci```c
8243425bb815Sopenharmony_ciuint8_t *
8244425bb815Sopenharmony_cijerry_get_arraybuffer_pointer (const jerry_value_t value);
8245425bb815Sopenharmony_ci```
8246425bb815Sopenharmony_ci
8247425bb815Sopenharmony_ci- `value` - Array Buffer object.
8248425bb815Sopenharmony_ci- return value
8249425bb815Sopenharmony_ci  - pointer to the Array Buffer's data area.
8250425bb815Sopenharmony_ci  - NULL if the `value` is not an Array Buffer object.
8251425bb815Sopenharmony_ci
8252425bb815Sopenharmony_ci*New in version 2.0*.
8253425bb815Sopenharmony_ci
8254425bb815Sopenharmony_ci**Example**
8255425bb815Sopenharmony_ci
8256425bb815Sopenharmony_ci```c
8257425bb815Sopenharmony_ci{
8258425bb815Sopenharmony_ci  // create the ArrayBuffer
8259425bb815Sopenharmony_ci  jerry_value_t buffer = jerry_create_arraybuffer (16);
8260425bb815Sopenharmony_ci
8261425bb815Sopenharmony_ci  uint8_t *const data = jerry_get_arraybuffer_pointer (buffer);
8262425bb815Sopenharmony_ci
8263425bb815Sopenharmony_ci  for (int i = 0; i < 16; i++)
8264425bb815Sopenharmony_ci  {
8265425bb815Sopenharmony_ci    data[i] = (uint8_t) (i + 4);
8266425bb815Sopenharmony_ci  }
8267425bb815Sopenharmony_ci
8268425bb815Sopenharmony_ci  // use the Array Buffer
8269425bb815Sopenharmony_ci
8270425bb815Sopenharmony_ci  // release buffer as it is not needed after this point
8271425bb815Sopenharmony_ci  jerry_release_value (buffer);
8272425bb815Sopenharmony_ci}
8273425bb815Sopenharmony_ci```
8274425bb815Sopenharmony_ci
8275425bb815Sopenharmony_ci**See also**
8276425bb815Sopenharmony_ci
8277425bb815Sopenharmony_ci- [jerry_create_arraybuffer_external](#jerry_create_arraybuffer_external)
8278425bb815Sopenharmony_ci
8279425bb815Sopenharmony_ci## jerry_is_arraybuffer_detachable
8280425bb815Sopenharmony_ci
8281425bb815Sopenharmony_ci**Summary**
8282425bb815Sopenharmony_ci
8283425bb815Sopenharmony_ciGet if the ArrayBuffer is detachable.
8284425bb815Sopenharmony_ci
8285425bb815Sopenharmony_ci**Prototype**
8286425bb815Sopenharmony_ci
8287425bb815Sopenharmony_ci```c
8288425bb815Sopenharmony_cijerry_value_t
8289425bb815Sopenharmony_cijerry_is_arraybuffer_detachable (const jerry_value_t value);
8290425bb815Sopenharmony_ci```
8291425bb815Sopenharmony_ci
8292425bb815Sopenharmony_ci- `value` - ArrayBuffer to be detached
8293425bb815Sopenharmony_ci- return
8294425bb815Sopenharmony_ci  - boolean value if success
8295425bb815Sopenharmony_ci  - Error otherwise
8296425bb815Sopenharmony_ci
8297425bb815Sopenharmony_ci*New in version 2.2*.
8298425bb815Sopenharmony_ci
8299425bb815Sopenharmony_ci**Example**
8300425bb815Sopenharmony_ci
8301425bb815Sopenharmony_ci```c
8302425bb815Sopenharmony_ci{
8303425bb815Sopenharmony_ci  // create the ArrayBuffer
8304425bb815Sopenharmony_ci  jerry_value_t buffer = jerry_create_arraybuffer (16);
8305425bb815Sopenharmony_ci
8306425bb815Sopenharmony_ci  jerry_value_t res = jerry_is_arraybuffer_detachable (buffer);
8307425bb815Sopenharmony_ci  bool is_detachable = jerry_get_boolean_value (res);
8308425bb815Sopenharmony_ci
8309425bb815Sopenharmony_ci  // release buffer as it is not needed after this point
8310425bb815Sopenharmony_ci  jerry_release_value (res);
8311425bb815Sopenharmony_ci  jerry_release_value (buffer);
8312425bb815Sopenharmony_ci}
8313425bb815Sopenharmony_ci```
8314425bb815Sopenharmony_ci
8315425bb815Sopenharmony_ci**See also**
8316425bb815Sopenharmony_ci
8317425bb815Sopenharmony_ci- [jerry_detach_arraybuffer](#jerry_detach_arraybuffer)
8318425bb815Sopenharmony_ci
8319425bb815Sopenharmony_ci## jerry_detach_arraybuffer
8320425bb815Sopenharmony_ci
8321425bb815Sopenharmony_ci**Summary**
8322425bb815Sopenharmony_ci
8323425bb815Sopenharmony_ciDetach the underlying data block from ArrayBuffer and set its bytelength to 0.
8324425bb815Sopenharmony_ci
8325425bb815Sopenharmony_ciThis operation requires the ArrayBuffer to be external that created by
8326425bb815Sopenharmony_ci`jerry_create_arraybuffer_external`.
8327425bb815Sopenharmony_ci
8328425bb815Sopenharmony_ci**Prototype**
8329425bb815Sopenharmony_ci
8330425bb815Sopenharmony_ci```c
8331425bb815Sopenharmony_cijerry_value_t
8332425bb815Sopenharmony_cijerry_detach_arraybuffer (const jerry_value_t value);
8333425bb815Sopenharmony_ci```
8334425bb815Sopenharmony_ci
8335425bb815Sopenharmony_ci- `value` - ArrayBuffer to be detached
8336425bb815Sopenharmony_ci- return
8337425bb815Sopenharmony_ci  - null value if success
8338425bb815Sopenharmony_ci  - Error otherwise
8339425bb815Sopenharmony_ci
8340425bb815Sopenharmony_ci*New in version 2.2*.
8341425bb815Sopenharmony_ci
8342425bb815Sopenharmony_ci**Example**
8343425bb815Sopenharmony_ci
8344425bb815Sopenharmony_ci```c
8345425bb815Sopenharmony_ci{
8346425bb815Sopenharmony_ci  uint8_t buf[1];
8347425bb815Sopenharmony_ci  jerry_size_t length = 1;
8348425bb815Sopenharmony_ci  // create the ArrayBuffer
8349425bb815Sopenharmony_ci  jerry_value_t buffer = jerry_create_arraybuffer (length, buf, NULL);
8350425bb815Sopenharmony_ci
8351425bb815Sopenharmony_ci  jerry_value_t res = jerry_detach_arraybuffer (buffer);
8352425bb815Sopenharmony_ci
8353425bb815Sopenharmony_ci  // release buffer as it is not needed after this point
8354425bb815Sopenharmony_ci  jerry_release_value (res);
8355425bb815Sopenharmony_ci  jerry_release_value (buffer);
8356425bb815Sopenharmony_ci}
8357425bb815Sopenharmony_ci```
8358425bb815Sopenharmony_ci
8359425bb815Sopenharmony_ci**See also**
8360425bb815Sopenharmony_ci
8361425bb815Sopenharmony_ci- [jerry_is_arraybuffer_detachable](#jerry_is_arraybuffer_detachable)
8362425bb815Sopenharmony_ci
8363425bb815Sopenharmony_ci## jerry_get_dataview_buffer
8364425bb815Sopenharmony_ci
8365425bb815Sopenharmony_ci**Summary**
8366425bb815Sopenharmony_ci
8367425bb815Sopenharmony_ciGet the ArrayBuffer object used by a DataView object.
8368425bb815Sopenharmony_ciAdditionally returns the byteLength and byteOffset properties
8369425bb815Sopenharmony_ciof the DataView object.
8370425bb815Sopenharmony_ci
8371425bb815Sopenharmony_ciFor the returned ArrayBuffer the [jerry_release_value](#jerry_release_value)
8372425bb815Sopenharmony_cimust be called when it is no longer needed.
8373425bb815Sopenharmony_ci
8374425bb815Sopenharmony_ci**Prototype**
8375425bb815Sopenharmony_ci
8376425bb815Sopenharmony_ci```c
8377425bb815Sopenharmony_cijerry_value_t
8378425bb815Sopenharmony_cijerry_get_dataview_buffer (const jerry_value_t value,
8379425bb815Sopenharmony_ci                           jerry_length_t *byteOffset,
8380425bb815Sopenharmony_ci                           jerry_length_t *byteLength);
8381425bb815Sopenharmony_ci```
8382425bb815Sopenharmony_ci
8383425bb815Sopenharmony_ci- `value` - DataView to get the ArrayBuffer from
8384425bb815Sopenharmony_ci- `byteOffset` - (Optional) returns the start offset of the ArrayBuffer for the DataView
8385425bb815Sopenharmony_ci- `byteLength` - (Optional) returns the number of bytes used from the ArrayBuffer for the DataView
8386425bb815Sopenharmony_ci- return
8387425bb815Sopenharmony_ci  - DataView object's underlying ArrayBuffer object
8388425bb815Sopenharmony_ci  - TypeError if the `value` is not a DataView object
8389425bb815Sopenharmony_ci
8390425bb815Sopenharmony_ci*New in version 2.0*.
8391425bb815Sopenharmony_ci
8392425bb815Sopenharmony_ci**Example**
8393425bb815Sopenharmony_ci
8394425bb815Sopenharmony_ci[doctest]: # ()
8395425bb815Sopenharmony_ci
8396425bb815Sopenharmony_ci```c
8397425bb815Sopenharmony_ci#include "jerryscript.h"
8398425bb815Sopenharmony_ci
8399425bb815Sopenharmony_ciint
8400425bb815Sopenharmony_cimain (void)
8401425bb815Sopenharmony_ci{
8402425bb815Sopenharmony_ci  jerry_init (JERRY_INIT_EMPTY);
8403425bb815Sopenharmony_ci
8404425bb815Sopenharmony_ci  jerry_value_t arraybuffer = jerry_create_arraybuffer (16);
8405425bb815Sopenharmony_ci  jerry_value_t dataview = jerry_create_dataview (arraybuffer, 0, 16);
8406425bb815Sopenharmony_ci  jerry_length_t byteOffset = 0;
8407425bb815Sopenharmony_ci  jerry_length_t byteLength = 0;
8408425bb815Sopenharmony_ci  jerry_value_t buffer = jerry_get_dataview_buffer (dataview, &byteOffset, &byteLength);
8409425bb815Sopenharmony_ci
8410425bb815Sopenharmony_ci  // buffer is an ArrayBuffer object and ArrayBuffer operations can be performed on it
8411425bb815Sopenharmony_ci  // byteOffset is 0
8412425bb815Sopenharmony_ci  // byteLength is 16
8413425bb815Sopenharmony_ci
8414425bb815Sopenharmony_ci  // usage of buffer
8415425bb815Sopenharmony_ci
8416425bb815Sopenharmony_ci  jerry_release_value (buffer);
8417425bb815Sopenharmony_ci  jerry_release_value (dataview);
8418425bb815Sopenharmony_ci  jerry_release_value (arraybuffer);
8419425bb815Sopenharmony_ci
8420425bb815Sopenharmony_ci  jerry_cleanup ();
8421425bb815Sopenharmony_ci}
8422425bb815Sopenharmony_ci```
8423425bb815Sopenharmony_ci
8424425bb815Sopenharmony_ci**See also**
8425425bb815Sopenharmony_ci
8426425bb815Sopenharmony_ci- [jerry_create_dataview](#jerry_create_dataview)
8427425bb815Sopenharmony_ci
8428425bb815Sopenharmony_ci
8429425bb815Sopenharmony_ci## jerry_get_typedarray_type
8430425bb815Sopenharmony_ci
8431425bb815Sopenharmony_ci**Summary**
8432425bb815Sopenharmony_ci
8433425bb815Sopenharmony_ciGet the type of the TypedArray.
8434425bb815Sopenharmony_ci
8435425bb815Sopenharmony_ciThe returned type is one of the [jerry_typedarray_type_t](#jerry_typedarray_type_t)
8436425bb815Sopenharmony_cienum value.
8437425bb815Sopenharmony_ci
8438425bb815Sopenharmony_ci**Prototype**
8439425bb815Sopenharmony_ci
8440425bb815Sopenharmony_ci```c
8441425bb815Sopenharmony_cijerry_typedarray_type_t
8442425bb815Sopenharmony_cijerry_get_typedarray_type (jerry_value_t value);
8443425bb815Sopenharmony_ci```
8444425bb815Sopenharmony_ci
8445425bb815Sopenharmony_ci- `value` - TypedArray object to query for type.
8446425bb815Sopenharmony_ci- return
8447425bb815Sopenharmony_ci  - the type of the TypedArray
8448425bb815Sopenharmony_ci  - JERRY_TYPEDARRAY_INVALID if the object was not a TypedArray
8449425bb815Sopenharmony_ci
8450425bb815Sopenharmony_ci*New in version 2.0*.
8451425bb815Sopenharmony_ci
8452425bb815Sopenharmony_ci**Example**
8453425bb815Sopenharmony_ci
8454425bb815Sopenharmony_ci```c
8455425bb815Sopenharmony_ci{
8456425bb815Sopenharmony_ci  jerry_typedarray_type_t expected_type = JERRY_TYPEDARRAY_UINT32;
8457425bb815Sopenharmony_ci  jerry_value_t typedarray = jerry_create_typedarray (expected_klass, 25);
8458425bb815Sopenharmony_ci
8459425bb815Sopenharmony_ci  jerry_typedarray_type_t type = jerry_get_typedarray_type (typedarray);
8460425bb815Sopenharmony_ci
8461425bb815Sopenharmony_ci  // 'type' is now JERRY_TYPEDARRAY_UINT32
8462425bb815Sopenharmony_ci
8463425bb815Sopenharmony_ci  jerry_release_value (typedarray);
8464425bb815Sopenharmony_ci}
8465425bb815Sopenharmony_ci```
8466425bb815Sopenharmony_ci
8467425bb815Sopenharmony_ci**See also**
8468425bb815Sopenharmony_ci
8469425bb815Sopenharmony_ci- [jerry_create_typedarray](#jerry_create_typedarray)
8470425bb815Sopenharmony_ci- [jerry_typedarray_type_t](#jerry_typedarray_type_t)
8471425bb815Sopenharmony_ci
8472425bb815Sopenharmony_ci
8473425bb815Sopenharmony_ci## jerry_get_typedarray_length
8474425bb815Sopenharmony_ci
8475425bb815Sopenharmony_ci**Summary**
8476425bb815Sopenharmony_ci
8477425bb815Sopenharmony_ciGet the element count of the TypedArray as specified during creation.
8478425bb815Sopenharmony_ci
8479425bb815Sopenharmony_ciThis is not the same as the byteLength property of a TypedArray object.
8480425bb815Sopenharmony_ci
8481425bb815Sopenharmony_ci**Prototype**
8482425bb815Sopenharmony_ci
8483425bb815Sopenharmony_ci```
8484425bb815Sopenharmony_cijerry_length_t
8485425bb815Sopenharmony_cijerry_get_typedarray_length (jerry_value_t value);
8486425bb815Sopenharmony_ci```
8487425bb815Sopenharmony_ci
8488425bb815Sopenharmony_ci- `value` - TypedArray object to query
8489425bb815Sopenharmony_ci- return
8490425bb815Sopenharmony_ci  - length (element count) of the TypedArray object
8491425bb815Sopenharmony_ci  - 0 if the object is not a TypedArray
8492425bb815Sopenharmony_ci
8493425bb815Sopenharmony_ci*New in version 2.0*.
8494425bb815Sopenharmony_ci
8495425bb815Sopenharmony_ci**Example**
8496425bb815Sopenharmony_ci
8497425bb815Sopenharmony_ci```c
8498425bb815Sopenharmony_ci{
8499425bb815Sopenharmony_ci  jerry_value_t array = jerry_create_typedarray (JERRY_TYPEDARRAY_INT32, 21);
8500425bb815Sopenharmony_ci
8501425bb815Sopenharmony_ci  jerry_length_t element_count = jerry_get_typedarray_length (array);
8502425bb815Sopenharmony_ci
8503425bb815Sopenharmony_ci  // element_count is now 21.
8504425bb815Sopenharmony_ci
8505425bb815Sopenharmony_ci  jerry_release_value (array);
8506425bb815Sopenharmony_ci}
8507425bb815Sopenharmony_ci```
8508425bb815Sopenharmony_ci
8509425bb815Sopenharmony_ci**See also**
8510425bb815Sopenharmony_ci
8511425bb815Sopenharmony_ci- [jerry_create_typedarray](#jerry_create_typedarray)
8512425bb815Sopenharmony_ci
8513425bb815Sopenharmony_ci
8514425bb815Sopenharmony_ci## jerry_get_typedarray_buffer
8515425bb815Sopenharmony_ci
8516425bb815Sopenharmony_ci**Summary**
8517425bb815Sopenharmony_ci
8518425bb815Sopenharmony_ciGet the ArrayBuffer object used by a TypedArray object.
8519425bb815Sopenharmony_ciAdditionally returns the byteLength and byteOffset properties
8520425bb815Sopenharmony_ciof the TypedArray object.
8521425bb815Sopenharmony_ci
8522425bb815Sopenharmony_ciFor the returned ArrayBuffer the [jerry_release_value](#jerry_release_value)
8523425bb815Sopenharmony_cimust be called.
8524425bb815Sopenharmony_ci
8525425bb815Sopenharmony_ci*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
8526425bb815Sopenharmony_ciis no longer needed.
8527425bb815Sopenharmony_ci
8528425bb815Sopenharmony_ci**Prototype**
8529425bb815Sopenharmony_ci
8530425bb815Sopenharmony_ci```c
8531425bb815Sopenharmony_cijerry_value_t
8532425bb815Sopenharmony_cijerry_get_typedarray_buffer (jerry_value_t value,
8533425bb815Sopenharmony_ci                             jerry_length_t *byteOffset,
8534425bb815Sopenharmony_ci                             jerry_length_t *byteLength);
8535425bb815Sopenharmony_ci```
8536425bb815Sopenharmony_ci
8537425bb815Sopenharmony_ci- `value` - TypedArray to get the ArrayBuffer from
8538425bb815Sopenharmony_ci- `byteOffset` - (Optional) returns the start offset of the ArrayBuffer for the TypedArray
8539425bb815Sopenharmony_ci- `byteLength` - (Optional) returns the number of bytes used from the ArrayBuffer for the TypedArray
8540425bb815Sopenharmony_ci- return
8541425bb815Sopenharmony_ci  - TypedArray object's underlying ArrayBuffer object
8542425bb815Sopenharmony_ci  - TypeError if the `value` is not a TypedArray object
8543425bb815Sopenharmony_ci
8544425bb815Sopenharmony_ci*New in version 2.0*.
8545425bb815Sopenharmony_ci
8546425bb815Sopenharmony_ci**Example**
8547425bb815Sopenharmony_ci
8548425bb815Sopenharmony_ci```c
8549425bb815Sopenharmony_ci{
8550425bb815Sopenharmony_ci  jerry_value_t array = jerry_create_typedarray (JERRY_TYPEDARRAY_INT16, 11);
8551425bb815Sopenharmony_ci
8552425bb815Sopenharmony_ci  jerry_length_t byteLength = 0;
8553425bb815Sopenharmony_ci  jerry_length_t byteOffset = 0;
8554425bb815Sopenharmony_ci  jerry_value_t buffer = jerry_get_typedarray_buffer (array, &byteOffset, &byteLength);
8555425bb815Sopenharmony_ci
8556425bb815Sopenharmony_ci  // buffer is an ArrayBuffer object and ArrayBuffer operations can be performed on it
8557425bb815Sopenharmony_ci  // byteLength is 11 * 2  (2 as the TypedArray stores Int16 that is 2 byte elements)
8558425bb815Sopenharmony_ci  // byteOffset is 0
8559425bb815Sopenharmony_ci
8560425bb815Sopenharmony_ci  jerry_release_value (buffer);
8561425bb815Sopenharmony_ci  jerry_release_value (array);
8562425bb815Sopenharmony_ci}
8563425bb815Sopenharmony_ci```
8564425bb815Sopenharmony_ci
8565425bb815Sopenharmony_ci**See also**
8566425bb815Sopenharmony_ci
8567425bb815Sopenharmony_ci- [jerry_create_typedarray](#jerry_create_typedarray)
8568425bb815Sopenharmony_ci
8569425bb815Sopenharmony_ci# JSON functions
8570425bb815Sopenharmony_ci
8571425bb815Sopenharmony_ci## jerry_json_parse
8572425bb815Sopenharmony_ci
8573425bb815Sopenharmony_ci**Summary**
8574425bb815Sopenharmony_ci
8575425bb815Sopenharmony_ciReturns the same result as `JSON.parse` ecmascript function.
8576425bb815Sopenharmony_ci
8577425bb815Sopenharmony_ci**Prototype**
8578425bb815Sopenharmony_ci
8579425bb815Sopenharmony_ci```c
8580425bb815Sopenharmony_cijerry_value_t
8581425bb815Sopenharmony_cijerry_json_parse (const jerry_char_t *string_p,
8582425bb815Sopenharmony_ci                  jerry_size_t string_size);
8583425bb815Sopenharmony_ci```
8584425bb815Sopenharmony_ci
8585425bb815Sopenharmony_ci- `string_p` - a JSON string
8586425bb815Sopenharmony_ci- `string_size` - size of the string
8587425bb815Sopenharmony_ci- return
8588425bb815Sopenharmony_ci  - jerry_value_t containing the same as json.parse()
8589425bb815Sopenharmony_ci  - jerry_value_t containing error massage
8590425bb815Sopenharmony_ci
8591425bb815Sopenharmony_ci*New in version 2.0*.
8592425bb815Sopenharmony_ci
8593425bb815Sopenharmony_ci**Example**
8594425bb815Sopenharmony_ci
8595425bb815Sopenharmony_ci```c
8596425bb815Sopenharmony_ci{
8597425bb815Sopenharmony_ci  const jerry_char_t data[] = "{\"name\": \"John\", \"age\": 5}";
8598425bb815Sopenharmony_ci  jerry_value_t parsed_json = jerry_json_parse (data, sizeof (data) - 1);
8599425bb815Sopenharmony_ci
8600425bb815Sopenharmony_ci  // parsed_json now conatins all data stored in data_in_json
8601425bb815Sopenharmony_ci
8602425bb815Sopenharmony_ci  jerry_release_value (parsed_json);
8603425bb815Sopenharmony_ci}
8604425bb815Sopenharmony_ci```
8605425bb815Sopenharmony_ci
8606425bb815Sopenharmony_ci## jerry_json_stringify
8607425bb815Sopenharmony_ci
8608425bb815Sopenharmony_ci**Summary**
8609425bb815Sopenharmony_ci
8610425bb815Sopenharmony_ciReturns the same value as `JSON.stringify` ecmascript function.
8611425bb815Sopenharmony_ci
8612425bb815Sopenharmony_ci**Prototype**
8613425bb815Sopenharmony_ci
8614425bb815Sopenharmony_ci```c
8615425bb815Sopenharmony_cijerry_value_t
8616425bb815Sopenharmony_cijerry_json_stringify (const jerry_value_t object_to_stringify);
8617425bb815Sopenharmony_ci```
8618425bb815Sopenharmony_ci
8619425bb815Sopenharmony_ci- `object_to_stringify` - a jerry_value_t object to stringify
8620425bb815Sopenharmony_ci- return
8621425bb815Sopenharmony_ci  - jerry_value_t containing the same as json.stringify()
8622425bb815Sopenharmony_ci  - jerry_value_t containing error massage
8623425bb815Sopenharmony_ci
8624425bb815Sopenharmony_ci*New in version 2.0*.
8625425bb815Sopenharmony_ci
8626425bb815Sopenharmony_ci**Example**
8627425bb815Sopenharmony_ci
8628425bb815Sopenharmony_ci```c
8629425bb815Sopenharmony_ci{
8630425bb815Sopenharmony_ci  jerry_value_t obj = jerry_create_object ();
8631425bb815Sopenharmony_ci  jerry_value_t key = jerry_create_string ((const jerry_char_t *) "name");
8632425bb815Sopenharmony_ci  jerry_value_t value = jerry_create_string ((const jerry_char_t *) "John");
8633425bb815Sopenharmony_ci  jerry_release_value (jerry_set_property (obj, key, value));
8634425bb815Sopenharmony_ci  jerry_value_t stringified = jerry_json_stringify (obj);
8635425bb815Sopenharmony_ci
8636425bb815Sopenharmony_ci  //stringified now contains a json formated string
8637425bb815Sopenharmony_ci
8638425bb815Sopenharmony_ci  jerry_release_value (obj);
8639425bb815Sopenharmony_ci  jerry_release_value (key);
8640425bb815Sopenharmony_ci  jerry_release_value (value);
8641425bb815Sopenharmony_ci  jerry_release_value (stringified);
8642425bb815Sopenharmony_ci}
8643425bb815Sopenharmony_ci```
8644