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)
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)
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 **/
/*******************************************************************/
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);
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 **/
/* 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);
}
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:
{