diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-04-26 09:18:39 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-04-26 09:18:39 +0900 |
| commit | c99b72b20d3c3814248c9654c934a06e5dff96e5 (patch) | |
| tree | 2b166e19616f3f114b4ad2f2838b028bd38b1e32 /src/symbol.c | |
| parent | fa0e41a84d472de9e37ae8ad609e94a1ab905c53 (diff) | |
| parent | 09dad05a72661727fcef688d110220fc443e80f2 (diff) | |
| download | mruby-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.c | 29 |
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) |
