Added memberlist to union. Method type will not need a member list
[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->ld_name = NULL;
43
44   res->visit = 0;
45
46   switch (get_type_tpop_code(owner)) {
47   case tpo_class: {
48     add_class_member (owner, res);
49   } break;
50   case tpo_struct: {
51     add_struct_member (owner, res);
52   } break;
53   case tpo_union: {
54     add_union_member (owner, res);
55   } break;
56   default: assert(0);
57   }
58
59   return res;
60 }
61
62 inline const char *
63 get_entity_name (entity *ent) {
64   assert (ent);
65   return id_to_str(get_entity_ident(ent));
66 }
67
68 ident *
69 get_entity_ident    (entity *ent) {
70   assert(ent);
71   return ent->name;
72 }
73
74 /*
75 void   set_entity_ld_name  (entity *, char *ld_name);
76 void   set_entity_ld_ident (entity *, ident *ld_ident);
77 */
78
79 inline type *
80 get_entity_owner (entity *ent) {
81   return ent->owner;
82 }
83
84 inline void
85 set_entity_owner (entity *ent, type *owner) {
86   assert_legal_owner_of_ent(owner);
87   ent->owner = owner;
88 }
89
90 inline void   /* should this go into type.c? */
91 assert_legal_owner_of_ent(type *owner) {
92   assert (get_type_tpop_code(owner) == tpo_class ||
93           get_type_tpop_code(owner) == tpo_union ||
94           get_type_tpop_code(owner) == tpo_struct);
95 }
96
97 inline ident *
98 get_entity_ld_name (entity *ent)
99 {
100   if (ent->ld_name != NULL) return ent->ld_name;
101   return mangle_entity (ent);
102 }
103
104 /*
105 char  *get_entity_ld_name  (entity *);
106 void   set_entity_ld_name  (entity *, char *ld_name);
107 void   set_entity_ld_ident (entity *, ident *ld_ident);
108 */
109
110 inline type *
111 get_entity_type (entity *ent) {
112   return ent->type;
113 }
114
115 inline void
116 set_entity_type (entity *ent, type *type) {
117   ent->type = type;
118 }
119
120 inline int
121 get_entity_offset (entity *ent) {
122   return ent->offset;
123 }
124
125 inline void
126 set_entity_offset (entity *ent, int offset) {
127   ent->offset = offset;
128 }
129
130 inline ir_graph *
131 get_entity_irg(entity *ent) {
132   assert (ent);
133   assert (is_method_type(ent->type));
134   return ent->irg;
135 }
136
137 inline void
138 set_entity_irg(entity *ent, ir_graph *irg) {
139   assert (ent && ent->type);
140   assert (irg);
141   assert (is_method_type(ent->type));
142   ent->irg = irg;
143 }