1 /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
2 ** All rights reserved.
4 ** Authors: Martin Trapp, Christian Schaefer
14 # include "entity_t.h"
18 /*******************************************************************/
20 /*******************************************************************/
27 /*******************************************************************/
29 /*******************************************************************/
31 inline void insert_entity_in_owner (entity *ent) {
32 type *owner = ent->owner;
33 switch (get_type_tpop_code(owner)) {
35 add_class_member (owner, ent);
38 add_struct_member (owner, ent);
41 add_union_member (owner, ent);
44 set_array_element_entity(owner, ent);
51 new_entity (type *owner, ident *name, type *type)
55 res = (entity *) malloc (sizeof (entity));
57 assert_legal_owner_of_ent(owner);
61 res->allocation = dynamic_allocated;
62 res->visibility = local;
67 /* Remember entity in it's owner. */
68 insert_entity_in_owner (res);
73 copy_entity_own (entity *old, type *new_owner) {
76 assert_legal_owner_of_ent(new_owner);
77 if (old->owner == new_owner) return old;
78 new = (entity *) malloc (sizeof (entity));
79 memcpy (new, old, sizeof (entity));
80 new->owner = new_owner;
82 insert_entity_in_owner (new);
88 copy_entity_name (entity *old, ident *new_name) {
91 if (old->name == new_name) return old;
92 new = (entity *) malloc (sizeof (entity));
93 memcpy (new, old, sizeof (entity));
97 insert_entity_in_owner (new);
103 get_entity_name (entity *ent) {
105 return id_to_str(get_entity_ident(ent));
109 get_entity_ident (entity *ent) {
115 void set_entity_ld_name (entity *, char *ld_name);
116 void set_entity_ld_ident (entity *, ident *ld_ident);
120 get_entity_owner (entity *ent) {
121 return ent->owner = skip_tid(ent->owner);
125 set_entity_owner (entity *ent, type *owner) {
126 assert_legal_owner_of_ent(owner);
130 inline void /* should this go into type.c? */
131 assert_legal_owner_of_ent(type *owner) {
132 assert (get_type_tpop_code(owner) == tpo_class ||
133 get_type_tpop_code(owner) == tpo_union ||
134 get_type_tpop_code(owner) == tpo_struct ||
135 get_type_tpop_code(owner) == tpo_array); /* Yes, array has an entity
136 -- to select fields! */
140 get_entity_ld_ident (entity *ent)
142 if (ent->ld_name == NULL)
143 ent->ld_name = mangle_entity (ent);
148 set_entity_ld_ident (entity *ent, ident *ld_ident) {
149 ent->ld_name = ld_ident;
153 char *get_entity_ld_name (entity *);
154 void set_entity_ld_name (entity *, char *ld_name);
158 get_entity_type (entity *ent) {
159 return ent->type = skip_tid(ent->type);
163 set_entity_type (entity *ent, type *type) {
168 inline ent_allocation
169 get_entity_allocation (entity *ent) {
170 return ent->allocation;
174 set_entity_allocation (entity *ent, ent_allocation al) {
175 ent->allocation = al;
179 inline ent_visibility
180 get_entity_visibility (entity *ent) {
181 return ent->visibility;
185 set_entity_visibility (entity *ent, ent_visibility vis) {
186 if (vis != local) assert(ent->allocation == static_allocated);
187 ent->visibility = vis;
191 get_entity_offset (entity *ent) {
196 set_entity_offset (entity *ent, int offset) {
197 ent->offset = offset;
201 get_entity_irg(entity *ent) {
203 assert (is_method_type(ent->type));
208 set_entity_irg(entity *ent, ir_graph *irg) {
209 assert (ent && ent->type);
211 assert (is_method_type(ent->type));