X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftr%2Ftypewalk.c;h=4620e85acd5eb9039d5f84af31d0a89ad075ff4f;hb=7cbf2ffb42818392ceb45b0289d3c05940f60a08;hp=f20857d3bae78f712b937afc7be77bdacdf8d3aa;hpb=aee537d3a7765763d1d5040c9a16faf3396133b9;p=libfirm diff --git a/ir/tr/typewalk.c b/ir/tr/typewalk.c index f20857d3b..4620e85ac 100644 --- a/ir/tr/typewalk.c +++ b/ir/tr/typewalk.c @@ -102,11 +102,13 @@ static void do_type_walk(type_or_ent tore, ent = tore.ent; if (entity_visited(ent)) return; + mark_entity_visited(ent); break; case k_type: - tp = skip_tid(tore.typ); + tp = tore.typ; if (type_visited(tp)) return; + mark_type_visited(tp); break; default: break; @@ -119,7 +121,6 @@ static void do_type_walk(type_or_ent tore, /* iterate */ switch (get_kind(tore.ent)) { case k_entity: - mark_entity_visited(ent); cont.typ = get_entity_owner(ent); do_type_walk(cont, pre, post, env); cont.typ = get_entity_type(ent); @@ -142,7 +143,6 @@ static void do_type_walk(type_or_ent tore, } break; case k_type: - mark_type_visited(tp); switch (get_type_tpop_code(tp)) { case tpo_class: n_types = get_class_n_supertypes(tp); @@ -291,7 +291,7 @@ void type_walk_prog(type_walk_func *pre, type_walk_func *post, void *env) { do_type_walk(cont, pre, post, env); } - for (i = 0; i < IR_SEGMENT_COUNT; ++i) { + for (i = IR_SEGMENT_FIRST; i <= IR_SEGMENT_LAST; ++i) { cont.typ = get_segment_type((ir_segment_t) i); if(cont.typ) do_type_walk(cont, pre, post, env); @@ -350,11 +350,6 @@ static void type_walk_s2s_2(type_or_ent tore, if (entity_visited(tore.ent)) return; break; case k_type: - if (type_id == get_type_tpop(tore.typ)) { - cont.typ = skip_tid(tore.typ); - type_walk_s2s_2(cont, pre, post, env); - return; - } if (type_visited(tore.typ)) return; break; default: @@ -378,7 +373,6 @@ static void type_walk_s2s_2(type_or_ent tore, /* execute pre method */ if (pre) pre(tore, env); - tp = skip_tid(tp); n = get_class_n_subtypes(tp); for (i = 0; i < n; ++i) { @@ -447,11 +441,6 @@ type_walk_super_2(type_or_ent tore, return; break; case k_type: - if (type_id == get_type_tpop(tore.typ)) { - cont.typ = skip_tid(tore.typ); - type_walk_super_2(cont, pre, post, env); - return; - } if (type_visited(tore.typ)) return; break; @@ -471,7 +460,6 @@ type_walk_super_2(type_or_ent tore, /* execute pre method */ if (pre) pre(tore, env); - tp = skip_tid(tp); n = get_class_n_supertypes(tp); for (i = 0; i < n; ++i) { @@ -550,7 +538,6 @@ class_walk_s2s_2(ir_type *tp, if (pre) pre(tp, env); - tp = skip_tid(tp); n = get_class_n_subtypes(tp); for (i = 0; i < n; ++i) { class_walk_s2s_2(get_class_subtype(tp, i), pre, post, env);