seven new access routines in type.[ch]. changed type_walker_2 so all routines are...
authorChristian Schäfer <schaefer@ipd.info.uni-karlsruhe.de>
Wed, 6 Sep 2000 14:49:29 +0000 (14:49 +0000)
committerChristian Schäfer <schaefer@ipd.info.uni-karlsruhe.de>
Wed, 6 Sep 2000 14:49:29 +0000 (14:49 +0000)
[r67]

ir/tr/type.c
ir/tr/type.h
ir/tr/typewalk.c

index 93047c0..5ad90e0 100644 (file)
@@ -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);
index a0daa0c..9154fbf 100644 (file)
@@ -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);
index 88e5f08..1db39ce 100644 (file)
@@ -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; i<get_class_n_member((type_class *)tore); i++)
+         {
+           type_walk_2((type_or_ent *)get_class_member((type_class *)tore, i),
+                       pre, post, env);
+         }
+       for (i=0; i<get_class_n_subtype((type_class *)tore); i++)
+         {
+           type_walk_2((type_or_ent *)get_class_subtype((type_class *)tore, i),
+                       pre, post, env);
+         }
+       for (i=0; i<get_class_n_supertype((type_class *)tore); i++)
+         {
+           type_walk_2((type_or_ent *)get_class_supertype((type_class *)tore, i),
+                       pre, post, env);
+         }
+      }
       break;
     case k_type_strct:
-      ((type_strct *)tore)->visit = type_visited;
-      /* !!!!! */
+      {
+       int i;
+
+       ((type_strct *)tore)->visit = type_visited;
+       //CS
+       for (i=0; i<get_strct_n_member((type_strct *)tore); i++)
+         {
+           type_walk_2((type_or_ent *)get_strct_member((type_strct *)tore, i),
+                       pre, post, env);
+         }
+      }
       break;
     case k_type_method:
       {