{
unsigned result = hash_ptr(type->result_type);
- method_parameter_type_t *parameter = type->parameter_types;
+ declaration_t *parameter = type->parameters;
while(parameter != NULL) {
- result ^= hash_ptr(parameter->type);
+ result ^= hash_ptr(parameter);
parameter = parameter->next;
}
- result ^= hash_ptr(type->abi_style);
return result;
}
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(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;
+ declaration_t *param1 = type1->parameters;
+ declaration_t *param2 = type2->parameters;
while(param1 != NULL && param2 != NULL) {
if(param1->type != param2->type)
return 0;
static
int enum_types_equal(const enum_type_t *type1, const enum_type_t *type2)
{
- /* TODO */
- return type1->symbol == type2->symbol;
+ if(type1->symbol != NULL && type1->symbol == type2->symbol)
+ return 1;
+
+ enum_entry_t *entry1 = type1->entries;
+ enum_entry_t *entry2 = type2->entries;
+ while(entry1 != NULL && entry2 != NULL) {
+ if(entry1->symbol != entry2->symbol)
+ return 0;
+ /* TODO: compare expressions */
+ entry1 = entry1->next;
+ entry2 = entry2->next;
+ }
+ if(entry1 != NULL || entry2 != NULL)
+ return 0;
+
+ return 1;
}
static