this file is replaced by Makefile.in. this much more conform
[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_kind(owner)) {
47   case k_type_class: {
48     add_class_member ((type_class *) owner, res);
49   } break;
50   case k_type_strct: {
51     add_strct_member ((type_strct *) owner, res);
52   } break;
53   case k_type_union: {
54     /* not implemented */
55   } break;
56   case k_type_method: {
57     /* not implemented */
58   } break;
59   default: ;
60   }
61
62   return res;
63 }
64
65 inline const char *
66 get_entity_name (entity *ent) {
67   assert (ent);
68   return id_to_str(get_entity_ident(ent));
69 }
70
71 ident *
72 get_entity_ident    (entity *ent) {
73   assert(ent);
74   return ent->name;
75 }
76
77 /*
78 void   set_entity_ld_name  (entity *, char *ld_name);
79 void   set_entity_ld_ident (entity *, ident *ld_ident);
80 */
81
82 inline type *
83 get_entity_owner (entity *ent) {
84   return ent->owner;
85 }
86
87 inline void
88 set_entity_owner (entity *ent, type *owner) {
89   assert_legal_owner_of_ent(owner);
90   ent->owner = owner;
91 }
92
93 inline void   /* should this go into type.c? */
94 assert_legal_owner_of_ent(type *owner) {
95   assert (owner->clss.kind   == k_type_class ||
96           owner->uni.kind    == k_type_union ||
97           owner->array.kind  == k_type_array ||
98           owner->method.kind == k_type_method );
99 }
100
101 inline ident *
102 get_entity_ld_name (entity *ent)
103 {
104   if (ent->ld_name != NULL) return ent->ld_name;
105   return mangle_entity (ent);
106 }
107
108 /*
109 char  *get_entity_ld_name  (entity *);
110 void   set_entity_ld_name  (entity *, char *ld_name);
111 void   set_entity_ld_ident (entity *, ident *ld_ident);
112 */
113
114 inline type *
115 get_entity_type (entity *ent) {
116   return ent->type;
117 }
118
119 inline void
120 set_entity_type (entity *ent, type *type) {
121   ent->type = type;
122 }
123
124 inline int
125 get_entity_offset (entity *ent) {
126   return ent->offset;
127 }
128
129 inline void
130 set_entity_offset (entity *ent, int offset) {
131   ent->offset = offset;
132 }
133
134 inline ir_graph *
135 get_entity_irg(entity *ent) {
136   assert (ent);
137   assert (get_kind(ent->type) == k_type_method);
138   return ent->irg;
139 }
140
141 inline void
142 set_entity_irg(entity *ent, ir_graph *irg) {
143   assert (ent && ent->type);
144   assert (irg);
145   assert (get_kind(ent->type) == k_type_method);
146   ent->irg = irg;
147 }