improvements for handling of function parameters
[cparser] / type_hash.c
index f4431d7..3f84c5d 100644 (file)
@@ -52,9 +52,9 @@ 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;
        }
 
@@ -145,8 +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;
 
-       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;
@@ -169,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