diff options
| author | Yukihiro Matz Matsumoto <[email protected]> | 2013-03-14 19:09:55 +0900 |
|---|---|---|
| committer | Yukihiro Matz Matsumoto <[email protected]> | 2013-03-14 19:09:55 +0900 |
| commit | 93e9174c57709e6867459c55fb88149234483c1d (patch) | |
| tree | 047d8012baa268086ce1bc99fbb9308ed8754980 /src/symbol.c | |
| parent | b75805b15ec46cbcd7561ffd571e2c892de96f25 (diff) | |
| download | mruby-93e9174c57709e6867459c55fb88149234483c1d.tar.gz mruby-93e9174c57709e6867459c55fb88149234483c1d.zip | |
symbol length make size_t from mrb_int; cancel #993 monaka/pr-cleanup-symbol.c-20130312
Diffstat (limited to 'src/symbol.c')
| -rw-r--r-- | src/symbol.c | 47 |
1 files changed, 16 insertions, 31 deletions
diff --git a/src/symbol.c b/src/symbol.c index a98d59f42..3993cd37e 100644 --- a/src/symbol.c +++ b/src/symbol.c @@ -10,10 +10,11 @@ #include "mruby/string.h" #include <ctype.h> +#include <limits.h> /* ------------------------------------------------------ */ typedef struct symbol_name { - mrb_int len; + size_t len; const char *name; } symbol_name; @@ -21,7 +22,7 @@ static inline khint_t sym_hash_func(mrb_state *mrb, const symbol_name s) { khint_t h = 0; - mrb_int i; + size_t i; const char *p = s.name; for (i=0; i<s.len; i++) { @@ -35,7 +36,7 @@ KHASH_DECLARE(n2s, symbol_name, mrb_sym, 1) KHASH_DEFINE (n2s, symbol_name, mrb_sym, 1, sym_hash_func, sym_hash_equal) /* ------------------------------------------------------ */ mrb_sym -mrb_intern2(mrb_state *mrb, const char *name, mrb_int len) +mrb_intern2(mrb_state *mrb, const char *name, size_t len) { khash_t(n2s) *h = mrb->name2sym; symbol_name sname; @@ -43,11 +44,7 @@ mrb_intern2(mrb_state *mrb, const char *name, mrb_int len) mrb_sym sym; char *p; - if (len > MRB_INT_MAX - 1) { - /* In case inspect method called, the result is ":" + symname. */ - len = MRB_INT_MAX - 1; - } - + if (len < 0) len = 0; sname.len = len; sname.name = name; k = kh_get(n2s, h, sname); @@ -55,8 +52,8 @@ mrb_intern2(mrb_state *mrb, const char *name, mrb_int len) return kh_value(h, k); sym = ++mrb->symidx; - p = (char *)mrb_malloc(mrb, (size_t)len+1); - memcpy(p, name, (size_t)len); + p = (char *)mrb_malloc(mrb, len+1); + memcpy(p, name, len); p[len] = 0; sname.name = (const char*)p; k = kh_put(n2s, h, sname); @@ -68,14 +65,7 @@ mrb_intern2(mrb_state *mrb, const char *name, mrb_int len) mrb_sym mrb_intern(mrb_state *mrb, const char *name) { - size_t len; - - len = strlen(name); - if (len > MRB_INT_MAX) { - len = MRB_INT_MAX; - } - - return mrb_intern2(mrb, name, (mrb_int)len); + return mrb_intern2(mrb, name, strlen(name)); } mrb_sym @@ -84,8 +74,9 @@ mrb_intern_str(mrb_state *mrb, mrb_value str) return mrb_intern2(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, mrb_int *lenp) +mrb_sym2name_len(mrb_state *mrb, mrb_sym sym, size_t *lenp) { khash_t(n2s) *h = mrb->name2sym; khiter_t k; @@ -95,16 +86,12 @@ mrb_sym2name_len(mrb_state *mrb, mrb_sym sym, mrb_int *lenp) if (kh_exist(h, k)) { if (kh_value(h, k) == sym) { sname = kh_key(h, k); - if (lenp) { - *lenp = sname.len; - } + *lenp = sname.len; return sname.name; } } } - if (lenp) { - *lenp = 0; - } + *lenp = 0; return NULL; /* missing */ } @@ -194,7 +181,7 @@ mrb_sym_to_s(mrb_state *mrb, mrb_value sym) { mrb_sym id = mrb_symbol(sym); const char *p; - mrb_int len; + size_t len; p = mrb_sym2name_len(mrb, id, &len); return mrb_str_new(mrb, p, len); @@ -345,7 +332,7 @@ sym_inspect(mrb_state *mrb, mrb_value sym) { mrb_value str; const char *name; - mrb_int len; + size_t len; mrb_sym id = mrb_symbol(sym); name = mrb_sym2name_len(mrb, id, &len); @@ -362,7 +349,7 @@ sym_inspect(mrb_state *mrb, mrb_value sym) const char* mrb_sym2name(mrb_state *mrb, mrb_sym sym) { - mrb_int len; + size_t len; const char *name = mrb_sym2name_len(mrb, sym, &len); if (!name) return NULL; @@ -391,9 +378,7 @@ sym_cmp(mrb_state *mrb, mrb_value s1) else { const char *p1, *p2; int retval; - mrb_int len; - mrb_int len1; - mrb_int len2; + size_t len, len1, len2; p1 = mrb_sym2name_len(mrb, sym1, &len1); p2 = mrb_sym2name_len(mrb, sym2, &len2); |
