- type_array *type = (type_array *)tore;
- xfprintf (F, "\"array %I\"}\n", get_array_ident(type));
- xfprintf (F, "edge: { sourcename: \"%p\" targetname: \"%p\" "
- TYPE_EDGE_ATTR "}\n", tore, get_array_element_type(type), i);
- }
- break;
- case k_type_enumeration:
- {
- type_enumeration *type = (type_enumeration *)tore;
- xfprintf (F, "\"enum %I\"}\n", get_enumeration_ident(type));
- }
- break;
- case k_type_pointer:
- {
- type_pointer *type = (type_pointer *)tore;
- xfprintf (F, "\"ptr %I\"}\n", get_pointer_ident(type));
- xfprintf (F, "edge: { sourcename: \"%p\" targetname: \"%p\" "
- TYPE_EDGE_ATTR "}\n", tore,
- get_pointer_points_to_type(type), i);
- }
- break;
- case k_type_primitive:
- {
- type_primitive *type = (type_primitive *)tore;
- xfprintf (F, "\"prim %I, mode %I\"}\n", get_primitive_ident(type),
- get_mode_ident(get_primitive_mode(type)));
+ /* why can't I cast here??? @@@ */
+ type *type = tore;
+ xfprintf (F, "\"%I %I", get_type_tpop_nameid(type), get_type_ident(type));
+
+ switch (get_type_tpop_code(type)) {
+ case tpo_class:
+ {
+ xfprintf (F, "\" " TYPE_CLASS_NODE_ATTR "}\n");
+ for (i=0; i < get_class_n_supertype(type); i++)
+ xfprintf (F, "edge: { sourcename: \"%p\" targetname: \"%p\" "
+ TYPE_SUPER_EDGE_ATTR "}\n",
+ type, get_class_supertype(type, i));
+ for (i=0; i < get_class_n_member(type); i++)
+ xfprintf (F, "edge: { sourcename: \"%p\" targetname: \"%p\" "
+ TYPE_MEMBER_EDGE_ATTR "}\n",
+ type, get_class_member(type, i));
+ } break;
+ case tpo_struct:
+ {
+ xfprintf (F, "\"}\n");
+ for (i=0; i < get_struct_n_member(type); i++)
+ xfprintf (F, "edge: { sourcename: \"%p\" targetname: \"%p\" "
+ TYPE_MEMBER_EDGE_ATTR "}\n",
+ type, get_struct_member(type, i));
+ } break;
+ case tpo_method:
+ {
+ xfprintf (F, "\" " TYPE_METH_NODE_ATTR "}\n");
+ for (i = 0; i < get_method_n_params(type); i++)
+ xfprintf (F, "edge: { sourcename: \"%p\" targetname: \"%p\" "
+ METH_PAR_EDGE_ATTR "}\n",
+ type, get_method_param_type(type, i), i);
+ for (i = 0; i < get_method_n_res(type); i++)
+ xfprintf (F, "edge: { sourcename: \"%p\" targetname: \"%p\" "
+ METH_RES_EDGE_ATTR "}\n",
+ type, get_method_res_type(type, i), i);
+ } break;
+ case tpo_union:
+ {
+ xfprintf (F, "\"}\n");
+ for (i = 0; i < get_union_n_members(type); i++)
+ xfprintf (F, "edge: { sourcename: \"%p\" targetname: \"%p\" "
+ "label: \"\"f" UNION_EDGE_ATTR "}\n",
+ type, get_union_member(type, i));
+ } break;
+ case tpo_array:
+ {
+ xfprintf (F, "\"}\n");
+ xfprintf (F, "edge: { sourcename: \"%p\" targetname: \"%p\" "
+ ARR_ELT_TYPE_EDGE_ATTR "}\n", type, get_array_element_type(type), i);
+ } break;
+ case tpo_enumeration:
+ {
+ xfprintf (F, "\"}\n");
+ } break;
+ case tpo_pointer:
+ {
+ xfprintf (F, "\"}\n");
+ xfprintf (F, "edge: { sourcename: \"%p\" targetname: \"%p\" "
+ PTR_PTS_TO_EDGE_ATTR "}\n", type,
+ get_pointer_points_to_type(type), i);
+ } break;
+ case tpo_primitive:
+ {
+ xfprintf (F, "mode %I\"}\n", get_mode_ident(get_type_mode(type)));
+ } break;
+ default: break;
+ } /* switch type */