summaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authormattn <[email protected]>2012-04-25 10:16:38 +0900
committermattn <[email protected]>2012-04-25 10:16:38 +0900
commitbc414457147c56c76e87fefb19c0c0a0ae36164e (patch)
treecedbe864619f428bb32c19fe3456b4c307367f8e /tools
parent7edd7762b026258f66815a6593a7f71313f7e3e9 (diff)
downloadmruby-bc414457147c56c76e87fefb19c0c0a0ae36164e.tar.gz
mruby-bc414457147c56c76e87fefb19c0c0a0ae36164e.zip
add -e flag.
Diffstat (limited to 'tools')
-rw-r--r--tools/mruby/mruby.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c
index aea2a7cd6..6f42d88a9 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;