X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftr%2Fentity.c;h=14c895ad3709a1fe9b88c51af5f8cfc1ef91b60d;hb=e683a3e23ede57c176578db22c4a72050f101369;hp=8b79c9f66bf62de94635fd02045fea08f1277768;hpb=3663d1cfe641a78f9d7bc1f4df7f875757cbde9f;p=libfirm diff --git a/ir/tr/entity.c b/ir/tr/entity.c index 8b79c9f66..14c895ad3 100644 --- a/ir/tr/entity.c +++ b/ir/tr/entity.c @@ -27,6 +27,8 @@ /** general **/ /*******************************************************************/ +unsigned long entity_visited; + void init_entity (void) { @@ -96,10 +98,13 @@ new_entity (type *owner, ident *name, type *type) insert_entity_in_owner (res); return res; } + INLINE void free_entity_attrs(entity *ent) { assert(ent); - DEL_ARR_F(ent->overwrites); - DEL_ARR_F(ent->overwrittenby); + if (get_type_tpop(get_entity_owner(ent)) == type_class) { + DEL_ARR_F(ent->overwrites); + DEL_ARR_F(ent->overwrittenby); + } } entity * @@ -111,8 +116,15 @@ copy_entity_own (entity *old, type *new_owner) { new = (entity *) malloc (sizeof (entity)); memcpy (new, old, sizeof (entity)); new->owner = new_owner; - new->overwrites = DUP_ARR_F(entity *, old->overwrites); - new->overwrittenby = DUP_ARR_F(entity *, old->overwrittenby); + if ((get_type_tpop(get_entity_owner(old)) == type_class) && + (get_type_tpop(new_owner) == type_class)) { + new->overwrites = DUP_ARR_F(entity *, old->overwrites); + new->overwrittenby = DUP_ARR_F(entity *, old->overwrittenby); + } else if ((get_type_tpop(get_entity_owner(old)) != type_class) && + (get_type_tpop(new_owner) == type_class)) { + new->overwrites = NEW_ARR_F(entity *, 1); + new->overwrittenby = NEW_ARR_F(entity *, 1); + } insert_entity_in_owner (new); @@ -136,6 +148,12 @@ copy_entity_name (entity *old, ident *new_name) { return new; } +void +free_entity (entity *ent) { + free_entity_attrs(ent); + free(ent); +} + INLINE const char * get_entity_name (entity *ent) { assert (ent); @@ -506,3 +524,22 @@ int is_compound_entity(entity *ent) { return (is_class_type(t) || is_struct_type(t) || is_array_type(t) || is_union_type(t)); } + +bool equal_entity(entity *ent1, entity *ent2) { + return true; +} + + +unsigned long get_entity_visited(entity *entity) { + assert (entity); + return entity->visit; +} +void set_entity_visited(entity *entity, unsigned long num) { + assert (entity); + entity->visit = num; +} +/* Sets visited field in entity to entity_visited. */ +void mark_entity_visited(entity *entity) { + assert (entity); + entity->visit = entity_visited; +}