added debug support constructors
[libfirm] / ir / tr / entity.c
index 14c895a..28b00b2 100644 (file)
@@ -27,8 +27,6 @@
 /** general                                                       **/
 /*******************************************************************/
 
-unsigned long entity_visited;
-
 void
 init_entity (void)
 {
@@ -38,6 +36,8 @@ init_entity (void)
 /** ENTITY                                                        **/
 /*******************************************************************/
 
+INLINE type *get_entity_owner (entity *ent);
+
 INLINE void insert_entity_in_owner (entity *ent) {
   type *owner = ent->owner;
   switch (get_type_tpop_code(owner)) {
@@ -98,7 +98,12 @@ new_entity (type *owner, ident *name, type *type)
   insert_entity_in_owner (res);
   return res;
 }
-
+entity *
+new_d_entity (type *owner, ident *name, type *type, dbg_info *db) {
+  entity *res = new_entity(owner, name, type);
+  set_entity_dbg_info(res, db);
+  return res;
+}
 INLINE void free_entity_attrs(entity *ent) {
   assert(ent);
   if (get_type_tpop(get_entity_owner(ent)) == type_class) {
@@ -388,6 +393,23 @@ set_compound_ent_value(entity *ent, ir_node *val, entity *member, int pos) {
   ent->val_ents[pos+1] = member;
 }
 
+void
+remove_compound_ent_value(entity *ent, entity *value_ent) {
+  int i;
+  assert(ent && is_compound_entity(ent) && (ent->variability != uninitialized));
+  for (i = 1; i < (ARR_LEN (ent->val_ents)); i++) {
+    if (ent->val_ents[i] == value_ent) {
+      for(; i < (ARR_LEN (ent->val_ents))-1; i++) {
+       ent->val_ents[i] = ent->val_ents[i+1];
+       ent->values[i]   = ent->values[i+1];
+      }
+      ARR_SETLEN(entity*,  ent->val_ents, ARR_LEN(ent->val_ents) - 1);
+      ARR_SETLEN(ir_node*, ent->values,   ARR_LEN(ent->values) - 1);
+      break;
+    }
+  }
+}
+
 void
 set_array_entity_values(entity *ent, tarval **values, int num_vals) {
   int i;
@@ -541,5 +563,5 @@ void        set_entity_visited(entity *entity, unsigned long num) {
 /* Sets visited field in entity to entity_visited. */
 void        mark_entity_visited(entity *entity) {
   assert (entity);
-  entity->visit = entity_visited;
+  entity->visit = type_visited;
 }