X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftr%2Ftypewalk.c;h=4d21fc0a3acaab0d314f57104fbac411390edeb3;hb=6ce54897086db42a2f4a59d946e9895954cc9ef3;hp=e7baf6461cb57bda3fb574a3de1938c7544bc5c9;hpb=6a20c248ccb4d759aae7d8b2ac7a36b81d8ef3ad;p=libfirm diff --git a/ir/tr/typewalk.c b/ir/tr/typewalk.c index e7baf6461..4d21fc0a3 100644 --- a/ir/tr/typewalk.c +++ b/ir/tr/typewalk.c @@ -64,7 +64,7 @@ static void do_type_walk(type_or_ent *tore, { 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: @@ -192,36 +192,17 @@ static void do_type_walk(type_or_ent *tore, static void irn_type_walker( ir_node *node, type_walk_func *pre, type_walk_func *post, void *env) { - symconst_kind kind; + entity *ent; + ir_type *tp; assert(node); - switch (get_irn_opcode(node)) { /* node label */ - case iro_SymConst: - kind = get_SymConst_kind(node); - if (kind == symconst_type_tag || kind == symconst_size) - do_type_walk((type_or_ent *)get_SymConst_type(node), pre, post, env); - else if (kind == symconst_addr_ent) - do_type_walk((type_or_ent *)get_SymConst_entity(node), pre, post, env); - break; - case iro_Sel: - do_type_walk((type_or_ent *)get_Sel_entity(node), pre, post, env); - break; - case iro_Call: - do_type_walk((type_or_ent *)get_Call_type(node), pre, post, env); - break; - case iro_Alloc: - do_type_walk((type_or_ent *)get_Alloc_type(node), pre, post, env); - break; - case iro_Free: - do_type_walk((type_or_ent *)get_Free_type(node), pre, post, env); - break; - case iro_Cast: - do_type_walk((type_or_ent *)get_Cast_type(node), pre, post, env); - break; - default: - break; - } + ent = get_irn_entity_attr(node); + if (ent) + do_type_walk((type_or_ent *)ent, pre, post, env); + tp = get_irn_type_attr(node); + if (tp) + do_type_walk((type_or_ent *)tp, pre, post, env); } /** Check whether node contains types or entities as an attribute. @@ -299,11 +280,11 @@ static void type_walk_s2s_2(type_or_ent *tore, if (entity_visited((entity *)tore)) return; break; case k_type: - if (type_id == get_type_tpop((type*)tore)) { - type_walk_s2s_2((type_or_ent *)skip_tid((type *)tore), pre, post, env); + if (type_id == get_type_tpop((ir_type*)tore)) { + type_walk_s2s_2((type_or_ent *)skip_tid((ir_type *)tore), pre, post, env); return; } - if (type_visited((type *)tore)) return; + if (type_visited((ir_type *)tore)) return; break; default: break; @@ -313,7 +294,7 @@ static void type_walk_s2s_2(type_or_ent *tore, switch (get_kind(tore)) { case k_type: { - type *tp = (type *)tore; + ir_type *tp = (ir_type *)tore; mark_type_visited(tp); switch (get_type_tpop_code(tp)) { case tpo_class: @@ -326,7 +307,7 @@ static void type_walk_s2s_2(type_or_ent *tore, /* execute pre method */ if (pre) pre(tore, env); - tp = skip_tid((type*)tore); + tp = skip_tid((ir_type*)tore); n = get_class_n_subtypes(tp); for (i = 0; i < n; ++i) { @@ -370,7 +351,7 @@ void type_walk_super2sub( void *env) { int i, n_types = get_irp_n_types(); - type *tp; + ir_type *tp; inc_master_type_visited(); type_walk_s2s_2((type_or_ent *)get_glob_type(), pre, post, env); @@ -396,11 +377,11 @@ type_walk_super_2(type_or_ent *tore, if (entity_visited((entity *)tore)) return; break; case k_type: - if (type_id == get_type_tpop((type*)tore)) { - type_walk_super_2((type_or_ent *)skip_tid((type *)tore), pre, post, env); + if (type_id == get_type_tpop((ir_type*)tore)) { + type_walk_super_2((type_or_ent *)skip_tid((ir_type *)tore), pre, post, env); return; } - if (type_visited((type *)tore)) return; + if (type_visited((ir_type *)tore)) return; break; default: break; @@ -410,7 +391,7 @@ type_walk_super_2(type_or_ent *tore, switch (get_kind(tore)) { case k_type: { - type *tp = (type *)tore; + ir_type *tp = (ir_type *)tore; mark_type_visited(tp); switch (get_type_tpop_code(tp)) { case tpo_class: @@ -418,7 +399,7 @@ type_walk_super_2(type_or_ent *tore, /* execute pre method */ if (pre) pre(tore, env); - tp = skip_tid((type*)tore); + tp = skip_tid((ir_type*)tore); n = get_class_n_supertypes(tp); for (i = 0; i < n; ++i) { @@ -461,7 +442,7 @@ void type_walk_super( void (*post)(type_or_ent*, void*), void *env) { int i, n_types = get_irp_n_types(); - type *tp; + ir_type *tp; inc_master_type_visited(); type_walk_super_2((type_or_ent *)get_glob_type(), pre, post, env); @@ -475,9 +456,9 @@ void type_walk_super( static void -class_walk_s2s_2(type *tp, - void (*pre)(type*, void*), - void (*post)(type*, void*), +class_walk_s2s_2(ir_type *tp, + void (*pre)(ir_type*, void*), + void (*post)(ir_type*, void*), void *env) { int i, n; @@ -512,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++) { @@ -535,7 +516,7 @@ 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) {