From: Götz Lindenmaier Date: Sun, 22 May 2005 15:16:58 +0000 (+0000) Subject: bugfix and output in transitive inheritance closure X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=df7e967650344315dd6bdace1fe36d13e6514134;p=libfirm bugfix and output in transitive inheritance closure [r5867] --- diff --git a/ir/ir/irdumptxt.c b/ir/ir/irdumptxt.c index 56a43a3a8..578baa742 100644 --- a/ir/ir/irdumptxt.c +++ b/ir/ir/irdumptxt.c @@ -473,24 +473,42 @@ void dump_entity_to_file_prefix (FILE *F, entity *ent, char *prefix, unsigned if (is_Class_type(get_entity_owner(ent))) { if (get_entity_n_overwrites(ent) > 0) { - fprintf(F, "%s overwrites:\n", prefix); - for (i = 0; i < get_entity_n_overwrites(ent); ++i) { - entity *ov = get_entity_overwrites(ent, i); - fprintf(F, "%s %d: %s of class %s\n", prefix, i, get_entity_name(ov), - get_type_name(get_entity_owner(ov))); - } + fprintf(F, "%s overwrites:\n", prefix); + for (i = 0; i < get_entity_n_overwrites(ent); ++i) { + entity *ov = get_entity_overwrites(ent, i); + fprintf(F, "%s %d: %s of class %s\n", prefix, i, get_entity_name(ov), + get_type_name(get_entity_owner(ov))); + } } else { - fprintf(F, "%s Does not overwrite other entities. \n", prefix); + fprintf(F, "%s Does not overwrite other entities. \n", prefix); } if (get_entity_n_overwrittenby(ent) > 0) { - fprintf(F, "%s overwritten by:\n", prefix); - for (i = 0; i < get_entity_n_overwrittenby(ent); ++i) { - entity *ov = get_entity_overwrittenby(ent, i); - fprintf(F, "%s %d: %s of class %s\n", prefix, i, get_entity_name(ov), - get_type_name(get_entity_owner(ov))); + fprintf(F, "%s overwritten by:\n", prefix); + for (i = 0; i < get_entity_n_overwrittenby(ent); ++i) { + entity *ov = get_entity_overwrittenby(ent, i); + fprintf(F, "%s %d: %s of class %s\n", prefix, i, get_entity_name(ov), + get_type_name(get_entity_owner(ov))); } } else { - fprintf(F, "%s Is not overwritten by other entities. \n", prefix); + fprintf(F, "%s Is not overwritten by other entities. \n", prefix); + } + + if (get_irp_inh_transitive_closure_state() != inh_transitive_closure_none) { + entity *ov; + fprintf(F, "%s transitive overwrites:\n", prefix); + for (ov = get_entity_trans_overwrites_first(ent); + ov; + ov = get_entity_trans_overwrites_next(ent)) { + fprintf(F, "%s : %s of class %s\n", prefix, get_entity_name(ov), + get_type_name(get_entity_owner(ov))); + } + fprintf(F, "%s transitive overwritten by:\n", prefix); + for (ov = get_entity_trans_overwrittenby_first(ent); + ov; + ov = get_entity_trans_overwrittenby_next(ent)) { + fprintf(F, "%s : %s of class %s\n", prefix, get_entity_name(ov), + get_type_name(get_entity_owner(ov))); + } } } @@ -583,7 +601,7 @@ void dump_entity_to_file_prefix (FILE *F, entity *ent, char *prefix, unsigned } if (get_trouts_state()) { - fprintf(F, "%sEntity outs:\n", prefix); + fprintf(F, "%s Entity outs:\n", prefix); dump_node_list(F, (firm_kind *)ent, prefix, (int(*)(firm_kind *))get_entity_n_accesses, (ir_node *(*)(firm_kind *, int))get_entity_access, "Accesses"); dump_node_list(F, (firm_kind *)ent, prefix, (int(*)(firm_kind *))get_entity_n_references, @@ -944,7 +962,24 @@ void dump_type_to_file (FILE *F, type *tp, dump_verbosity verbosity) { fprintf(F, "\n %s", get_type_name(stp)); } + if (get_irp_inh_transitive_closure_state() != inh_transitive_closure_none) { + type *stp; + fprintf(F, "\n transitive supertypes: "); + for (stp = get_class_trans_supertype_first(tp); + stp; + stp = get_class_trans_supertype_next(tp)) { + fprintf(F, "\n %s", get_type_name(stp)); + } + fprintf(F, "\n transitive subtypes: "); + for (stp = get_class_trans_subtype_first(tp); + stp; + stp = get_class_trans_subtype_next(tp)) { + fprintf(F, "\n %s", get_type_name(stp)); + } + } + fprintf(F, "\n peculiarity: %s\n", get_peculiarity_string(get_class_peculiarity(tp))); + } break; diff --git a/ir/tr/tr_inheritance.c b/ir/tr/tr_inheritance.c index fee2e578d..ea2c04482 100644 --- a/ir/tr/tr_inheritance.c +++ b/ir/tr/tr_inheritance.c @@ -260,11 +260,11 @@ static void compute_down_closure(type *tp) { int j, n_overwrittenby = get_entity_n_overwrittenby(mem); myset = get_entity_map(mem, d_down); - for (j = 0; j > n_overwrittenby; ++j) { + for (j = 0; j < n_overwrittenby; ++j) { entity *ov = get_entity_overwrittenby(mem, j); subset = get_entity_map(ov, d_down); - pset_insert_pset_ptr(myset, subset); pset_insert_ptr(myset, ov); + pset_insert_pset_ptr(myset, subset); } } @@ -314,7 +314,7 @@ static void compute_up_closure(type *tp) { int j, n_overwrites = get_entity_n_overwrites(mem); myset = get_entity_map(mem, d_up); - for (j = 0; j > n_overwrites; ++j) { + for (j = 0; j < n_overwrites; ++j) { entity *ov = get_entity_overwrites(mem, j); subset = get_entity_map(ov, d_up); pset_insert_pset_ptr(myset, subset); @@ -354,13 +354,13 @@ void compute_inh_transitive_closure(void) { assert(get_type_visited(tp) < get_master_type_visited()-1); for (j = 0; j < n_subtypes && !has_unmarked_subtype; ++j) { - type *stp = get_class_subtype(tp, j); - if (type_not_visited(stp)) has_unmarked_subtype = true; + type *stp = get_class_subtype(tp, j); + if (type_not_visited(stp)) has_unmarked_subtype = true; } /* This is a good starting point. */ if (!has_unmarked_subtype) - compute_down_closure(tp); + compute_down_closure(tp); } } @@ -381,7 +381,7 @@ void compute_inh_transitive_closure(void) { /* This is a good starting point. */ if (!has_unmarked_supertype) - compute_up_closure(tp); + compute_up_closure(tp); } }