Add notification callback for module state changes (#4656)

JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
Zoltan Herczeg
2021-04-16 17:50:57 +02:00
committed by GitHub
parent a7a4cb29e4
commit 1f2a8d4ac1
7 changed files with 252 additions and 6 deletions
+105
View File
@@ -820,6 +820,32 @@ typedef jerry_value_t (*jerry_module_resolve_callback_t) (const jerry_value_t sp
- [jerry_module_link](#jerry_module_link)
- [jerry_get_global_object](#jerry_get_global_object)
## jerry_module_state_changed_callback_t
**Summary**
Callback which is called after the module enters into linked, evaluated or error state.
**Prototype**
```c
typedef void (*jerry_module_state_changed_callback_t) (jerry_module_state_t new_state,
const jerry_value_t module,
const jerry_value_t value,
void *user_p);
```
- `new_state` - new state of the module.
- `module` - a module whose state is changed
- `value` - depends on the state: undefined for linked, module script result for evaluated,
and error value for error state.
- `user_p` - pointer passed to [jerry_module_set_state_changed_callback](#jerry_module_set_state_changed_callback).
*New in version [[NEXT_RELEASE]]*.
**See also**
- [jerry_module_set_state_changed_callback](#jerry_module_set_state_changed_callback)
## jerry_native_module_evaluate_callback_t
**Summary**
@@ -4558,6 +4584,85 @@ main (void)
- [jerry_module_state_t](#jerry_module_state_t)
## jerry_module_set_state_changed_callback
**Summary**
Sets a callback which is called after a module state is changed to linked, evaluated, or error.
*Notes*:
- This API depends on a build option (`JERRY_MODULE_SYSTEM`) and can be checked
in runtime with the `JERRY_FEATURE_MODULE` feature enum value,
see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
**Prototype**
```c
void
jerry_module_set_state_changed_callback (jerry_module_state_changed_callback_t callback,
void *user_p)
```
- `callback` - callback, which is called after the state change.
- `module_val` - pointer passed to the callback function.
*New in version [[NEXT_RELEASE]]*.
**Example**
[doctest]: # (test="compile")
```c
#include <jerryscript.h>
#include <stdio.h>
static void
module_state_changed (jerry_module_state_t new_state, /**< new state of the module */
const jerry_value_t module_val, /**< a module whose state is changed */
const jerry_value_t value, /**< value argument */
void *user_p) /**< user pointer */
{
(void) module_val;
(void) value;
(void) user_p;
if (new_state == JERRY_MODULE_STATE_LINKED)
{
printf ("A module is entered into linked state\n");
}
} /* module_state_changed */
int
main (void)
{
jerry_init (JERRY_INIT_EMPTY);
const jerry_char_t script[] = "12";
const jerry_char_t file[] = "a.mjs";
jerry_module_set_state_changed_callback (module_state_changed, NULL);
jerry_parse_options_t parse_options;
parse_options.options = JERRY_PARSE_MODULE | JERRY_PARSE_HAS_RESOURCE;
parse_options.resource_name_p = file;
parse_options.resource_name_length = sizeof (file) - 1;
jerry_value_t module_value = jerry_parse (script, sizeof (script) - 1, &parse_options);
jerry_release_value (jerry_module_link (module_value, NULL, NULL));
jerry_release_value (module_value);
jerry_cleanup ();
return 0;
}
```
**See also**
- [jerry_module_state_t](#jerry_module_state_t)
- [jerry_module_state_changed_callback_t](#jerry_module_state_changed_callback_t)
## jerry_module_get_number_of_requests
**Summary**