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 | |
| 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')
| -rw-r--r-- | src/class.c | 6 | ||||
| -rw-r--r-- | src/codegen.c | 6 | ||||
| -rw-r--r-- | src/dump.c | 5 | ||||
| -rw-r--r-- | src/kernel.c | 2 | ||||
| -rw-r--r-- | src/symbol.c | 47 | ||||
| -rw-r--r-- | src/variable.c | 6 |
6 files changed, 29 insertions, 43 deletions
diff --git a/src/class.c b/src/class.c index a00000375..7935b7b3e 100644 --- a/src/class.c +++ b/src/class.c @@ -1184,7 +1184,7 @@ mrb_class_path(mrb_state *mrb, struct RClass *c) { mrb_value path; const char *name; - int len; + size_t len; path = mrb_obj_iv_get(mrb, (struct RObject*)c, mrb_intern(mrb, "__classpath__")); if (mrb_nil_p(path)) { @@ -1461,7 +1461,7 @@ static void check_cv_name(mrb_state *mrb, mrb_sym id) { const char *s; - int len; + size_t len; s = mrb_sym2name_len(mrb, id, &len); if (len < 3 || !(s[0] == '@' && s[1] == '@')) { @@ -1683,7 +1683,7 @@ static void check_const_name(mrb_state *mrb, mrb_sym id) { const char *s; - int len; + size_t len; s = mrb_sym2name_len(mrb, id, &len); if (len < 1 || !ISUPPER(*s)) { diff --git a/src/codegen.c b/src/codegen.c index ed44f1792..7381f6e91 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -690,7 +690,7 @@ static mrb_sym attrsym(codegen_scope *s, mrb_sym a) { const char *name; - int len; + size_t len; char *name2; name = mrb_sym2name_len(s->mrb, a, &len); @@ -789,7 +789,7 @@ gen_call(codegen_scope *s, node *tree, mrb_sym name, int sp, int val) } pop_n(n+1); { - int len; + size_t len; const char *name = mrb_sym2name_len(s->mrb, sym, &len); if (!noop && len == 1 && name[0] == '+') { @@ -1491,7 +1491,7 @@ codegen(codegen_scope *s, node *tree, int val) case NODE_OP_ASGN: { mrb_sym sym = sym(tree->cdr->car); - int len; + size_t len; const char *name = mrb_sym2name_len(s->mrb, sym, &len); int idx; diff --git a/src/dump.c b/src/dump.c index ba5a69a56..9666f7562 100644 --- a/src/dump.c +++ b/src/dump.c @@ -279,7 +279,7 @@ get_syms_block_size(mrb_state *mrb, mrb_irep *irep, int type) size += DUMP_SIZE(MRB_DUMP_SIZE_OF_SHORT, type); /* snl(n) */ if (irep->syms[sym_no] != 0) { - int len; + size_t len; name = mrb_sym2name_len(mrb, irep->syms[sym_no], &len); nlen = str_dump_len((char*)name, len, type); @@ -421,9 +421,10 @@ write_syms_block(mrb_state *mrb, mrb_irep *irep, char *buf, int type) uint16_t nlen =0; if (irep->syms[sym_no] != 0) { - int len; + size_t len; name = mrb_sym2name_len(mrb, irep->syms[sym_no], &len); + if (len > UINT16_MAX) goto error_exit; nlen = str_dump_len((char*)name, len, type); if ( nlen > buf_size - 1) { buf_size = nlen + 1; diff --git a/src/kernel.c b/src/kernel.c index 7187a125d..e0a1a0a52 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -555,7 +555,7 @@ static void check_iv_name(mrb_state *mrb, mrb_sym id) { const char *s; - int len; + size_t len; s = mrb_sym2name_len(mrb, id, &len); if (len < 2 || !(s[0] == '@' && s[1] != '@')) { 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); diff --git a/src/variable.c b/src/variable.c index 4202981a4..850999042 100644 --- a/src/variable.c +++ b/src/variable.c @@ -520,7 +520,7 @@ inspect_i(mrb_state *mrb, mrb_sym sym, mrb_value v, void *p) { mrb_value str = *(mrb_value*)p; const char *s; - int len; + size_t len; /* need not to show internal data */ if (RSTRING_PTR(str)[0] == '-') { /* first element */ @@ -587,7 +587,7 @@ iv_i(mrb_state *mrb, mrb_sym sym, mrb_value v, void *p) { mrb_value ary; const char* s; - int len; + size_t len; ary = *(mrb_value*)p; s = mrb_sym2name_len(mrb, sym, &len); @@ -631,7 +631,7 @@ cv_i(mrb_state *mrb, mrb_sym sym, mrb_value v, void *p) { mrb_value ary; const char* s; - int len; + size_t len; ary = *(mrb_value*)p; s = mrb_sym2name_len(mrb, sym, &len); |
