diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-04-25 11:50:21 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-04-25 11:50:21 +0900 |
| commit | 140b9cad8bc424f055304cc328d9a98ff962df8e (patch) | |
| tree | c601d4d9a088672a904896e9e6eb1cf61054fb46 /tools | |
| parent | 86946043c3b42840a58bb11a9b2dd57ac5be873d (diff) | |
| parent | 68b76fcdecd6596e12ce3da2f7dda08ce73a952f (diff) | |
| download | mruby-140b9cad8bc424f055304cc328d9a98ff962df8e.tar.gz mruby-140b9cad8bc424f055304cc328d9a98ff962df8e.zip | |
Merge branch 'master' of github.com:mruby/mruby
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/mruby/mruby.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c index cdfe47460..e653b145d 100644 --- a/tools/mruby/mruby.c +++ b/tools/mruby/mruby.c @@ -12,6 +12,7 @@ void codedump_all(mrb_state*, int); struct _args { FILE *rfp; + char* cmdline; int mrbfile : 1; int check_syntax : 1; int verbose : 1; @@ -24,6 +25,7 @@ usage(const char *name) "switches:", "-b load and execute RiteBinary (mrb) file", "-c check syntax only", + "-e 'command' one line of script", "-v print version number, then run in verbose mode", "--verbose run in verbose mode", "--version print the version", @@ -41,6 +43,7 @@ static int parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) { char **origargv = argv; + int cmdline = 0; memset(args, 0, sizeof(*args)); @@ -56,6 +59,9 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) case 'c': args->check_syntax = 1; break; + case 'e': + cmdline = 1; + break; case 'v': ruby_show_version(mrb); args->verbose = 1; @@ -75,6 +81,9 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) return 0; } } + else if (cmdline) { + args->cmdline = strdup(*argv); + } else if (args->rfp == NULL) { if ((args->rfp = fopen(*argv, args->mrbfile ? "rb" : "r")) == NULL) { printf("%s: Cannot open program file. (%s)\n", *origargv, *argv); @@ -91,6 +100,8 @@ cleanup(struct _args *args) { if (args->rfp) fclose(args->rfp); + if (args->cmdline) + free(args->cmdline); } int @@ -102,7 +113,7 @@ main(int argc, char **argv) struct mrb_parser_state *p; n = parse_args(mrb, argc, argv, &args); - if (n < 0 || args.rfp == NULL) { + if (n < 0 || (args.cmdline == NULL && args.rfp == NULL)) { cleanup(&args); usage(argv[0]); return n; @@ -112,7 +123,12 @@ main(int argc, char **argv) n = mrb_load_irep(mrb, args.rfp); } else { - p = mrb_parse_file(mrb, args.rfp); + if (args.cmdline) { + p = mrb_parse_string(mrb, (char*)args.cmdline); + } + else { + p = mrb_parse_file(mrb, args.rfp); + } if (!p || !p->tree || p->nerr) { cleanup(&args); return -1; @@ -139,5 +155,5 @@ main(int argc, char **argv) cleanup(&args); - return n; + return n > 0 ? 0 : 1; } |
