summaryrefslogtreecommitdiffhomepage
path: root/src/variable.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-06-11 15:37:49 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2020-10-12 16:21:10 +0900
commit52507b1083ba1c562ae506d63a07a51a26815c21 (patch)
tree1c4087091f82fd792b5d81c3ef2c8c384e1854f4 /src/variable.c
parent7deb41b0e88b3670476ed86bab541340f5551b52 (diff)
downloadmruby-52507b1083ba1c562ae506d63a07a51a26815c21.tar.gz
mruby-52507b1083ba1c562ae506d63a07a51a26815c21.zip
Generate C struct from `irep` instead of binary dump.
Diffstat (limited to 'src/variable.c')
-rw-r--r--src/variable.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/variable.c b/src/variable.c
index 8fcbd6427..526d88c80 100644
--- a/src/variable.c
+++ b/src/variable.c
@@ -741,11 +741,11 @@ mrb_vm_cv_get(mrb_state *mrb, mrb_sym sym)
{
struct RClass *c;
- struct RProc *p = mrb->c->ci->proc;
+ const struct RProc *p = mrb->c->ci->proc;
for (;;) {
c = MRB_PROC_TARGET_CLASS(p);
- if (c->tt != MRB_TT_SCLASS) break;
+ if (c && c->tt != MRB_TT_SCLASS) break;
p = p->upper;
}
return mrb_mod_cv_get(mrb, c, sym);
@@ -755,11 +755,11 @@ void
mrb_vm_cv_set(mrb_state *mrb, mrb_sym sym, mrb_value v)
{
struct RClass *c;
- struct RProc *p = mrb->c->ci->proc;
+ const struct RProc *p = mrb->c->ci->proc;
for (;;) {
c = MRB_PROC_TARGET_CLASS(p);
- if (c->tt != MRB_TT_SCLASS) break;
+ if (c && c->tt != MRB_TT_SCLASS) break;
p = p->upper;
}
mrb_mod_cv_set(mrb, c, sym, v);
@@ -817,9 +817,10 @@ mrb_vm_const_get(mrb_state *mrb, mrb_sym sym)
struct RClass *c;
struct RClass *c2;
mrb_value v;
- struct RProc *proc;
+ const struct RProc *proc;
c = MRB_PROC_TARGET_CLASS(mrb->c->ci->proc);
+ if (!c) c = mrb->object_class;
if (iv_get(mrb, c->iv, sym, &v)) {
return v;
}
@@ -862,6 +863,7 @@ mrb_vm_const_set(mrb_state *mrb, mrb_sym sym, mrb_value v)
struct RClass *c;
c = MRB_PROC_TARGET_CLASS(mrb->c->ci->proc);
+ if (!c) c = mrb->object_class;
mrb_obj_iv_set(mrb, (struct RObject*)c, sym, v);
}