summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorcrimsonwoods <[email protected]>2013-04-25 09:27:00 +0900
committercrimsonwoods <[email protected]>2013-04-25 09:27:00 +0900
commit8682b06953e580d301bfc7b3b28fd03054e0875d (patch)
treefd67a06d8cde16cec6f137ab10fb34251c58d155
parent4faaef437d614ad270f646ccbd5a80fd80d4359e (diff)
downloadmruby-8682b06953e580d301bfc7b3b28fd03054e0875d.tar.gz
mruby-8682b06953e580d301bfc7b3b28fd03054e0875d.zip
add new functions to check if symbols are interned without registration.
-rw-r--r--include/mruby.h3
-rw-r--r--src/symbol.c24
2 files changed, 27 insertions, 0 deletions
diff --git a/include/mruby.h b/include/mruby.h
index 88faee37e..e249a0455 100644
--- a/include/mruby.h
+++ b/include/mruby.h
@@ -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);
diff --git a/src/symbol.c b/src/symbol.c
index 55bb4885a..3d841a636 100644
--- a/src/symbol.c
+++ b/src/symbol.c
@@ -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)