Implement import.meta object (#4766)
JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
+104
-4
@@ -952,6 +952,31 @@ typedef void (*jerry_module_state_changed_callback_t) (jerry_module_state_t new_
|
||||
**See also**
|
||||
- [jerry_module_set_state_changed_callback](#jerry_module_set_state_changed_callback)
|
||||
|
||||
## jerry_module_import_meta_callback_t
|
||||
|
||||
**Summary**
|
||||
|
||||
Callback which is called when an import.meta expression of a module is evaluated the first time.
|
||||
The object returned by import.meta is passed as the `meta_object` argument to the callback, and
|
||||
the callback can set the initial status of the object (e.g. add properties or set prototype).
|
||||
|
||||
**Prototype**
|
||||
|
||||
```c
|
||||
typedef void (*jerry_module_import_meta_callback_t) (const jerry_value_t module,
|
||||
const jerry_value_t meta_object,
|
||||
void *user_p);
|
||||
```
|
||||
|
||||
- `module` - module whose import.meta object is requested.
|
||||
- `meta_object` - import.meta object created for the module.
|
||||
- `user_p` - pointer passed to [jerry_module_set_import_meta_callback](#jerry_module_set_import_meta_callback).
|
||||
|
||||
*New in version [[NEXT_RELEASE]]*.
|
||||
|
||||
**See also**
|
||||
- [jerry_module_set_import_meta_callback](#jerry_module_set_import_meta_callback)
|
||||
|
||||
## jerry_native_module_evaluate_callback_t
|
||||
|
||||
**Summary**
|
||||
@@ -4996,13 +5021,12 @@ Sets a callback which is called after a module state is changed to linked, evalu
|
||||
**Prototype**
|
||||
|
||||
```c
|
||||
void
|
||||
jerry_module_set_state_changed_callback (jerry_module_state_changed_callback_t callback,
|
||||
void *user_p)
|
||||
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.
|
||||
- `user_p` - pointer passed to the callback function.
|
||||
|
||||
*New in version [[NEXT_RELEASE]]*.
|
||||
|
||||
@@ -5060,6 +5084,82 @@ main (void)
|
||||
- [jerry_module_state_t](#jerry_module_state_t)
|
||||
- [jerry_module_state_changed_callback_t](#jerry_module_state_changed_callback_t)
|
||||
|
||||
## jerry_module_set_import_meta_callback
|
||||
|
||||
**Summary**
|
||||
|
||||
Sets a callback which is called when an import.meta expression of a module is evaluated the first time.
|
||||
|
||||
*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_import_meta_callback (jerry_module_import_meta_callback_t callback,
|
||||
void *user_p);
|
||||
```
|
||||
|
||||
- `callback` - callback, which is called when an import.meta
|
||||
expression of a module is evaluated the first time
|
||||
- `user_p` - 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_import_meta_callback (const jerry_value_t module, /**< module */
|
||||
const jerry_value_t meta_object, /**< import.meta object */
|
||||
void *user_p) /**< user pointer */
|
||||
{
|
||||
(void) user_p;
|
||||
|
||||
/* Create a property for the meta object */
|
||||
jerry_value_t property_name_value = jerry_create_string ((const jerry_char_t *) "prop");
|
||||
jerry_value_t property_value = jerry_create_string ((const jerry_char_t *) "prop");
|
||||
jerry_value_t result_value = jerry_set_property (meta_object, property_name_value, property_value);
|
||||
jerry_release_value (result_value);
|
||||
jerry_release_value (property_value);
|
||||
jerry_release_value (property_name_value);
|
||||
} /* module_import_meta_callback */
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
|
||||
const jerry_char_t script[] = "import.meta";
|
||||
|
||||
jerry_module_set_import_meta_callback (module_import_meta_callback, NULL);
|
||||
|
||||
jerry_parse_options_t parse_options;
|
||||
parse_options.options = JERRY_PARSE_MODULE;
|
||||
|
||||
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 (jerry_module_evaluate (module_value));
|
||||
|
||||
jerry_release_value (module_value);
|
||||
|
||||
jerry_cleanup ();
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
**See also**
|
||||
|
||||
- [jerry_module_import_meta_callback_t](#jerry_module_import_meta_callback_t)
|
||||
|
||||
## jerry_module_get_number_of_requests
|
||||
|
||||
**Summary**
|
||||
|
||||
Reference in New Issue
Block a user