summaryrefslogtreecommitdiffhomepage
path: root/src/symbol.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-04-26 09:18:39 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2013-04-26 09:18:39 +0900
commitc99b72b20d3c3814248c9654c934a06e5dff96e5 (patch)
tree2b166e19616f3f114b4ad2f2838b028bd38b1e32 /src/symbol.c
parentfa0e41a84d472de9e37ae8ad609e94a1ab905c53 (diff)
parent09dad05a72661727fcef688d110220fc443e80f2 (diff)
downloadmruby-c99b72b20d3c3814248c9654c934a06e5dff96e5.tar.gz
mruby-c99b72b20d3c3814248c9654c934a06e5dff96e5.zip
Merge branch 'suppress_intern' of https://github.com/crimsonwoods/mruby into crimsonwoods-suppress_intern
Diffstat (limited to 'src/symbol.c')
-rw-r--r--src/symbol.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/symbol.c b/src/symbol.c
index bd6cc9683..1633a3c65 100644
--- a/src/symbol.c
+++ b/src/symbol.c
@@ -72,6 +72,35 @@ mrb_intern_str(mrb_state *mrb, mrb_value str)
return mrb_intern2(mrb, RSTRING_PTR(str), RSTRING_LEN(str));
}
+mrb_value
+mrb_cstr_interned(mrb_state *mrb, const char *name)
+{
+ return mrb_interned(mrb, name, strlen(name));
+}
+
+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;
+
+ k = kh_get(n2s, h, sname);
+ if (k != kh_end(h)) {
+ return mrb_symbol_value(kh_value(h, k));
+ }
+ return mrb_nil_value();
+}
+
+mrb_value
+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)