summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-06-05 08:51:43 +0900
committerYukihiro Matsumoto <[email protected]>2012-06-05 08:51:43 +0900
commit0b4f33213729a87e146d990604330c70896dac07 (patch)
treeab1a1d05bac250042f3dfe040ee21d89c162ac21 /src
parentb2e6a0fc04f6237f5118bf6c2f404a0d8fa4d2c4 (diff)
parentf06eceaa1965794fd2ba9910c83b4e0459550a21 (diff)
downloadmruby-0b4f33213729a87e146d990604330c70896dac07.tar.gz
mruby-0b4f33213729a87e146d990604330c70896dac07.zip
merge conflict resolution
Diffstat (limited to 'src')
-rw-r--r--src/dump.c6
-rw-r--r--src/load.c2
-rw-r--r--src/symbol.c17
3 files changed, 14 insertions, 11 deletions
diff --git a/src/dump.c b/src/dump.c
index f3cbef3a0..7b2199a02 100644
--- a/src/dump.c
+++ b/src/dump.c
@@ -268,8 +268,10 @@ 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) {
- name = mrb_sym2name(mrb, irep->syms[sym_no]);
- nlen = str_dump_len((char*)name, strlen(name), type);
+ int len;
+
+ name = mrb_sym2name_len(mrb, irep->syms[sym_no], &len);
+ nlen = str_dump_len((char*)name, len, type);
size += nlen; /* sn(n) */
}
}
diff --git a/src/load.c b/src/load.c
index c0684f1aa..1b607909c 100644
--- a/src/load.c
+++ b/src/load.c
@@ -477,7 +477,7 @@ read_rite_irep_record(mrb_state *mrb, unsigned char *src, mrb_irep *irep, uint32
memcpy(buf, src, snl); //symbol name
src += snl;
buf[snl] = '\0';
- irep->syms[i] = mrb_intern(mrb, buf);
+ irep->syms[i] = mrb_intern2(mrb, buf, snl);
}
}
crc = calc_crc_16_ccitt((unsigned char*)pStart, src - pStart); //Calculate CRC
diff --git a/src/symbol.c b/src/symbol.c
index fffe2fae9..6754325a5 100644
--- a/src/symbol.c
+++ b/src/symbol.c
@@ -34,7 +34,7 @@ sym_hash_func(mrb_state *mrb, const symbol_name s)
}
return h;
}
-#define sym_hash_equal(mrb,a, b) (a.len == b.len && strcmp(a.name, b.name) == 0)
+#define sym_hash_equal(mrb,a, b) (a.len == b.len && memcmp(a.name, b.name, a.len) == 0)
KHASH_INIT(n2s, symbol_name, mrb_sym, 1, sym_hash_func, sym_hash_equal)
/* ------------------------------------------------------ */
@@ -76,8 +76,8 @@ mrb_intern_str(mrb_state *mrb, mrb_value str)
return mrb_intern2(mrb, RSTRING_PTR(str), RSTRING_LEN(str));
}
-static const char*
-sym2name_len(mrb_state *mrb, mrb_sym sym, int *lenp)
+const char*
+mrb_sym2name_len(mrb_state *mrb, mrb_sym sym, int *lenp)
{
khash_t(n2s) *h = mrb->name2sym;
khiter_t k;
@@ -185,7 +185,7 @@ mrb_sym_to_s(mrb_state *mrb, mrb_value sym)
const char *p;
int len;
- p = sym2name_len(mrb, id, &len);
+ p = mrb_sym2name_len(mrb, id, &len);
return mrb_str_new(mrb, p, len);
}
@@ -290,7 +290,9 @@ symname_p(const char *name)
case '*':
if (*++m == '*') ++m;
break;
-
+ case '!':
+ if (*++m == '=') ++m;
+ break;
case '+': case '-':
if (*++m == '@') ++m;
break;
@@ -327,7 +329,7 @@ sym_inspect(mrb_state *mrb, mrb_value sym)
int len;
mrb_sym id = SYM2ID(sym);
- name = sym2name_len(mrb, id, &len);
+ name = mrb_sym2name_len(mrb, id, &len);
str = mrb_str_new(mrb, 0, len+1);
RSTRING(str)->buf[0] = ':';
memcpy(RSTRING(str)->buf+1, name, len);
@@ -342,7 +344,7 @@ const char*
mrb_sym2name(mrb_state *mrb, mrb_sym sym)
{
int len;
- const char *name = sym2name_len(mrb, sym, &len);
+ const char *name = mrb_sym2name_len(mrb, sym, &len);
if (!name) return NULL;
if (symname_p(name) && strlen(name) == len) {
@@ -354,7 +356,6 @@ mrb_sym2name(mrb_state *mrb, mrb_sym sym)
}
}
-
void
mrb_init_symbols(mrb_state *mrb)
{