added access routines for new flag in type_class struct
authorChristian Schäfer <schaefer@ipd.info.uni-karlsruhe.de>
Wed, 19 Jul 2000 14:12:05 +0000 (14:12 +0000)
committerChristian Schäfer <schaefer@ipd.info.uni-karlsruhe.de>
Wed, 19 Jul 2000 14:12:05 +0000 (14:12 +0000)
[r51]

ir/tr/entity.h
ir/tr/type.c
ir/tr/type.h

index 821176e..70dbf9b 100644 (file)
@@ -30,7 +30,6 @@
 # define _ENTITY_H_
 
 # include "ident.h"
-# include "type.h"
 
 /*******************************************************************/
 /** general                                                       **/
@@ -49,6 +48,12 @@ void init_entity (void);
 typedef struct ir_graph ir_graph;
 #endif
 
+#ifndef _TYPE_TYPEDEF_
+#define _TYPE_TYPEDEF_
+/* to resolve recursion between entity.h and irgraph.h */
+typedef union type type;
+#endif
+
 typedef struct entity entity;
 
 /* create a new entity */
@@ -59,10 +64,12 @@ char     *get_entity_name     (entity *ent);
 ident    *get_entity_ident    (entity *ent);
 
 ident    *get_entity_ld_name  (entity *ent);
+
 /*
 char     *get_entity_ld_name  (entity *ent);
-ident    *get_entity_ld_ident (entity *ent);
 void      set_entity_ld_name  (entity *ent, char *ld_name);
+
+ident    *get_entity_ld_ident (entity *ent);
 void      set_entity_ld_ident (entity *ent, ident *ld_ident);
 */
 
index bfee564..d13ba61 100644 (file)
@@ -10,6 +10,7 @@
 # include "type.h"
 # include "irprog.h"  /* So that constructors can add the type to global
                         data structure. */
+# include "array.h"
 
 unsigned long type_visited = 0;
 
@@ -32,6 +33,9 @@ new_type_class (ident *name)//, int members)
   res->kind = k_type_class;
   res->name = name;
 
+  res->members = NEW_ARR_F (entity *, 1);
+  res->subtypes = NEW_ARR_F (type_class *, 1);
+  res->supertypes = NEW_ARR_F (type_class *, 1);
   // res->n_members = 0;
   // res->max_members = members;
   // res->member = (entity **) xmalloc (sizeof (entity*) * members);
@@ -42,14 +46,13 @@ new_type_class (ident *name)//, int members)
 }
 
 /* manipulate fields of type_class */
-/*
-char  *
+char *
 get_class_name  (type_class *class) {
   assert(class);
   return ID_TO_STR(class->name);
 }
-*/
 
+/* field: ident */
 ident *
 get_class_ident (type_class *class) {
   assert(class);
@@ -61,6 +64,65 @@ void   set_class_name  (type_class *class, char *name);
 void   set_class_ident (type_class *class, ident* ident);
 */
 
+/* field: member */
+void
+add_class_member (type_class *class, entity *member)
+{
+  ARR_APP1 (entity *, class->members, member);
+}
+
+entity *
+get_class_member (type_class *class, int pos)
+{
+  assert (class);
+  return class->members[pos+1];
+}
+
+void
+set_class_member (type_class *class, entity *member, int pos)
+{
+  class->members[pos+1] = member;
+}
+
+/* field: subtype */
+void
+add_class_subtype (type_class *class,  type_class *subtype)
+{
+  ARR_APP1 (type_class *, class->subtypes, subtype);
+}
+
+type_class *
+get_class_subtype (type_class *class, int pos)
+{
+  assert (class);
+  return class->subtypes[pos+1];
+}
+
+void
+set_class_subtype (type_class *class, type_class *subtype, int pos)
+{
+  class->subtypes[pos+1] = subtype;
+}
+
+/* field: supertype */
+void
+add_class_supertype (type_class *class, type_class *supertype)
+{
+  ARR_APP1 (type_class *, class->supertypes, supertype);
+}
+
+type_class *
+get_class_supertype (type_class *class, int pos)
+{
+  assert (class);
+  return class->supertypes[pos+1];
+}
+
+void
+set_class_supertype (type_class *class, type_class *supertype, int pos)
+{
+  class->supertypes[pos+1] = supertype;
+}
 
 /*******************************************************************/
 /** TYPE_STRCT                                                   **/
index bee2ee1..f6851a3 100644 (file)
@@ -183,9 +183,14 @@ or lowering phases.
 # include "common.h"
 # include "ident.h"
 # include "irmode.h"
+# include "entity.h"
 
 /* for recursive type definiton */
+#ifndef _TYPE_TYPEDEF_
+#define _TYPE_TYPEDEF_
+/* to resolve recursion between entity.h and irgraph.h */
 typedef union type type;
+#endif
 
 /* visited flag to traverse the type information */
 extern unsigned long type_visited;
@@ -194,31 +199,47 @@ extern unsigned long type_visited;
 /** TYPE_CLASS                                                    **/
 /*******************************************************************/
 
-typedef struct {
+typedef struct type_class type_class;
+
+struct type_class {
   firm_kind kind;
-  ident *name;
-  /** needs list with it's entities -- does it really??
-      Entities can be added during their creation.
-  entities **member; **/
-  /** to represent inheritance
-  type_class **subtypes;    * direct subtypes *
-  type_class **supertypes;  * direct supertypes *
-  **/
-  unsigned long visit;     /* visited counter for walks of the type information */
-} type_class;
+  ident *name;             /* needs list with it's entities
+                             does it really??
+                             Entities can be added during their creation. */
+  struct entity **members;        /* to represent inheritance */
+  type_class **subtypes;   /* direct subtypes */
+  type_class **supertypes; /* direct supertypes */
+  unsigned long visit;     /* visited counter for walks of
+                             the type information */
+};
 
 
 /* create a new type_class */
 type_class *new_type_class (ident *name);
 
 /* manipulate fields of type_class */
-char  *get_class_name  (type_class *clss);
-ident *get_class_ident (type_class *clss);
-/*
-void   set_class_name  (type_class *clss, char *name);
-void   set_class_ident (type_class *clss, ident* ident);
+
+char  *get_class_name  (type_class *class);
+ident *get_class_ident (type_class *class);
+
+/* Not necessary now!
+void   set_class_name  (type_class *class, char *name);
+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);
+
+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);
+
+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_entity_arr
     get_class_n_entities
     get_class_entity(class, pos)
@@ -473,6 +494,7 @@ union type {
   type_primitive primitive;
 };
 
+
 int is_type(void *thing);