X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftr%2Ftypewalk.c;h=267a6e9be79256b3440c98d44690bb9a81bae9b7;hb=f64411a2a8a4e28e70a281ac67736a1bdf996b72;hp=0e2013b88cb78a6cfb95a7788b6b1d7445ad0337;hpb=dafa8bff8cf5aeac979fbcd1e69e4437eee3a126;p=libfirm diff --git a/ir/tr/typewalk.c b/ir/tr/typewalk.c index 0e2013b88..267a6e9be 100644 --- a/ir/tr/typewalk.c +++ b/ir/tr/typewalk.c @@ -62,9 +62,9 @@ static void do_type_walk(type_or_ent *tore, type_walk_func *post, void *env) { - int i; + int i, n_types, n_mem; entity *ent; - type *tp; + ir_type *tp; ir_node *n; /* marked? */ @@ -74,7 +74,7 @@ static void do_type_walk(type_or_ent *tore, if (entity_visited(ent)) return; break; case k_type: - tp = skip_tid((type *)tore); + tp = skip_tid((ir_type *)tore); if (type_visited(tp)) return; break; default: @@ -99,7 +99,8 @@ static void do_type_walk(type_or_ent *tore, irn_type_walker(n, pre, post, env); } else { - for (i = 0; i < get_compound_ent_n_values(ent); ++i) { + n_mem = get_compound_ent_n_values(ent); + for (i = 0; i < n_mem; ++i) { n = get_compound_ent_value(ent, i); irn_type_walker(n, pre, post, env); } @@ -111,28 +112,38 @@ static void do_type_walk(type_or_ent *tore, switch (get_type_tpop_code(tp)) { case tpo_class: - for (i = 0; i < get_class_n_supertypes(tp); i++) - do_type_walk((type_or_ent *)get_class_supertype(tp, i), pre, post, env); - for (i = 0; i < get_class_n_members(tp); i++) - do_type_walk((type_or_ent *)get_class_member(tp, i), pre, post, env); - for (i = 0; i < get_class_n_subtypes(tp); i++) - do_type_walk((type_or_ent *)get_class_subtype(tp, i), pre, post, env); + n_types = get_class_n_supertypes(tp); + for (i = 0; i < n_types; ++i) + do_type_walk((type_or_ent *)get_class_supertype(tp, i), pre, post, env); + + n_mem = get_class_n_members(tp); + for (i = 0; i < n_mem; ++i) + do_type_walk((type_or_ent *)get_class_member(tp, i), pre, post, env); + + n_types = get_class_n_subtypes(tp); + for (i = 0; i < n_types; ++i) + do_type_walk((type_or_ent *)get_class_subtype(tp, i), pre, post, env); break; case tpo_struct: - for (i = 0; i= 0; --i) { + n = get_class_n_supertypes(tp); + for (i = 0; i < n; ++i) { if (type_not_visited(get_class_supertype(tp, i))) return; } @@ -485,7 +481,8 @@ class_walk_s2s_2(type *tp, pre(tp, env); tp = skip_tid(tp); - for (i = get_class_n_subtypes(tp) - 1; i >= 0; --i) { + n = get_class_n_subtypes(tp); + for (i = 0; i < n; ++i) { class_walk_s2s_2(get_class_subtype(tp, i), pre, post, env); } /* execute post method */ @@ -496,12 +493,12 @@ class_walk_s2s_2(type *tp, } void class_walk_super2sub( - void (*pre)(type*, void*), - void (*post)(type*, void*), + void (*pre)(ir_type*, void*), + void (*post)(ir_type*, void*), void *env) { int i, n_types = get_irp_n_types(); - type *tp; + ir_type *tp; inc_master_type_visited(); for (i = 0; i < n_types; i++) { @@ -519,27 +516,31 @@ void class_walk_super2sub( /* Walks over all entities in the type */ void walk_types_entities( - type *tp, + ir_type *tp, void (*doit)(entity*, void*), void *env) { - int i; + int i, n; + switch (get_type_tpop_code(tp)) { - case tpo_class: { - for (i = 0; i