Commit 68b76fcd authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto

Merge pull request #50 from mattn/e_flag

add -e flag.
parents 0a0bc729 bc414457
......@@ -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;
......@@ -111,8 +122,13 @@ main(int argc, char **argv)
if (args.mrbfile) {
n = mrb_load_irep(mrb, args.rfp);
}
else {
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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment