From 9599381ae334ac474d40dc617407d2b05f17a328 Mon Sep 17 00:00:00 2001 From: skandhas Date: Sun, 23 Dec 2012 15:25:24 +0800 Subject: add mrb_mod_cv_defined and mrb_cv_defined --- include/mruby/variable.h | 2 ++ src/variable.c | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/include/mruby/variable.h b/include/mruby/variable.h index 9f4a62317..f2f22e65a 100644 --- a/include/mruby/variable.h +++ b/include/mruby/variable.h @@ -59,6 +59,8 @@ 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); +int mrb_mod_cv_defined(mrb_state *mrb, struct RClass * c, mrb_sym sym); +int mrb_cv_defined(mrb_state *mrb, mrb_value mod, mrb_sym sym); /* GC functions */ void mrb_gc_mark_gv(mrb_state*); diff --git a/src/variable.c b/src/variable.c index 71187af5f..5d46ffc60 100644 --- a/src/variable.c +++ b/src/variable.c @@ -730,6 +730,26 @@ 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); } +int +mrb_mod_cv_defined(mrb_state *mrb, struct RClass * c, mrb_sym sym) +{ + while (c) { + if (c->iv) { + iv_tbl *t = c->iv; + if (iv_get(mrb, t, sym, NULL)) return TRUE; + } + c = c->super; + } + + return FALSE; +} + +int +mrb_cv_defined(mrb_state *mrb, mrb_value mod, mrb_sym sym) +{ + return mrb_mod_cv_defined(mrb, mrb_class_ptr(mod), sym); +} + mrb_value mrb_vm_cv_get(mrb_state *mrb, mrb_sym sym) { -- cgit v1.2.3