6b9ad6b08e14801c3b66790e48630f46aa024319
[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 # include <stdlib.h>
9 # include "entity_t.h"
10 # include "entity.h"
11 # include "mangle.h"
12
13 /*******************************************************************/
14 /** general                                                       **/
15 /*******************************************************************/
16
17 void
18 init_entity (void)
19 {
20 }
21
22 /*******************************************************************/
23 /** ENTITY                                                        **/
24 /*******************************************************************/
25
26 entity *
27 new_entity (type *owner, ident *name, type *type)
28 {
29   entity *res;
30
31   res = (entity *) malloc (sizeof (entity));
32   res->kind = k_entity;
33   assert_legal_owner_of_ent(owner);
34   res->owner = owner;
35   res->name = name;
36   res->type = type;
37   res->ld_name = NULL;
38
39   res->visit = 0;
40
41   switch (get_kind(owner)) {
42   case k_type_class: {
43     add_class_member ((type_class *) owner, res);
44   } break;
45   case k_type_strct: {
46     add_strct_member ((type_strct *) owner, res);
47   } break;
48   case k_type_union: {
49     /* not implemented */
50   } break;
51   case k_type_method: {
52     /* not implemented */
53   } break;
54   default: ;
55   }
56
57   return res;
58 }
59
60 inline const char *
61 get_entity_name (entity *ent) {
62   assert (ent);
63   return id_to_str(get_entity_ident(ent));
64 }
65
66 ident *
67 get_entity_ident    (entity *ent) {
68   assert(ent);
69   return ent->name;
70 }
71
72 /*
73 void   set_entity_ld_name  (entity *, char *ld_name);
74 void   set_entity_ld_ident (entity *, ident *ld_ident);
75 */
76
77 inline type *
78 get_entity_owner (entity *ent) {
79   return ent->owner;
80 }
81
82 inline void
83 set_entity_owner (entity *ent, type *owner) {
84   assert_legal_owner_of_ent(owner);
85   ent->owner = owner;
86 }
87
88 inline void   /* should this go into type.c? */
89 assert_legal_owner_of_ent(type *owner) {
90   assert (owner->clss.kind   == k_type_class ||
91           owner->uni.kind    == k_type_union ||
92           owner->array.kind  == k_type_array ||
93           owner->method.kind == k_type_method );
94 }
95
96 inline ident *
97 get_entity_ld_name (entity *ent)
98 {
99   if (ent->ld_name != NULL) return ent->ld_name;
100   return mangle_entity (ent);
101 }
102
103 /*
104 char  *get_entity_ld_name  (entity *);
105 void   set_entity_ld_name  (entity *, char *ld_name);
106 void   set_entity_ld_ident (entity *, ident *ld_ident);
107 */
108
109 inline type *
110 get_entity_type (entity *ent) {
111   return ent->type;
112 }
113
114 inline void
115 set_entity_type (entity *ent, type *type) {
116   ent->type = type;
117 }
118
119 inline ir_graph *
120 get_entity_irg(entity *ent) {
121   assert (ent);
122   assert (get_kind(ent->type) == k_type_method);
123   return ent->irg;
124 }
125
126 inline void
127 set_entity_irg(entity *ent, ir_graph *irg) {
128   assert (ent && ent->type);
129   assert (irg);
130   assert (get_kind(ent->type) == k_type_method);
131   ent->irg = irg;
132 }