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:
+38
-8
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user