+void free_type(type *tp) {
+ if ((get_type_tpop(tp) == tpop_none) || (get_type_tpop(tp) == tpop_unknown))
+ return;
+ /* Remove from list of all types */
+ remove_irp_type(tp);
+ /* Free the attributes of the type. */
+ free_type_attrs(tp);
+ /* Free entities automatically allocated with the type */
+ if (is_array_type(tp))
+ free_entity(get_array_element_entity(tp));
+ /* And now the type itself... */
+ tp->kind = k_BAD;
+ free(tp);
+}
+
+void free_type_entities(type *tp) {
+ switch(get_type_tpop_code(tp)) {
+ case tpo_class: { free_class_entities(tp); } break;
+ case tpo_struct: { free_struct_entities(tp); } break;
+ case tpo_method: { free_method_entities(tp); } break;
+ case tpo_union: { free_union_entities(tp); } break;
+ case tpo_array: { free_array_entities(tp); } break;
+ case tpo_enumeration: { free_enumeration_entities(tp); } break;
+ case tpo_pointer: { free_pointer_entities(tp); } break;
+ case tpo_primitive: { free_primitive_entities(tp); } break;
+ default: break;
+ }
+}
+