1 /* $Id: cs_entity.c,v 1.4 1994/06/24 10:22:15 ceriel Exp $ */
3 * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
4 * See the copyright notice in the ACK home directory, in the file "Copyright".
6 /* F U N C T I O N S F O R A C C E S S I N G T H E S E T
11 #include "../share/types.h"
12 #include "../share/global.h"
13 #include "../share/lset.h"
14 #include "../share/debug.h"
19 lset entities; /* Our pseudo symbol-table. */
21 entity_p find_entity(vn)
24 /* Try to find the entity with valuenumber vn. */
28 for (i = Lfirst(entities); i != (Lindex) 0; i = Lnext(i, entities)) {
29 if (en_elem(i)->en_vn == vn)
36 STATIC bool same_entity(enp1, enp2)
39 if (enp1->en_kind != enp2->en_kind) return FALSE;
40 if (enp1->en_size != enp2->en_size) return FALSE;
41 if (enp1->en_size == UNKNOWN_SIZE) return FALSE;
43 switch (enp1->en_kind) {
45 return enp1->en_val == enp2->en_val;
48 return enp1->en_loc == enp2->en_loc;
51 return enp1->en_ext == enp2->en_ext;
53 return enp1->en_ind == enp2->en_ind;
56 return enp1->en_base == enp2->en_base &&
57 enp1->en_off == enp2->en_off;
60 return enp1->en_levels == enp2->en_levels;
62 return enp1->en_pro == enp2->en_pro;
64 return enp1->en_arbase == enp2->en_arbase &&
65 enp1->en_index == enp2->en_index &&
66 enp1->en_adesc == enp2->en_adesc;
72 STATIC copy_entity(src, dst)
75 dst->en_static = src->en_static;
76 dst->en_kind = src->en_kind;
77 dst->en_size = src->en_size;
79 switch (src->en_kind) {
81 dst->en_val = src->en_val;
85 dst->en_loc = src->en_loc;
89 dst->en_ext = src->en_ext;
92 dst->en_ind = src->en_ind;
96 dst->en_base = src->en_base;
97 dst->en_off = src->en_off;
101 dst->en_levels = src->en_levels;
104 dst->en_pro = src->en_pro;
107 dst->en_arbase = src->en_arbase;
108 dst->en_index = src->en_index;
109 dst->en_adesc = src->en_adesc;
114 entity_p en_enter(enp)
115 register entity_p enp;
117 /* Put the entity in enp in the entity set, if it is not already there.
118 * Return pointer to stored entity.
121 register entity_p new;
123 for (i = Lfirst(entities); i != (Lindex) 0; i = Lnext(i, entities)) {
124 if (same_entity(en_elem(i), enp))
129 new->en_vn = newvalnum();
130 copy_entity(enp, new);
131 Ladd(new, &entities);
138 /* Throw away all pseudo-symboltable information. */
142 for (i = Lfirst(entities); i != (Lindex) 0; i = Lnext(i, entities)) {
143 oldentity(en_elem(i));
145 Ldeleteset(entities);
146 entities = Lempty_set();