improvements for handling of function parameters
[cparser] / type_hash.c
index 4219f17..3f84c5d 100644 (file)
@@ -52,12 +52,11 @@ unsigned hash_method_type(const method_type_t *type)
 {
        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;
 }
@@ -118,6 +117,8 @@ static
 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;
 
@@ -144,11 +145,8 @@ int method_types_equal(const method_type_t *type1, const method_type_t *type2)
        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;
@@ -171,8 +169,22 @@ int pointer_types_equal(const pointer_type_t *type1,
 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