diff options
| author | skandhas <[email protected]> | 2012-12-21 14:22:35 +0800 |
|---|---|---|
| committer | skandhas <[email protected]> | 2012-12-21 14:22:35 +0800 |
| commit | 824bacbee4beea7755e815a4aa733cb05f95268b (patch) | |
| tree | b21698cbadc5f693827d1420f4ba5e052e64eb71 | |
| parent | e48ed9c9649340544156dba57e3a6f29f536066b (diff) | |
| download | mruby-824bacbee4beea7755e815a4aa733cb05f95268b.tar.gz mruby-824bacbee4beea7755e815a4aa733cb05f95268b.zip | |
add mrb_mod_cv_set, mrb_cv_set
| -rw-r--r-- | include/mruby/variable.h | 2 | ||||
| -rw-r--r-- | src/variable.c | 28 |
2 files changed, 30 insertions, 0 deletions
diff --git a/include/mruby/variable.h b/include/mruby/variable.h index 8754e8a90..9f4a62317 100644 --- a/include/mruby/variable.h +++ b/include/mruby/variable.h @@ -57,6 +57,8 @@ mrb_sym mrb_class_sym(mrb_state *mrb, struct RClass *c, struct RClass *outer); mrb_value mrb_mod_class_variables(mrb_state*, mrb_value); mrb_value mrb_mod_cv_get(mrb_state *mrb, struct RClass * c, mrb_sym sym); mrb_value mrb_cv_get(mrb_state *mrb, mrb_value mod, mrb_sym sym); +void mrb_mod_cv_set(mrb_state *mrb, struct RClass * c, mrb_sym sym, mrb_value v); +void mrb_cv_set(mrb_state *mrb, mrb_value mod, mrb_sym sym, mrb_value v); /* GC functions */ void mrb_gc_mark_gv(mrb_state*); diff --git a/src/variable.c b/src/variable.c index 147373bd4..57a193109 100644 --- a/src/variable.c +++ b/src/variable.c @@ -695,6 +695,34 @@ mrb_cv_get(mrb_state *mrb, mrb_value mod, mrb_sym sym) return mrb_mod_cv_get(mrb, mrb_class_ptr(mod), sym); } +void +mrb_mod_cv_set(mrb_state *mrb, struct RClass * c, mrb_sym sym, mrb_value v) +{ + while (c) { + if (c->iv) { + iv_tbl *t = c->iv; + + if (iv_get(mrb, t, sym, NULL)) { + iv_put(mrb, t, sym, v); + return; + } + } + c = c->super; + } + + if (!c->iv) { + c->iv = iv_new(mrb); + } + + iv_put(mrb, c->iv, sym, v); +} + +void +mrb_cv_set(mrb_state *mrb, mrb_value mod, mrb_sym sym, mrb_value v) +{ + mrb_mod_cv_set(mrb, mrb_class_ptr(mod), sym, v); +} + mrb_value mrb_vm_cv_get(mrb_state *mrb, mrb_sym sym) { |
