diff options
| -rw-r--r-- | include/mruby.h | 6 | ||||
| -rw-r--r-- | src/symbol.c | 13 |
2 files changed, 12 insertions, 7 deletions
diff --git a/include/mruby.h b/include/mruby.h index e249a0455..0d948b7a0 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -195,9 +195,9 @@ mrb_value mrb_funcall_with_block(mrb_state*, mrb_value, mrb_sym, int, mrb_value* mrb_sym mrb_intern_cstr(mrb_state*,const char*); mrb_sym mrb_intern2(mrb_state*,const char*,size_t); mrb_sym mrb_intern_str(mrb_state*,mrb_value); -mrb_bool mrb_cstr_interned(mrb_state*,const char*); -mrb_bool mrb_interned(mrb_state*,const char*,size_t); -mrb_bool mrb_str_interned(mrb_state*,mrb_value); +mrb_value mrb_cstr_interned(mrb_state*,const char*); +mrb_value mrb_interned(mrb_state*,const char*,size_t); +mrb_value mrb_str_interned(mrb_state*,mrb_value); const char *mrb_sym2name(mrb_state*,mrb_sym); const char *mrb_sym2name_len(mrb_state*,mrb_sym,size_t*); mrb_value mrb_sym2str(mrb_state*,mrb_sym); diff --git a/src/symbol.c b/src/symbol.c index 3d841a636..f1dff6a8d 100644 --- a/src/symbol.c +++ b/src/symbol.c @@ -72,25 +72,30 @@ mrb_intern_str(mrb_state *mrb, mrb_value str) return mrb_intern2(mrb, RSTRING_PTR(str), RSTRING_LEN(str)); } -mrb_bool +mrb_value mrb_cstr_interned(mrb_state *mrb, const char *name) { return mrb_interned(mrb, name, strlen(name)); } -mrb_bool +mrb_value mrb_interned(mrb_state *mrb, const char *name, size_t len) { khash_t(n2s) *h = mrb->name2sym; symbol_name sname; + khiter_t k; sname.len = len; sname.name = name; - return (kh_get(n2s, h, sname) != kh_end(h)) ? TRUE : FALSE; + k = kh_get(n2s, h, sname); + if (k != kh_end(h)) { + return mrb_symbol_value(kh_value(h, k)); + } + return mrb_nil_value(); } -mrb_bool +mrb_value mrb_str_interned(mrb_state *mrb, mrb_value str) { return mrb_interned(mrb, RSTRING_PTR(str), RSTRING_LEN(str)); |
