#define PTR_PTS_TO_EDGE_ATTR "class: 9 label: \"points to\" color:green"
#define ARR_ELT_TYPE_EDGE_ATTR "class: 10 label: \"arr elt\" color:green"
#define ENT_OVERWRITES_EDGE_ATTR "class: 11 label: \"overwrites\" color:red"
+#define TYPE_MEMBER_EDGE_ATTR "class: 12 label: \"member\" color:blue"
#define PRINT_NODEID(X) fprintf(F, "%p", X)
xfprintf (F, "%I", get_SymConst_ptrinfo(n));
} else {
assert(get_kind(get_SymConst_type(n)) == k_type);
- assert(get_type_nameid(get_SymConst_type(n)));
- xfprintf (F, "%s ", id_to_str(get_type_nameid(get_SymConst_type(n))));
+ assert(get_type_ident(get_SymConst_type(n)));
+ xfprintf (F, "%s ", id_to_str(get_type_ident(get_SymConst_type(n))));
if (get_SymConst_kind == type_tag)
xfprintf (F, "tag");
else
break;
case iro_SymConst:
assert(get_kind(get_SymConst_type(n)) == k_type);
- assert(get_type_nameid(get_SymConst_type(n)));
+ assert(get_type_ident(get_SymConst_type(n)));
xfprintf (F, "\"%s ", get_type_name(get_SymConst_type(n)));
switch (n->attr.i.num){
case type_tag:
case k_entity:
{
entity *ent = (entity *)tore;
- xfprintf (F, "\"ent %I\" " ENTITY_NODE_ATTR "}\n", get_entity_ident(ent));
+ xfprintf (F, "\"ent %I\" " ENTITY_NODE_ATTR , get_entity_ident(ent));
+ if(dynamic_allocated == get_entity_allocation(ent))
+ xfprintf (F, " info1:\"dynamic allocated\"}\n");
+ else
+ xfprintf (F, " info1:\"static allocated\"}\n");
xfprintf (F, "edge: { sourcename: \"%p\" targetname: \"%p\" "
ENT_OWN_EDGE_ATTR "}\n", tore, get_entity_owner(ent));
xfprintf (F, "edge: { sourcename: \"%p\" targetname: \"%p\" "
{
/* why can't I cast here??? @@@ */
type *type = tore;
- xfprintf (F, "\"%I %I", get_type_tpop_nameid(type), get_type_nameid(type));
+ xfprintf (F, "\"%I %I", get_type_tpop_nameid(type), get_type_ident(type));
switch (get_type_tpop_code(type)) {
case tpo_class:
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:
{
} break;
default: break;
} /* switch type */
-
- } break; /* case k_type */
+ }
+ break; /* case k_type */
default:
{
xfprintf (F, "\" faulty type \"}\n");
"classname 8: \"Union\""
"classname 9: \"Points-to\""
"classname 10: \"Array Element Type\""
+ "classname 11: \"Overwrites\""
+ "classname 12: \"Member\""
, cp, label);
xfprintf (F, "\n"); /* a separator */
"orientation: bottom_to_top\n"
"classname 1: \"Data\"\n"
"classname 2: \"Block\"\n"
- "classname 3: \"Entity type\""
- "classname 4: \"Entity owner\""
- "classname 5: \"Method Param\""
- "classname 6: \"Method Res\""
- "classname 7: \"Super\""
- "classname 8: \"Union\""
- "classname 9: \"Points-to\""
- "classname 10: \"Array Element Type\""
+ "classname 3: \"Entity type\"\n"
+ "classname 4: \"Entity owner\"\n"
+ "classname 5: \"Method Param\"\n"
+ "classname 6: \"Method Res\"\n"
+ "classname 7: \"Super\"\n"
+ "classname 8: \"Union\"\n"
+ "classname 9: \"Points-to\"\n"
+ "classname 10: \"Array Element Type\"\n"
+ "classname 11: \"Overwrites\"\n"
+ "classname 12: \"Member\"\n"
, name, label);
xfprintf (F, "\n"); /* a separator */