set routine for entity mangled name.
[libfirm] / ir / tr / entity.c
1 /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
2 ** All rights reserved.
3 **
4 ** Authors: Martin Trapp, Christian Schaefer
5 **
6 */
7
8 #ifdef HAVE_CONFIG_H
9 # include <config.h>
10 #endif
11
12 # include <stdlib.h>
13 # include <stddef.h>
14 # include "entity_t.h"
15 # include "entity.h"
16 # include "mangle.h"
17
18 /*******************************************************************/
19 /** general                                                       **/
20 /*******************************************************************/
21
22 void
23 init_entity (void)
24 {
25 }
26
27 /*******************************************************************/
28 /** ENTITY                                                        **/
29 /*******************************************************************/
30
31 entity *
32 new_entity (type *owner, ident *name, type *type)
33 {
34   entity *res;
35
36   res = (entity *) malloc (sizeof (entity));
37   res->kind = k_entity;
38   assert_legal_owner_of_ent(owner);
39   res->owner = owner;
40   res->name = name;
41   res->type = type;
42   res->allocation = dynamic_allocated;
43   res->visibility = local;
44   res->ld_name = NULL;
45
46   res->visit = 0;
47
48   switch (get_type_tpop_code(owner)) {
49   case tpo_class: {
50     add_class_member (owner, res);
51   } break;
52   case tpo_struct: {
53     add_struct_member (owner, res);
54   } break;
55   case tpo_union: {
56     add_union_member (owner, res);
57   } break;
58   case tpo_array: {
59     set_array_element_entity(owner, res);
60   } break;
61   default: assert(0);
62   }
63
64   return res;
65 }
66
67 inline const char *
68 get_entity_name (entity *ent) {
69   assert (ent);
70   return id_to_str(get_entity_ident(ent));
71 }
72
73 ident *
74 get_entity_ident    (entity *ent) {
75   assert(ent);
76   return ent->name;
77 }
78
79 /*
80 void   set_entity_ld_name  (entity *, char *ld_name);
81 void   set_entity_ld_ident (entity *, ident *ld_ident);
82 */
83
84 inline type *
85 get_entity_owner (entity *ent) {
86   return ent->owner;
87 }
88
89 inline void
90 set_entity_owner (entity *ent, type *owner) {
91   assert_legal_owner_of_ent(owner);
92   ent->owner = owner;
93 }
94
95 inline void   /* should this go into type.c? */
96 assert_legal_owner_of_ent(type *owner) {
97   assert (get_type_tpop_code(owner) == tpo_class ||
98           get_type_tpop_code(owner) == tpo_union ||
99           get_type_tpop_code(owner) == tpo_struct ||
100           get_type_tpop_code(owner) == tpo_array);   /* Yes, array has an entity
101                                                         -- to select fields! */
102 }
103
104 inline ident *
105 get_entity_ld_ident (entity *ent)
106 {
107   if (ent->ld_name == NULL)
108     ent->ld_name = mangle_entity (ent);
109   return ent->ld_name;
110 }
111
112 void   set_entity_ld_ident (entity *, ident *ld_ident) {
113   ent->ld_name = ld_ident;
114 }
115
116 /*
117 char  *get_entity_ld_name  (entity *);
118 void   set_entity_ld_name  (entity *, char *ld_name);
119 */
120
121 inline type *
122 get_entity_type (entity *ent) {
123   return ent->type;
124 }
125
126 inline void
127 set_entity_type (entity *ent, type *type) {
128   ent->type = type;
129 }
130
131
132 inline ent_allocation
133 get_entity_allocation (entity *ent) {
134   return ent->allocation;
135 }
136
137 inline void
138 set_entity_allocation (entity *ent, ent_allocation al) {
139   ent->allocation = al;
140 }
141
142
143 inline ent_visibility
144 get_entity_visibility (entity *ent) {
145   return ent->visibility;
146 }
147
148 inline void
149 set_entity_visibility (entity *ent, ent_visibility vis) {
150   if (vis != local) assert(ent->allocation == static_allocated);
151   ent->visibility = vis;
152 }
153
154 inline int
155 get_entity_offset (entity *ent) {
156   return ent->offset;
157 }
158
159 inline void
160 set_entity_offset (entity *ent, int offset) {
161   ent->offset = offset;
162 }
163
164 inline ir_graph *
165 get_entity_irg(entity *ent) {
166   assert (ent);
167   assert (is_method_type(ent->type));
168   return ent->irg;
169 }
170
171 inline void
172 set_entity_irg(entity *ent, ir_graph *irg) {
173   assert (ent && ent->type);
174   assert (irg);
175   assert (is_method_type(ent->type));
176   ent->irg = irg;
177 }