Rework module linking (#4632)

The module linking process from jerry_parse is moved out into
a new jerry_module_link function, and jerry_parse is limited to
create unlinked modules.

JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
Zoltan Herczeg
2021-03-30 15:40:09 +02:00
committed by GitHub
parent 874a6a49d5
commit 6c484f3529
22 changed files with 1574 additions and 789 deletions
+38 -8
View File
@@ -78,6 +78,43 @@ restart:
main_source_t *source_file_p = sources_p + source_index;
const char *file_path_p = argv[source_file_p->path_index];
if (source_file_p->type == SOURCE_MODULE)
{
jerry_value_t specifier = jerry_create_string_from_utf8 ((const jerry_char_t *) file_path_p);
jerry_value_t referrer = jerry_create_undefined ();
ret_value = jerry_port_module_resolve (specifier, referrer, NULL);
jerry_release_value (referrer);
jerry_release_value (specifier);
if (!jerry_value_is_error (ret_value))
{
jerry_value_t link_val = jerry_module_link (ret_value, NULL, NULL);
if (jerry_value_is_error (link_val))
{
jerry_release_value (ret_value);
ret_value = link_val;
}
else
{
jerry_release_value (link_val);
jerry_value_t func_val = ret_value;
ret_value = jerry_run (func_val);
jerry_release_value (func_val);
}
}
if (jerry_value_is_error (ret_value))
{
main_print_unhandled_exception (ret_value);
goto exit;
}
jerry_release_value (ret_value);
continue;
}
size_t source_size;
uint8_t *source_p = jerry_port_read_source (file_path_p, &source_size);
@@ -86,8 +123,6 @@ restart:
goto exit;
}
uint32_t parse_opts = JERRY_PARSE_NO_OPTS;
switch (source_file_p->type)
{
case SOURCE_SNAPSHOT:
@@ -100,11 +135,6 @@ restart:
jerry_port_release_source (source_p);
break;
}
case SOURCE_MODULE:
{
parse_opts = JERRY_PARSE_MODULE;
/* FALLTHRU */
}
default:
{
assert (source_file_p->type == SOURCE_SCRIPT
@@ -118,7 +148,7 @@ restart:
}
jerry_parse_options_t parse_options;
parse_options.options = parse_opts | JERRY_PARSE_HAS_RESOURCE;
parse_options.options = JERRY_PARSE_HAS_RESOURCE;
parse_options.resource_name_p = (jerry_char_t *) file_path_p;
parse_options.resource_name_length = (size_t) strlen (file_path_p);