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); ...@@ -12,6 +12,7 @@ void codedump_all(mrb_state*, int);
struct _args { struct _args {
FILE *rfp; FILE *rfp;
char* cmdline;
int mrbfile : 1; int mrbfile : 1;
int check_syntax : 1; int check_syntax : 1;
int verbose : 1; int verbose : 1;
...@@ -24,6 +25,7 @@ usage(const char *name) ...@@ -24,6 +25,7 @@ usage(const char *name)
"switches:", "switches:",
"-b load and execute RiteBinary (mrb) file", "-b load and execute RiteBinary (mrb) file",
"-c check syntax only", "-c check syntax only",
"-e 'command' one line of script",
"-v print version number, then run in verbose mode", "-v print version number, then run in verbose mode",
"--verbose run in verbose mode", "--verbose run in verbose mode",
"--version print the version", "--version print the version",
...@@ -41,6 +43,7 @@ static int ...@@ -41,6 +43,7 @@ static int
parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args)
{ {
char **origargv = argv; char **origargv = argv;
int cmdline = 0;
memset(args, 0, sizeof(*args)); memset(args, 0, sizeof(*args));
...@@ -56,6 +59,9 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) ...@@ -56,6 +59,9 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args)
case 'c': case 'c':
args->check_syntax = 1; args->check_syntax = 1;
break; break;
case 'e':
cmdline = 1;
break;
case 'v': case 'v':
ruby_show_version(mrb); ruby_show_version(mrb);
args->verbose = 1; args->verbose = 1;
...@@ -75,6 +81,9 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) ...@@ -75,6 +81,9 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args)
return 0; return 0;
} }
} }
else if (cmdline) {
args->cmdline = strdup(*argv);
}
else if (args->rfp == NULL) { else if (args->rfp == NULL) {
if ((args->rfp = fopen(*argv, args->mrbfile ? "rb" : "r")) == NULL) { if ((args->rfp = fopen(*argv, args->mrbfile ? "rb" : "r")) == NULL) {
printf("%s: Cannot open program file. (%s)\n", *origargv, *argv); printf("%s: Cannot open program file. (%s)\n", *origargv, *argv);
...@@ -91,6 +100,8 @@ cleanup(struct _args *args) ...@@ -91,6 +100,8 @@ cleanup(struct _args *args)
{ {
if (args->rfp) if (args->rfp)
fclose(args->rfp); fclose(args->rfp);
if (args->cmdline)
free(args->cmdline);
} }
int int
...@@ -102,7 +113,7 @@ main(int argc, char **argv) ...@@ -102,7 +113,7 @@ main(int argc, char **argv)
struct mrb_parser_state *p; struct mrb_parser_state *p;
n = parse_args(mrb, argc, argv, &args); n = parse_args(mrb, argc, argv, &args);
if (n < 0 || args.rfp == NULL) { if (n < 0 || (args.cmdline == NULL && args.rfp == NULL)) {
cleanup(&args); cleanup(&args);
usage(argv[0]); usage(argv[0]);
return n; return n;
...@@ -111,8 +122,13 @@ main(int argc, char **argv) ...@@ -111,8 +122,13 @@ main(int argc, char **argv)
if (args.mrbfile) { if (args.mrbfile) {
n = mrb_load_irep(mrb, args.rfp); n = mrb_load_irep(mrb, args.rfp);
} }
else {
if (args.cmdline) {
p = mrb_parse_string(mrb, (char*)args.cmdline);
}
else { else {
p = mrb_parse_file(mrb, args.rfp); p = mrb_parse_file(mrb, args.rfp);
}
if (!p || !p->tree || p->nerr) { if (!p || !p->tree || p->nerr) {
cleanup(&args); cleanup(&args);
return -1; 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