diff options
| -rw-r--r-- | src/variable.c | 18 | ||||
| -rw-r--r-- | tools/mruby/mruby.c | 14 |
2 files changed, 25 insertions, 7 deletions
diff --git a/src/variable.c b/src/variable.c index af75f5169..eebe81575 100644 --- a/src/variable.c +++ b/src/variable.c @@ -700,7 +700,7 @@ const_get(mrb_state *mrb, struct RClass *base, mrb_sym sym) } c = c->super; } - if (!retry && base->tt == MRB_TT_MODULE) { + if (!retry && base && base->tt == MRB_TT_MODULE) { c = mrb->object_class; retry = 1; goto L_RETRY; @@ -733,6 +733,22 @@ mrb_vm_const_get(mrb_state *mrb, mrb_sym sym) struct RClass *c = mrb->ci->proc->target_class; if (!c) c = mrb->ci->target_class; + if (c) { + struct RClass *c2 = c; + mrb_value v; + + if (c->iv && iv_get(mrb, c->iv, sym, &v)) { + return v; + } + c2 = c; + for (;;) { + c2 = mrb_class_outer_module(mrb, c2); + if (!c2) break; + if (c2->iv && iv_get(mrb, c2->iv, sym, &v)) { + return v; + } + } + } return const_get(mrb, c, sym); } diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c index cbe170e7f..db26d23a1 100644 --- a/tools/mruby/mruby.c +++ b/tools/mruby/mruby.c @@ -113,7 +113,7 @@ append_cmdline: case '-': if (strcmp((*argv) + 2, "version") == 0) { mrb_show_version(mrb); - exit(0); + exit(0); } else if (strcmp((*argv) + 2, "verbose") == 0) { args->verbose = 1; @@ -121,7 +121,7 @@ append_cmdline: } else if (strcmp((*argv) + 2, "copyright") == 0) { mrb_show_copyright(mrb); - exit(0); + exit(0); } else return -3; return 0; @@ -135,8 +135,8 @@ append_cmdline: else { args->rfp = fopen(argv[0], args->mrbfile ? "rb" : "r"); if (args->rfp == NULL) { - printf("%s: Cannot open program file. (%s)\n", *origargv, *argv); - return 0; + printf("%s: Cannot open program file. (%s)\n", *origargv, *argv); + return 0; } args->fname = 1; args->cmdline = argv[0]; @@ -196,8 +196,10 @@ main(int argc, char **argv) } else if (!args.check_syntax) { mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb)); + n = 0; if (mrb->exc) { - p(mrb, mrb_obj_value(mrb->exc)); + p(mrb, mrb_obj_value(mrb->exc)); + n = -1; } } } @@ -221,7 +223,7 @@ main(int argc, char **argv) mrbc_context_free(mrb, c); if (mrb->exc) { if (!mrb_undef_p(v)) { - p(mrb, mrb_obj_value(mrb->exc)); + p(mrb, mrb_obj_value(mrb->exc)); } n = -1; } |
