Commit 98fb528f authored by Yukihiro Matsumoto's avatar Yukihiro Matsumoto

Merge branch 'master' of github.com:mruby/mruby

parents 231cb595 92f19252
...@@ -6,3 +6,4 @@ Original Authors "mruby developers" are: ...@@ -6,3 +6,4 @@ Original Authors "mruby developers" are:
Daniel Bovensiepen Daniel Bovensiepen
Jon Maken Jon Maken
Bjorn De Meyer Bjorn De Meyer
Yuichiro MASUI
...@@ -186,7 +186,7 @@ mrb_vm_cv_set(mrb_state *mrb, mrb_sym sym, mrb_value v) ...@@ -186,7 +186,7 @@ mrb_vm_cv_set(mrb_state *mrb, mrb_sym sym, mrb_value v)
if (k != kh_end(h)) { if (k != kh_end(h)) {
k = kh_put(iv, h, sym); k = kh_put(iv, h, sym);
kh_value(h, k) = v; kh_value(h, k) = v;
return; return;
} }
} }
c = c->super; c = c->super;
...@@ -233,26 +233,8 @@ const_get(mrb_state *mrb, struct RClass *base, mrb_sym sym) ...@@ -233,26 +233,8 @@ const_get(mrb_state *mrb, struct RClass *base, mrb_sym sym)
struct RClass *c = base; struct RClass *c = base;
khash_t(iv) *h; khash_t(iv) *h;
khiter_t k; khiter_t k;
mrb_sym cm = mrb_intern(mrb, "const_missing");
if (c->iv) {
h = c->iv;
k = kh_get(iv, h, sym);
if (k != kh_end(h)) {
return kh_value(h, k);
}
}
for (;;) {
c = mrb_class_outer_module(mrb, c);
if (!c) break;
if (c->iv) {
h = c->iv;
k = kh_get(iv, h, sym);
if (k != kh_end(h)) {
return kh_value(h, k);
}
}
}
c = base->super;
while (c) { while (c) {
if (c->iv) { if (c->iv) {
h = c->iv; h = c->iv;
...@@ -260,19 +242,14 @@ const_get(mrb_state *mrb, struct RClass *base, mrb_sym sym) ...@@ -260,19 +242,14 @@ const_get(mrb_state *mrb, struct RClass *base, mrb_sym sym)
if (k != kh_end(h)) { if (k != kh_end(h)) {
return kh_value(h, k); return kh_value(h, k);
} }
if (mrb_respond_to(mrb, mrb_obj_value(c), cm)) {
mrb_value argv = mrb_symbol_value(sym);
return mrb_funcall_argv(mrb, mrb_obj_value(c), "const_missing", 1, &argv);
}
} }
c = c->super; c = c->super;
} }
if (!c) {
c = mrb->object_class;
}
if (mrb_respond_to(mrb, mrb_obj_value(c), mrb_intern(mrb, "const_missing"))) {
mrb_value argv = mrb_symbol_value(sym);
return mrb_funcall_argv(mrb, mrb_obj_value(c), "const_missing", 1, &argv);
}
mrb_raise(mrb, E_NAME_ERROR, "uninitialized constant %s", mrb_raise(mrb, E_NAME_ERROR, "uninitialized constant %s",
mrb_sym2name(mrb, sym)); mrb_sym2name(mrb, sym));
/* not reached */ /* not reached */
......
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