From: Christian Schäfer Date: Wed, 6 Sep 2000 14:49:29 +0000 (+0000) Subject: seven new access routines in type.[ch]. changed type_walker_2 so all routines are... X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=c8a033988442a12cf3d5b9c1185ed4d43a859537;p=libfirm seven new access routines in type.[ch]. changed type_walker_2 so all routines are considered. [r67] --- diff --git a/ir/tr/type.c b/ir/tr/type.c index 93047c0d9..5ad90e0f0 100644 --- a/ir/tr/type.c +++ b/ir/tr/type.c @@ -82,6 +82,16 @@ set_class_member (type_class *class, entity *member, int pos) class->members[pos+1] = member; } +int +get_class_n_member (type_class *class) +{ + int res; + + assert(class); + res = (ARR_LEN (class->members))-1; + return res; +} + /* field: subtype */ void add_class_subtype (type_class *class, type_class *subtype) @@ -102,6 +112,16 @@ set_class_subtype (type_class *class, type_class *subtype, int pos) class->subtypes[pos+1] = subtype; } +int +get_class_n_subtype (type_class *class) +{ + int res; + + assert(class); + res = (ARR_LEN (class->members))-1; + return res; +} + /* field: supertype */ void add_class_supertype (type_class *class, type_class *supertype) @@ -122,6 +142,16 @@ set_class_supertype (type_class *class, type_class *supertype, int pos) class->supertypes[pos+1] = supertype; } +int +get_class_n_supertype (type_class *class) +{ + int res; + + assert(class); + res = (ARR_LEN (class->members))-1; + return res; +} + /*******************************************************************/ /** TYPE_STRCT **/ /*******************************************************************/ @@ -157,6 +187,35 @@ get_strct_ident (type_strct *strct) { return strct->name; } +int +get_strct_n_member (type_strct *strct) +{ + int res; + + assert(strct); + res = (ARR_LEN (strct->members))-1; + return res; +} + +void +add_strct_member (type_strct *strct, entity *member) +{ + ARR_APP1 (type_strct *, strct->members, member); +} + +entity * +get_strct_member (type_strct *strct, int pos) +{ + assert (strct); + return strct->members[pos+1]; +} + +void +set_strct_member (type_strct *strct, int pos, entity *member) +{ + strct->members[pos+1] = member; +} + /* void set_strct_name (type_strct *strct, char *name); void set_strct_ident (type_strct *strct, ident* ident); diff --git a/ir/tr/type.h b/ir/tr/type.h index a0daa0c64..9154fbf1c 100644 --- a/ir/tr/type.h +++ b/ir/tr/type.h @@ -238,30 +238,17 @@ void set_class_ident (type_class *class, ident* ident); void add_class_member (type_class *class, entity *member); entity *get_class_member (type_class *class, int pos); void set_class_member (type_class *class, entity *member, int pos); +int get_class_n_member (type_class *class); void add_class_subtype (type_class *class, type_class *subtype); type_class *get_class_subtype (type_class *class, int pos); void set_class_subtype (type_class *class, type_class *subtype, int pos); +int get_class_n_subtype (type_class *class); void add_class_supertype (type_class *class, type_class *supertype); type_class *get_class_supertype (type_class *class, int pos); void set_class_supertype (type_class *class, type_class *supertype, int pos); - - -/* - get_class_n_entities - get_class_entity(class, pos) - set_class_entity(class, pos, entity) - get_class_n_sub - ... - - - Bitte implementieren, und dann in walker (Suche nach !!!! ) - einfuegen. - Genauso Struct!! - - Dann ev. noch in irdump Ausgabe der Kanten eingeben. -*/ +int get_class_n_supertype (type_class *class); /*******************************************************************/ /** TYPE_STRCT **/ @@ -281,6 +268,12 @@ type_strct *new_type_strct (ident *name); /* manipulate fields of type_strct */ const char *get_strct_name (type_strct *strct); ident *get_strct_ident (type_strct *strct); + +int get_strct_n_member (type_strct *strct); +void add_strct_member (type_strct *strct, entity *member); +entity *get_strct_member (type_strct *strct, int pos); +void set_strct_member (type_strct *strct, int pos, entity *member); + /* void set_strct_name (type_strct *strct, char *name); void set_strct_ident (type_strct *strct, ident* ident); diff --git a/ir/tr/typewalk.c b/ir/tr/typewalk.c index 88e5f080d..1db39ce83 100644 --- a/ir/tr/typewalk.c +++ b/ir/tr/typewalk.c @@ -75,12 +75,40 @@ void type_walk_2(type_or_ent *tore, } break; case k_type_class: - ((type_class *)tore)->visit = type_visited; - /* !!!!! */ + { + int i; + + ((type_class *)tore)->visit = type_visited; + //CS + for (i=0; ivisit = type_visited; - /* !!!!! */ + { + int i; + + ((type_strct *)tore)->visit = type_visited; + //CS + for (i=0; i