Rework module parsing and execution (#4462)

This patch disables automatic detection of module code, and instead
requires the user to explicitly specify whether to parse a source
as a module or as a script.

To achieve this the jerry_parse API function now takes a new option
which signals that the source should be parsed as a module.

JerryScript-DCO-1.0-Signed-off-by: Dániel Bátyai daniel.batyai@h-lab.eu
This commit is contained in:
Dániel Bátyai
2021-01-18 15:33:43 +01:00
committed by GitHub
parent ef8a6a9f39
commit 0fec9135ec
85 changed files with 575 additions and 492 deletions
+16
View File
@@ -44,6 +44,7 @@ typedef enum
OPT_DEBUGGER_WAIT_SOURCE,
OPT_EXEC_SNAP,
OPT_EXEC_SNAP_FUNC,
OPT_MODULE,
OPT_LOG_LEVEL,
OPT_NO_PROMPT,
OPT_CALL_ON_EXIT,
@@ -85,6 +86,8 @@ static const cli_opt_t main_opts[] =
.help = "execute input snapshot file(s)"),
CLI_OPT_DEF (.id = OPT_EXEC_SNAP_FUNC, .longopt = "exec-snapshot-func", .meta = "FILE NUM",
.help = "execute specific function from input snapshot file(s)"),
CLI_OPT_DEF (.id = OPT_MODULE, .opt = "m", .longopt = "module", .meta = "FILE",
.help = "execute module file"),
CLI_OPT_DEF (.id = OPT_LOG_LEVEL, .longopt = "log-level", .meta = "NUM",
.help = "set log level (0-3)"),
CLI_OPT_DEF (.id = OPT_NO_PROMPT, .longopt = "no-prompt",
@@ -307,6 +310,19 @@ main_parse_args (int argc, /**< argc */
break;
}
case OPT_MODULE:
{
const uint32_t path_index = cli_consume_path (&cli_state);
main_source_t *source_p = arguments_p->sources_p + arguments_p->source_count;
arguments_p->source_count++;
source_p->type = SOURCE_MODULE;
source_p->path_index = path_index;
source_p->snapshot_index = 0;
break;
}
case OPT_LOG_LEVEL:
{
long int log_level = cli_consume_int (&cli_state);
+1
View File
@@ -38,6 +38,7 @@ typedef enum
typedef enum
{
SOURCE_SNAPSHOT,
SOURCE_MODULE,
SOURCE_SCRIPT,
} main_source_type_t;
+10 -2
View File
@@ -86,6 +86,8 @@ restart:
goto exit;
}
uint32_t parse_opts = JERRY_PARSE_NO_OPTS;
switch (source_file_p->type)
{
case SOURCE_SNAPSHOT:
@@ -98,9 +100,15 @@ 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);
assert (source_file_p->type == SOURCE_SCRIPT
|| source_file_p->type == SOURCE_MODULE);
if (!jerry_is_valid_utf8_string ((jerry_char_t *) source_p, (jerry_size_t) source_size))
{
@@ -113,7 +121,7 @@ restart:
strlen (file_path_p),
source_p,
source_size,
JERRY_PARSE_NO_OPTS);
parse_opts);
jerry_port_release_source (source_p);