Skip to content

Add help flag and usage to UNIX Jerry standalone. #1000

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 11, 2016
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 81 additions & 31 deletions main-unix.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,36 @@ assert_handler (const jerry_api_object_t *function_obj_p __attr_unused___, /** <
}
} /* assert_handler */

static void
print_usage (char *name)
{
printf ("Usage: %s [OPTION]... [FILE]...\n"
"Try '%s --help' for more information.\n",
name, name);
} /* print_usage */

static void
print_help (char *name)
{
printf ("Usage: %s [OPTION]... [FILE]...\n"
"\n"
"Options:\n"
" -h, --help\n"
" -v, --version\n"
" --mem-stats\n"
" --mem-stats-separate\n"
" --parse-only\n"
" --show-opcodes\n"
" --save-snapshot-for-global FILE\n"
" --save-snapshot-for-eval FILE\n"
" --exec-snapshot FILE\n"
" --log-level [0-3]\n"
" --log-file FILE\n"
" --abort-on-fail\n"
"\n",
name);
} /* print_help */

int
main (int argc,
char **argv)
Expand Down Expand Up @@ -226,12 +256,18 @@ main (int argc,
#endif /* JERRY_ENABLE_LOG */
for (i = 1; i < argc; i++)
{
if (!strcmp ("-v", argv[i]))
if (!strcmp ("-h", argv[i]) || !strcmp ("--help", argv[i]))
{
print_help (argv[0]);
return JERRY_STANDALONE_EXIT_CODE_OK;
}
else if (!strcmp ("-v", argv[i]) || !strcmp ("--version", argv[i]))
{
printf ("Build date: \t%s\n", jerry_build_date);
printf ("Commit hash:\t%s\n", jerry_commit_hash);
printf ("Branch name:\t%s\n", jerry_branch_name);
printf ("\n");
return JERRY_STANDALONE_EXIT_CODE_OK;
}
else if (!strcmp ("--mem-stats", argv[i]))
{
Expand All @@ -255,66 +291,80 @@ main (int argc,
is_save_snapshot_mode = true;
is_save_snapshot_mode_for_global_or_eval = !strcmp ("--save-snapshot-for-global", argv[i]);

flags |= JERRY_FLAG_PARSE_ONLY;

if (save_snapshot_file_name_p == NULL
&& ++i < argc)
if (save_snapshot_file_name_p != NULL)
{
save_snapshot_file_name_p = argv[i];
JERRY_ERROR_MSG ("Error: snapshot file name already specified\n");
print_usage (argv[0]);
return JERRY_STANDALONE_EXIT_CODE_FAIL;
}
else

if (++i >= argc)
{
JERRY_ERROR_MSG ("Error: wrong format of the arguments\n");
JERRY_ERROR_MSG ("Error: no file specified for %s\n", argv[i - 1]);
print_usage (argv[0]);
return JERRY_STANDALONE_EXIT_CODE_FAIL;
}

flags |= JERRY_FLAG_PARSE_ONLY;
save_snapshot_file_name_p = argv[i];
}
else if (!strcmp ("--exec-snapshot", argv[i]))
{
if (++i < argc)
{
JERRY_ASSERT (exec_snapshots_count < JERRY_MAX_COMMAND_LINE_ARGS);
exec_snapshot_file_names[exec_snapshots_count++] = argv[i];
}
else
if (++i >= argc)
{
JERRY_ERROR_MSG ("Error: wrong format of the arguments\n");
JERRY_ERROR_MSG ("Error: no file specified for %s\n", argv[i - 1]);
print_usage (argv[0]);
return JERRY_STANDALONE_EXIT_CODE_FAIL;
}

JERRY_ASSERT (exec_snapshots_count < JERRY_MAX_COMMAND_LINE_ARGS);
exec_snapshot_file_names[exec_snapshots_count++] = argv[i];
}
else if (!strcmp ("--log-level", argv[i]))
{
flags |= JERRY_FLAG_ENABLE_LOG;
if (++i < argc && strlen (argv[i]) == 1 && argv[i][0] >='0' && argv[i][0] <= '3')
if (++i >= argc)
{
#ifdef JERRY_ENABLE_LOG
jerry_debug_level = argv[i][0] - '0';
#endif /* JERRY_ENABLE_LOG */
JERRY_ERROR_MSG ("Error: no level specified for %s\n", argv[i - 1]);
print_usage (argv[0]);
return JERRY_STANDALONE_EXIT_CODE_FAIL;
}
else

if (strlen (argv[i]) != 1 || argv[i][0] < '0' || argv[i][0] > '3')
{
JERRY_ERROR_MSG ("Error: wrong format or invalid argument\n");
JERRY_ERROR_MSG ("Error: wrong format for %s\n", argv[i - 1]);
print_usage (argv[0]);
return JERRY_STANDALONE_EXIT_CODE_FAIL;
}

#ifdef JERRY_ENABLE_LOG
flags |= JERRY_FLAG_ENABLE_LOG;
jerry_debug_level = argv[i][0] - '0';
#endif /* JERRY_ENABLE_LOG */
}
else if (!strcmp ("--log-file", argv[i]))
{
flags |= JERRY_FLAG_ENABLE_LOG;
if (++i < argc)
{
#ifdef JERRY_ENABLE_LOG
log_file_name = argv[i];
#endif /* JERRY_ENABLE_LOG */
}
else
if (++i >= argc)
{
JERRY_ERROR_MSG ("Error: wrong format of the arguments\n");
JERRY_ERROR_MSG ("Error: no file specified for %s\n", argv[i - 1]);
print_usage (argv[0]);
return JERRY_STANDALONE_EXIT_CODE_FAIL;
}

#ifdef JERRY_ENABLE_LOG
flags |= JERRY_FLAG_ENABLE_LOG;
log_file_name = argv[i];
#endif /* JERRY_ENABLE_LOG */
}
else if (!strcmp ("--abort-on-fail", argv[i]))
{
flags |= JERRY_FLAG_ABORT_ON_FAIL;
}
else if (!strncmp ("-", argv[i], 1))
{
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we need an error message here to let the user know why we are exiting. E.g., "Error: unrecognized option: %s\n", argv[i] .

BTW, might be worth revisiting the other error messages of arg handling as well and improve them a little. E.g, "Error: wrong format of the arguments\n" doesn't say much at --save-snapshot-for-global. We could have something like:

if (save_snapshot_file_name_p != NULL)
{
  JERRY_ERROR_MSG ("Error: snapshot file name already specified\n");
  return JERRY_STANDALONE_EXIT_CODE_FAIL
}
if (++i >= argc)
{
  JERRY_ERROR_MSG ("Error: missing argument of %s\n", argv[i-1]);
  return JERRY_STANDALONE_EXIT_CODE_FAIL
}

Similarly elsewhere.

JERRY_ERROR_MSG ("Error: unrecognized option: %s\n", argv[i]);
print_usage (argv[0]);
return JERRY_STANDALONE_EXIT_CODE_FAIL;
}
else
{
file_names[files_counter++] = argv[i];
Expand Down