+add_compound_ent_value(entity *ent, ir_node *val, entity *member) {
+ assert(ent && is_compound_entity(ent) && (ent->variability != uninitialized));
+ ARR_APP1 (ir_node *, ent->values, val);
+ ARR_APP1 (entity *, ent->val_ents, member);
+}
+
+inline int
+get_compound_ent_n_values(entity *ent) {
+ assert(ent && is_compound_entity(ent) && (ent->variability != uninitialized));
+ return (ARR_LEN (ent->values))-1;
+}
+
+inline ir_node *
+get_compound_ent_value(entity *ent, int pos) {
+ assert(ent && is_compound_entity(ent) && (ent->variability != uninitialized));
+ return ent->values[pos+1];
+}
+
+/* Copies the value i of the entity to current_block in current_ir_graph. */
+ir_node *copy_compound_ent_value(entity *ent, int pos) {
+ assert(ent && is_compound_entity(ent) && (ent->variability != uninitialized));
+ return copy_value(ent->values[pos+1]);
+}
+
+inline entity *
+get_compound_ent_value_member(entity *ent, int pos) {
+ assert(ent && is_compound_entity(ent) && (ent->variability != uninitialized));
+ return ent->val_ents[pos+1];
+}
+
+inline void
+set_compound_ent_value(entity *ent, ir_node *val, entity *member, int pos) {
+ assert(ent && is_compound_entity(ent) && (ent->variability != uninitialized));
+ ent->values[pos+1] = val;
+ ent->val_ents[pos+1] = member;
+}
+
+inline int
+get_entity_offset (entity *ent) {
+ return ent->offset;
+}
+
+inline void
+set_entity_offset (entity *ent, int offset) {
+ ent->offset = offset;
+}
+
+inline void
+add_entity_overwrites (entity *ent, entity *overwritten) {
+ assert(ent);
+ assert(is_class_type(get_entity_owner(ent)));
+ ARR_APP1 (entity *, ent->overwrites, overwritten);
+ ARR_APP1 (entity *, overwritten->overwrittenby, ent);
+}
+
+inline int
+get_entity_n_overwrites (entity *ent) {
+ assert(ent);
+ assert(is_class_type(get_entity_owner(ent)));
+ return (ARR_LEN (ent->overwrites))-1;
+}
+
+inline entity *
+get_entity_overwrites (entity *ent, int pos) {
+ assert(ent);
+ assert(is_class_type(get_entity_owner(ent)));
+ assert(pos < get_entity_n_overwrites(ent));
+ return ent->overwrites[pos+1];
+}
+
+inline void
+set_entity_overwrites (entity *ent, int pos, entity *overwritten) {
+ assert(ent);
+ assert(is_class_type(get_entity_owner(ent)));
+ assert(pos < get_entity_n_overwrites(ent));
+ ent->overwrites[pos+1] = overwritten;
+}
+
+inline void
+add_entity_overwrittenby (entity *ent, entity *overwrites) {
+ assert(ent);
+ assert(is_class_type(get_entity_owner(ent)));
+ add_entity_overwrites(overwrites, ent);
+}
+
+inline int
+get_entity_n_overwrittenby (entity *ent) {
+ assert(ent);
+ assert(is_class_type(get_entity_owner(ent)));
+ return (ARR_LEN (ent->overwrittenby))-1;
+}
+
+inline entity *
+get_entity_overwrittenby (entity *ent, int pos) {
+ assert(ent);
+ assert(is_class_type(get_entity_owner(ent)));
+ assert(pos < get_entity_n_overwrittenby(ent));
+ return ent->overwrittenby[pos+1];
+}
+
+inline void
+set_entity_overwrittenby (entity *ent, int pos, entity *overwrites) {
+ assert(ent);
+ assert(is_class_type(get_entity_owner(ent)));
+ assert(pos < get_entity_n_overwrittenby(ent));
+ ent->overwrittenby[pos+1] = overwrites;
+}
+
+/* A link to store intermediate information */
+void *
+get_entity_link(entity *ent) {
+ assert(ent);
+ return ent->link;
+}
+
+void
+set_entity_link(entity *ent, void *l) {
+ assert(ent);
+ ent->link = l;
+}
+
+inline ir_graph *
+get_entity_irg(entity *ent) {
+ assert (ent);
+ assert (is_method_type(ent->type));
+ return ent->irg;
+}
+
+inline void
+set_entity_irg(entity *ent, ir_graph *irg) {
+ assert (ent && ent->type);
+ assert (irg);
+ assert (is_method_type(ent->type));
+ assert (ent->peculiarity == existent);
+ ent->irg = irg;
+}
+
+int is_atomic_entity(entity *ent) {
+ type* t = get_entity_type(ent);
+ return (is_primitive_type(t) || is_pointer_type(t) ||
+ is_enumeration_type(t) || is_method_type(t));
+}
+
+int is_compound_entity(entity *ent) {
+ type* t = get_entity_type(ent);
+ return (is_class_type(t) || is_struct_type(t) ||
+ is_array_type(t) || is_union_type(t));