From 49653b81ea978a5f02c4a6ce1ed53eb1cd0dbe7a Mon Sep 17 00:00:00 2001 From: KOBAYASHI Shuji Date: Sat, 30 Nov 2019 19:52:22 +0900 Subject: Quit `mruby -v` immediately if no program is given for Ruby compatibility --- mrbgems/mruby-bin-mruby/bintest/mruby.rb | 6 ++++++ mrbgems/mruby-bin-mruby/tools/mruby/mruby.c | 11 +++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) (limited to 'mrbgems/mruby-bin-mruby') diff --git a/mrbgems/mruby-bin-mruby/bintest/mruby.rb b/mrbgems/mruby-bin-mruby/bintest/mruby.rb index f63ac9a30..4edfd04c3 100644 --- a/mrbgems/mruby-bin-mruby/bintest/mruby.rb +++ b/mrbgems/mruby-bin-mruby/bintest/mruby.rb @@ -128,6 +128,12 @@ assert('mruby -r option (file not found)') do assert_mruby("", /\A.*: Cannot open library file: .*\n\z/, false, %w[-r _no_exists_]) end +assert('mruby -v option') do + ver_re = /\Amruby \d+\.\d+\.\d+ \(\d+-\d+-\d+\)\n/ + assert_mruby(/#{ver_re}\z/, "", true, %w[-v]) + assert_mruby(/#{ver_re}^[^\n]*NODE.*\n:end\n\z/m, "", true, %w[-v -e p(:end)]) +end + assert('mruby --verbose option') do assert_mruby(/\A[^\n]*NODE.*\n:end\n\z/m, "", true, %w[--verbose -e p(:end)]) end diff --git a/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c b/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c index facfe335e..f3593aa48 100644 --- a/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +++ b/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c @@ -14,6 +14,7 @@ struct _args { mrb_bool mrbfile : 1; mrb_bool check_syntax : 1; mrb_bool verbose : 1; + mrb_bool version : 1; mrb_bool debug : 1; int argc; char **argv; @@ -180,7 +181,10 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) } } else if (strcmp(opt, "v") == 0) { - if (!args->verbose) mrb_show_version(mrb); + if (!args->verbose) { + mrb_show_version(mrb); + args->version = TRUE; + } args->verbose = TRUE; } else if (strcmp(opt, "version") == 0) { @@ -203,7 +207,10 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) argc = opts->argc; argv = opts->argv; if (args->cmdline == NULL) { - if (*argv == NULL) args->rfp = stdin; + if (*argv == NULL) { + if (args->version) exit(EXIT_SUCCESS); + args->rfp = stdin; + } else { args->rfp = strcmp(argv[0], "-") == 0 ? stdin : fopen(argv[0], args->mrbfile ? "rb" : "r"); -- cgit v1.2.3