Skip to content

Commit fb6e1fe

Browse files
committed
Support native modules
JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
1 parent 053389d commit fb6e1fe

File tree

15 files changed

+770
-100
lines changed

15 files changed

+770
-100
lines changed

docs/02.API-REFERENCE.md

Lines changed: 218 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

47484965
These APIs all depend on the es.next profile (or on some build options).

0 commit comments

Comments
 (0)