summaryrefslogtreecommitdiffhomepage
path: root/src
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 /src
parent4faaef437d614ad270f646ccbd5a80fd80d4359e (diff)
downloadmruby-8682b06953e580d301bfc7b3b28fd03054e0875d.tar.gz
mruby-8682b06953e580d301bfc7b3b28fd03054e0875d.zip
add new functions to check if symbols are interned without registration.
Diffstat (limited to 'src')
-rw-r--r--src/symbol.c24
1 files changed, 24 insertions, 0 deletions
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)