static
unsigned hash_ptr(const void *ptr)
{
- unsigned ptr_int = (ptr - NULL);
+ unsigned ptr_int = ((char*) ptr - (char*) NULL);
return ptr_int >> 3;
}
result ^= hash_ptr(parameter->type);
parameter = parameter->next;
}
- result ^= hash_ptr(type->abi_style);
return result;
}
case TYPE_POINTER:
hash = hash_pointer_type((const pointer_type_t*) type);
break;
+ case TYPE_BUILTIN:
+ hash = hash_ptr(((const builtin_type_t*) type)->symbol);
+ break;
}
unsigned some_prime = 99991;
int compound_types_equal(const compound_type_t *type1,
const compound_type_t *type2)
{
+ if(type1->type.type != type2->type.type)
+ return 0;
if(type1->symbol != type2->symbol)
return 0;
-#if 0
- struct_entry_t *entry1 = type1->entries;
- struct_entry_t *entry2 = type2->entries;
+ declaration_t *entry1 = type1->context.declarations;
+ declaration_t *entry2 = type2->context.declarations;
while(entry1 != NULL && entry2 != NULL) {
if(entry1->type != entry2->type)
return 0;
+ if(entry1->symbol != entry2->symbol)
+ return 0;
entry1 = entry1->next;
entry2 = entry2->next;
}
if(entry1 != NULL || entry2 != NULL)
return 0;
-#endif
return 1;
}
if(type1->result_type != type2->result_type)
return 0;
- if(type1->abi_style != type2->abi_style)
- return 0;
-
method_parameter_type_t *param1 = type1->parameter_types;
method_parameter_type_t *param2 = type2->parameter_types;
while(param1 != NULL && param2 != NULL) {
return type1->symbol == type2->symbol;
}
+static
+int builtin_types_equal(const builtin_type_t *type1,
+ const builtin_type_t *type2)
+{
+ return type1->symbol == type2->symbol;
+}
+
static
int types_equal(const type_t *type1, const type_t *type2)
{
case TYPE_POINTER:
return pointer_types_equal((const pointer_type_t*) type1,
(const pointer_type_t*) type2);
+ case TYPE_BUILTIN:
+ return builtin_types_equal((const builtin_type_t*) type1,
+ (const builtin_type_t*) type2);
}
abort();