summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/variable.c18
-rw-r--r--tools/mruby/mruby.c14
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;
}