@@ -786,7 +786,6 @@ An enum representing the current status of a module
786786 - JERRY_MODULE_STATE_EVALUATING - Module is currently being evaluated
787787 - JERRY_MODULE_STATE_EVALUATED - Module has been evaluated (its source code has been executed)
788788 - JERRY_MODULE_STATE_ERROR - An error has been encountered before the evaluated state is reached
789- - JERRY_MODULE_STATE_NATIVE - Module is native module
790789
791790*New in version [[NEXT_RELEASE]]*.
792791
@@ -821,6 +820,32 @@ typedef jerry_value_t (*jerry_module_resolve_callback_t) (const jerry_value_t sp
821820- [jerry_module_link](#jerry_module_link)
822821- [jerry_get_global_object](#jerry_get_global_object)
823822
823+ ## jerry_native_module_evaluate_callback_t
824+
825+ **Summary**
826+
827+ Callback which is called by [jerry_module_evaluate](#jerry_module_evaluate) to evaluate the native module.
828+
829+ Note:
830+ - Native pointers can be used to assign private data to a native module,
831+ see [jerry_set_object_native_pointer](#jerry_set_object_native_pointer)
832+
833+ **Prototype**
834+
835+ ```c
836+ typedef jerry_value_t (*jerry_native_module_evaluate_callback_t) (const jerry_value_t native_module);
837+ ```
838+
839+ - `native_module` - a native module
840+ - return value
841+ - any non-error value - if the module is evaluated successfully
842+ - an error - otherwise
843+
844+ *New in version [[NEXT_RELEASE]]*.
845+
846+ **See also**
847+ - [jerry_module_evaluate](#jerry_module_evaluate)
848+
824849## jerry_backtrace_callback_t
825850
826851**Summary**
@@ -4743,6 +4768,198 @@ main (void)
47434768- [jerry_module_link](#jerry_module_link)
47444769- [jerry_module_evaluate](#jerry_module_evaluate)
47454770
4771+ ## jerry_native_module_create
4772+
4773+ Creates a native module with a list of exports. The initial state of the module is linked.
4774+
4775+ *Notes*:
4776+ - Returned value must be freed with [jerry_release_value](#jerry_release_value)
4777+ when it is no longer needed.
4778+ - Native pointers can be used to assign private data to a native module,
4779+ see [jerry_set_object_native_pointer](#jerry_set_object_native_pointer)
4780+ - When `callback` is `NULL`, no function is called when the module is evaluated,
4781+ only its state is changed to evaluated.
4782+ - This API depends on a build option (`JERRY_MODULE_SYSTEM`) and can be checked
4783+ in runtime with the `JERRY_FEATURE_MODULE` feature enum value,
4784+ see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
4785+
4786+ **Prototype**
4787+
4788+ ```c
4789+ jerry_value_t
4790+ jerry_native_module_create (jerry_native_module_evaluate_callback_t callback,
4791+ const jerry_value_t * const exports_p,
4792+ size_t number_of_exports);
4793+ ```
4794+
4795+ - `callback` - a [jerry_native_module_evaluate_callback_t](#jerry_native_module_evaluate_callback_t) callback
4796+ which is called by [jerry_module_evaluate](#jerry_module_evaluate) to evaluate the native module.
4797+ - `exports_p` - list of the exported bindings of the module, must be valid string identifiers.
4798+ - `number_of_exports` - number of exports in the `exports_p` list.
4799+ - return
4800+ - a native module, if the module is successfully created
4801+ - error, otherwise
4802+
4803+ *New in version [[NEXT_RELEASE]]*.
4804+
4805+ **Example**
4806+
4807+ [doctest]: # (test="compile")
4808+
4809+ ```c
4810+ #include <jerryscript.h>
4811+
4812+ int
4813+ main (void)
4814+ {
4815+ jerry_init (JERRY_INIT_EMPTY);
4816+
4817+ jerry_value_t exports[2] =
4818+ {
4819+ jerry_create_string ((const jerry_char_t *) "first_export"),
4820+ jerry_create_string ((const jerry_char_t *) "second_export")
4821+ };
4822+
4823+ jerry_value_t native_module = jerry_native_module_create (NULL, exports, 2);
4824+
4825+ jerry_release_value (exports[0]);
4826+ jerry_release_value (exports[1]);
4827+ jerry_release_value (native_module);
4828+
4829+ jerry_cleanup ();
4830+ return 0;
4831+ }
4832+ ```
4833+
4834+ **See also**
4835+
4836+ - [jerry_module_link](#jerry_module_link)
4837+ - [jerry_module_evaluate](#jerry_module_evaluate)
4838+ - [jerry_native_module_get_export](#jerry_native_module_get_export)
4839+ - [jerry_native_module_set_export](#jerry_native_module_set_export)
4840+
4841+ ## jerry_native_module_get_export
4842+
4843+ Gets the value of an export binding which belongs to a native module.
4844+
4845+ *Notes*:
4846+ - Returned value must be freed with [jerry_release_value](#jerry_release_value)
4847+ when it is no longer needed.
4848+ - This API depends on a build option (`JERRY_MODULE_SYSTEM`) and can be checked
4849+ in runtime with the `JERRY_FEATURE_MODULE` feature enum value,
4850+ see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
4851+
4852+ **Prototype**
4853+
4854+ ```c
4855+ jerry_value_t
4856+ jerry_native_module_get_export (const jerry_value_t native_module_val,
4857+ const jerry_value_t export_name_val);
4858+ ```
4859+
4860+ - `module_val` - a native module object.
4861+ - `export_name_val` - string identifier of the export.
4862+ - return
4863+ - value of the export, if success
4864+ - error, otherwise
4865+
4866+ *New in version [[NEXT_RELEASE]]*.
4867+
4868+ **Example**
4869+
4870+ [doctest]: # (test="compile")
4871+
4872+ ```c
4873+ #include <jerryscript.h>
4874+
4875+ int
4876+ main (void)
4877+ {
4878+ jerry_init (JERRY_INIT_EMPTY);
4879+
4880+ jerry_value_t export = jerry_create_string ((const jerry_char_t *) "an_export");
4881+
4882+ jerry_value_t native_module = jerry_native_module_create (NULL, &export, 1);
4883+
4884+ jerry_value_t value = jerry_native_module_get_export (native_module, export);
4885+ jerry_release_value (value);
4886+
4887+ jerry_release_value (export);
4888+ jerry_release_value (native_module);
4889+
4890+ jerry_cleanup ();
4891+ return 0;
4892+ }
4893+ ```
4894+
4895+ **See also**
4896+
4897+ - [jerry_native_module_create](#jerry_native_module_create)
4898+ - [jerry_native_module_set_export](#jerry_native_module_set_export)
4899+
4900+ ## jerry_native_module_set_export
4901+
4902+ Sets the value of an export binding which belongs to a native module.
4903+
4904+ *Notes*:
4905+ - Returned value must be freed with [jerry_release_value](#jerry_release_value)
4906+ when it is no longer needed.
4907+ - This API depends on a build option (`JERRY_MODULE_SYSTEM`) and can be checked
4908+ in runtime with the `JERRY_FEATURE_MODULE` feature enum value,
4909+ see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
4910+
4911+ **Prototype**
4912+
4913+ ```c
4914+ jerry_value_t
4915+ jerry_value_t jerry_native_module_set_export (const jerry_value_t native_mmodule_val,
4916+ const jerry_value_t export_name_val,
4917+ const jerry_value_t value_to_set)
4918+ ```
4919+
4920+ - `module_val` - a native module object.
4921+ - `export_name_val` - string identifier of the export.
4922+ - `value_to_set` - new value of the export.
4923+ - return
4924+ - true, if success
4925+ - error, otherwise
4926+
4927+ *New in version [[NEXT_RELEASE]]*.
4928+
4929+ **Example**
4930+
4931+ [doctest]: # (test="compile")
4932+
4933+ ```c
4934+ #include <jerryscript.h>
4935+
4936+ int
4937+ main (void)
4938+ {
4939+ jerry_init (JERRY_INIT_EMPTY);
4940+
4941+ jerry_value_t export = jerry_create_string ((const jerry_char_t *) "an_export");
4942+
4943+ jerry_value_t native_module = jerry_native_module_create (NULL, &export, 1);
4944+
4945+ jerry_value_t number = jerry_create_number (3.5);
4946+ jerry_value_t value = jerry_native_module_set_export (native_module, export, number);
4947+ jerry_release_value (value);
4948+ jerry_release_value (number);
4949+
4950+ jerry_release_value (export);
4951+ jerry_release_value (native_module);
4952+
4953+ jerry_cleanup ();
4954+ return 0;
4955+ }
4956+ ```
4957+
4958+ **See also**
4959+
4960+ - [jerry_native_module_create](#jerry_native_module_create)
4961+ - [jerry_native_module_get_export](#jerry_native_module_get_export)
4962+
47464963# Functions for promise objects
47474964
47484965These APIs all depend on the es.next profile (or on some build options).
0 commit comments