summaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-07-13 15:36:43 +0900
committerYukihiro Matsumoto <[email protected]>2012-07-13 15:36:43 +0900
commit8e1c842b7e17ecb58e25e48e0cac253bceb00f14 (patch)
tree9fff744ddb21143e41a1b7af6346fc7e874f4c13 /tools
parent737eaea038af56794b8fdb5a66bb4138dbd446f6 (diff)
downloadmruby-8e1c842b7e17ecb58e25e48e0cac253bceb00f14.tar.gz
mruby-8e1c842b7e17ecb58e25e48e0cac253bceb00f14.zip
simpify mruby/mrbc using context
Diffstat (limited to 'tools')
-rw-r--r--tools/mrbc/mrbc.c24
-rw-r--r--tools/mruby/mruby.c58
2 files changed, 33 insertions, 49 deletions
diff --git a/tools/mrbc/mrbc.c b/tools/mrbc/mrbc.c
index 8da37832a..a70353d63 100644
--- a/tools/mrbc/mrbc.c
+++ b/tools/mrbc/mrbc.c
@@ -158,7 +158,8 @@ main(int argc, char **argv)
mrb_state *mrb = mrb_open();
int n = -1;
struct _args args;
- struct mrb_parser_state *p;
+ mrbc_context *c;
+ mrb_value result;
if (mrb == NULL) {
fprintf(stderr, "Invalid mrb_state, exiting mrbc");
@@ -166,7 +167,6 @@ main(int argc, char **argv)
}
n = parse_args(mrb, argc, argv, &args);
-
if (n < 0 || args.rfp == NULL) {
cleanup(&args);
usage(argv[0]);
@@ -174,22 +174,17 @@ main(int argc, char **argv)
return n;
}
- p = mrb_parse_file(mrb, args.rfp, NULL);
- if (!p || !p->tree || p->nerr) {
+ c = mrbc_context_new(mrb);
+ if (args.verbose)
+ c->dump_result = 1;
+ c->no_exec = 1;
+ result = mrb_load_file_cxt(mrb, args.rfp, c);
+ if (mrb_nil_p(result)) {
cleanup(&args);
mrb_close(mrb);
return -1;
}
-
- if (args.verbose)
- parser_dump(mrb, p->tree, 0);
-
- n = mrb_generate_code(mrb, p->tree);
- mrb_parser_free(p);
-
- if (args.verbose)
- codedump_all(mrb, n);
-
+ n = mrb_fixnum(result);
if (n < 0 || args.check_syntax) {
cleanup(&args);
mrb_close(mrb);
@@ -215,4 +210,3 @@ void
mrb_init_mrblib(mrb_state *mrb)
{
}
-
diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c
index 12cdc86e9..65eae57e1 100644
--- a/tools/mruby/mruby.c
+++ b/tools/mruby/mruby.c
@@ -9,8 +9,6 @@
void mrb_show_version(mrb_state *);
void mrb_show_copyright(mrb_state *);
-void parser_dump(mrb_state*, struct mrb_ast_node*, int);
-void codedump_all(mrb_state*, int);
struct _args {
FILE *rfp;
@@ -149,7 +147,7 @@ main(int argc, char **argv)
int n = -1;
int i;
struct _args args;
- struct mrb_parser_state *p;
+ mrb_value ARGV;
if (mrb == NULL) {
fprintf(stderr, "Invalid mrb_state, exiting mruby");
@@ -163,50 +161,42 @@ main(int argc, char **argv)
return n;
}
+ ARGV = mrb_ary_new(mrb);
+ for (i = 0; i < args.argc; i++) {
+ mrb_ary_push(mrb, ARGV, mrb_str_new(mrb, args.argv[i], strlen(args.argv[i])));
+ }
+ mrb_define_global_const(mrb, "ARGV", ARGV);
+
if (args.mrbfile) {
n = mrb_load_irep(mrb, args.rfp);
+ if (n >= 0) {
+ if (!args.check_syntax) {
+ mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));
+ if (mrb->exc) {
+ mrb_p(mrb, mrb_obj_value(mrb->exc));
+ }
+ }
+ }
}
else {
mrbc_context *c = mrbc_context_new(mrb);
+
+ if (args.verbose)
+ c->dump_result = 1;
+ if (args.check_syntax)
+ c->no_exec = 1;
+
if (args.cmdline) {
mrbc_filename(mrb, c, "-e");
- p = mrb_parse_string(mrb, (char*)args.cmdline, c);
- }
+ mrb_load_string_cxt(mrb, (char*)args.cmdline, c);
+ }
else {
mrbc_filename(mrb, c, argv[1]);
- p = mrb_parse_file(mrb, args.rfp, c);
+ mrb_load_file_cxt(mrb, args.rfp, c);
}
mrbc_context_free(mrb, c);
- if (!p || !p->tree || p->nerr) {
- cleanup(mrb, &args);
return -1;
- }
-
- if (args.verbose)
- parser_dump(mrb, p->tree, 0);
-
- n = mrb_generate_code(mrb, p->tree);
- mrb_parser_free(p);
- }
-
- if (n >= 0) {
- mrb_value ARGV = mrb_ary_new(mrb);
- for (i = 0; i < args.argc; i++) {
- mrb_ary_push(mrb, ARGV, mrb_str_new(mrb, args.argv[i], strlen(args.argv[i])));
- }
- mrb_define_global_const(mrb, "ARGV", ARGV);
-
- if (args.verbose)
- codedump_all(mrb, n);
-
- if (!args.check_syntax) {
- mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));
- if (mrb->exc) {
- mrb_p(mrb, mrb_obj_value(mrb->exc));
- }
- }
}
-
cleanup(mrb, &args);
return n > 0 ? 0 : 1;