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? */
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:
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);
}
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<get_struct_n_members(tp); i++)
- do_type_walk((type_or_ent *)get_struct_member(tp, i), pre, post, env);
- break;
+ n_mem = get_struct_n_members(tp);
+ for (i = 0; i < n_mem; ++i)
+ do_type_walk((type_or_ent *)get_struct_member(tp, i), pre, post, env);
+ break;
case tpo_method:
- for (i = 0; i < get_method_n_params(tp); i++)
+ n_mem = get_method_n_params(tp);
+ for (i = 0; i < n_mem; ++i)
do_type_walk((type_or_ent *)get_method_param_type(tp, i), pre, post, env);
- for (i = 0; i < get_method_n_ress(tp); i++)
+
+ n_mem = get_method_n_ress(tp);
+ for (i = 0; i < n_mem; ++i)
do_type_walk((type_or_ent *)get_method_res_type(tp, i), pre, post, env);
break;
case tpo_union:
- for (i = 0; i < get_union_n_members(tp); i++)
+ n_mem = get_union_n_members(tp);
+ for (i = 0; i < n_mem; ++i)
do_type_walk((type_or_ent *)get_union_member(tp, i), pre, post, env);
break;
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.
int i, n_types = get_irp_n_types();
inc_master_type_visited();
- for (i = 0; i < n_types; i++) {
+ for (i = 0; i < n_types; ++i) {
do_type_walk((type_or_ent *)get_irp_type(i), pre, post, env);
}
do_type_walk((type_or_ent *)get_glob_type(), pre, post, env);
void (*post)(type_or_ent*, void*),
void *env)
{
- int i;
+ int i, n;
/* marked? */
switch (get_kind(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;
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:
{
- for (i = 0; i < get_class_n_supertypes(tp); i++) {
- type_walk_s2s_2((type_or_ent *)get_class_supertype(tp, i), pre,
- post, env);
- }
- /* execute pre method */
- if(pre)
- pre(tore, env);
- tp = skip_tid((type*)tore);
-
- for (i = 0; i < get_class_n_subtypes(tp); i++) {
- type_walk_s2s_2((type_or_ent *)get_class_subtype(tp, i), pre,
- post, env);
- }
-
- /* execute post method */
- if(post)
- post(tore, env);
+ n = get_class_n_supertypes(tp);
+ for (i = 0; i < n; ++i) {
+ type_walk_s2s_2((type_or_ent *)get_class_supertype(tp, i), pre,
+ post, env);
+ }
+ /* execute pre method */
+ if (pre)
+ pre(tore, env);
+ tp = skip_tid((ir_type*)tore);
+
+ n = get_class_n_subtypes(tp);
+ for (i = 0; i < n; ++i) {
+ type_walk_s2s_2((type_or_ent *)get_class_subtype(tp, i), pre,
+ post, env);
+ }
+
+ /* execute post method */
+ if (post)
+ post(tore, env);
}
break;
case tpo_struct:
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);
- for (i = 0; i < n_types; i++) {
+ for (i = 0; i < n_types; ++i) {
tp = get_irp_type(i);
type_walk_s2s_2((type_or_ent *)tp, pre, post, env);
}
void (*post)(type_or_ent*, void*),
void *env)
{
- int i;
+ int i, n;
/* marked? */
switch (get_kind(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;
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:
{
- /* execute pre method */
- if (pre)
- pre(tore, env);
- tp = skip_tid((type*)tore);
-
- for (i = 0; i < get_class_n_supertypes(tp); i++) {
- type_walk_super_2((type_or_ent *)get_class_supertype(tp, i), pre,
- post, env);
- }
-
- /* execute post method */
- if (post)
- post(tore, env);
+ /* execute pre method */
+ if (pre)
+ pre(tore, env);
+ tp = skip_tid((ir_type*)tore);
+
+ n = get_class_n_supertypes(tp);
+ for (i = 0; i < n; ++i) {
+ type_walk_super_2((type_or_ent *)get_class_supertype(tp, i), pre,
+ post, env);
+ }
+
+ /* execute post method */
+ if (post)
+ post(tore, env);
}
break;
case tpo_struct:
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);
- for (i = 0; i < n_types; i++) {
+ for (i = 0; i < n_types; ++i) {
tp = get_irp_type(i);
type_walk_super_2((type_or_ent *)tp, pre, post, env);
}
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;
+ int i, n;
/* marked? */
if (type_visited(tp)) return;
assert(is_Class_type(tp));
/* Assure all supertypes are visited before */
- for (i = get_class_n_supertypes(tp) - 1; 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;
}
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 */
}
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++) {
/* 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<get_class_n_members(tp); i++)
+ case tpo_class:
+ n = get_class_n_members(tp);
+ for (i = 0; i < n; ++i)
doit(get_class_member(tp, i), env);
- } break;
- case tpo_struct: {
- for (i = 0; i<get_struct_n_members(tp); i++)
+ break;
+ case tpo_struct:
+ n = get_struct_n_members(tp);
+ for (i = 0; i < n; ++i)
doit(get_struct_member(tp, i), env);
- } break;
- case tpo_union: {
- for (i = 0; i < get_union_n_members(tp); i++)
+ break;
+ case tpo_union:
+ n = get_union_n_members(tp);
+ for (i = 0; i < n; ++i)
doit(get_union_member(tp, i), env);
- } break;
- case tpo_array: {
- doit(get_array_element_entity(tp), env);
- } break;
+ break;
+ case tpo_array:
+ doit(get_array_element_entity(tp), env);
+ break;
case tpo_method:
case tpo_enumeration:
case tpo_pointer: