add new functions to check if symbols are interned without registration.

This commit is contained in:
crimsonwoods
2013-04-25 09:27:00 +09:00
parent 4faaef437d
commit 8682b06953
2 changed files with 27 additions and 0 deletions
+3
View File
@@ -195,6 +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);
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);
+24
View File
@@ -72,6 +72,30 @@ mrb_intern_str(mrb_state *mrb, mrb_value str)
return mrb_intern2(mrb, RSTRING_PTR(str), RSTRING_LEN(str));
}
mrb_bool
mrb_cstr_interned(mrb_state *mrb, const char *name)
{
return mrb_interned(mrb, name, strlen(name));
}
mrb_bool
mrb_interned(mrb_state *mrb, const char *name, size_t len)
{
khash_t(n2s) *h = mrb->name2sym;
symbol_name sname;
sname.len = len;
sname.name = name;
return (kh_get(n2s, h, sname) != kh_end(h)) ? TRUE : FALSE;
}
mrb_bool
mrb_str_interned(mrb_state *mrb, mrb_value str)
{
return mrb_interned(mrb, RSTRING_PTR(str), RSTRING_LEN(str));
}
/* lenp must be a pointer to a size_t variable */
const char*
mrb_sym2name_len(mrb_state *mrb, mrb_sym sym, size_t *lenp)