projects
/
libfirm
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
3fb8e42
)
irio: Fixed symbols with same string but different type tag
author
Moritz Kroll
<Moritz.Kroll@gmx.de>
Fri, 20 Feb 2009 20:30:20 +0000
(20:30 +0000)
committer
Moritz Kroll
<Moritz.Kroll@gmx.de>
Fri, 20 Feb 2009 20:30:20 +0000
(20:30 +0000)
[r25537]
ir/ir/irio.c
patch
|
blob
|
history
diff --git
a/ir/ir/irio.c
b/ir/ir/irio.c
index
69591b6
..
8fa0719
100644
(file)
--- a/
ir/ir/irio.c
+++ b/
ir/ir/irio.c
@@
-104,9
+104,12
@@
static unsigned string_hash(const char *str, int len)
*/
static int symbol_cmp(const void *elt, const void *key, size_t size)
{
*/
static int symbol_cmp(const void *elt, const void *key, size_t size)
{
+ int res;
const symbol_t *entry = (const symbol_t *) elt;
const symbol_t *keyentry = (const symbol_t *) key;
(void) size;
const symbol_t *entry = (const symbol_t *) elt;
const symbol_t *keyentry = (const symbol_t *) key;
(void) size;
+ res = entry->typetag - keyentry->typetag;
+ if(res) return res;
return strcmp(entry->str, keyentry->str);
}
return strcmp(entry->str, keyentry->str);
}
@@
-133,7
+136,7
@@
static void symtbl_init(void)
key.str = (s); \
key.typetag = (tt); \
key.code = (cod); \
key.str = (s); \
key.typetag = (tt); \
key.code = (cod); \
- set_insert(symtbl, &key, sizeof(key), string_hash(s, sizeof(s)-1))
+ set_insert(symtbl, &key, sizeof(key), string_hash(s, sizeof(s)-1)
+ tt * 17
)
#define INSERTENUM(tt, e) INSERT(#e, tt, e)
#define INSERTENUM(tt, e) INSERT(#e, tt, e)
@@
-209,12
+212,10
@@
static unsigned symbol(const char *str, typetag_t typetag)
symbol_t key, *entry;
key.str = str;
symbol_t key, *entry;
key.str = str;
+ key.typetag = typetag;
- entry = set_find(symtbl, &key, sizeof(key), string_hash(str, strlen(str)));
- if (entry && entry->typetag == typetag) {
- return entry->code;
- }
- return SYMERROR;
+ entry = set_find(symtbl, &key, sizeof(key), string_hash(str, strlen(str)) + typetag * 17);
+ return entry ? entry->code : SYMERROR;
}
static void *get_id(io_env_t *env, long id)
}
static void *get_id(io_env_t *env, long id)