@@ -19,37 +19,6 @@ Date: April 2016
19
19
#include < util/std_types.h>
20
20
#include < util/symbol_table.h>
21
21
22
- // / Looks for all the struct types in the symbol table and construct a map from
23
- // / class names to a data structure that contains lists of parent and child
24
- // / classes for each struct type (ie class).
25
- // / \param symbol_table: The symbol table to analyze
26
- void class_hierarchyt::operator ()(const symbol_tablet &symbol_table)
27
- {
28
- for (const auto &symbol_pair : symbol_table.symbols )
29
- {
30
- if (symbol_pair.second .is_type && symbol_pair.second .type .id () == ID_struct)
31
- {
32
- const struct_typet &struct_type = to_struct_type (symbol_pair.second .type );
33
-
34
- class_map[symbol_pair.first ].is_abstract =
35
- struct_type.get_bool (ID_abstract);
36
-
37
- const irept::subt &bases=
38
- struct_type.find (ID_bases).get_sub ();
39
-
40
- for (const auto &base : bases)
41
- {
42
- irep_idt parent=base.find (ID_type).get (ID_identifier);
43
- if (parent.empty ())
44
- continue ;
45
-
46
- class_map[parent].children .push_back (symbol_pair.first );
47
- class_map[symbol_pair.first ].parents .push_back (parent);
48
- }
49
- }
50
- }
51
- }
52
-
53
22
// / Populate the class hierarchy graph, such that there is a node for every
54
23
// / struct type in the symbol table and an edge representing each superclass
55
24
// / <-> subclass relationship, pointing from parent to child.
@@ -161,6 +130,36 @@ void class_hierarchyt::get_children_trans_rec(
161
130
get_children_trans_rec (child, dest);
162
131
}
163
132
133
+ // / Looks for all the struct types in the symbol table and construct a map from
134
+ // / class names to a data structure that contains lists of parent and child
135
+ // / classes for each struct type (ie class).
136
+ // / \param symbol_table: The symbol table to analyze
137
+ void class_hierarchyt::operator ()(const symbol_tablet &symbol_table)
138
+ {
139
+ for (const auto &symbol_pair : symbol_table.symbols )
140
+ {
141
+ if (symbol_pair.second .is_type && symbol_pair.second .type .id () == ID_struct)
142
+ {
143
+ const struct_typet &struct_type = to_struct_type (symbol_pair.second .type );
144
+
145
+ class_map[symbol_pair.first ].is_abstract =
146
+ struct_type.get_bool (ID_abstract);
147
+
148
+ const irept::subt &bases = struct_type.find (ID_bases).get_sub ();
149
+
150
+ for (const auto &base : bases)
151
+ {
152
+ irep_idt parent = base.find (ID_type).get (ID_identifier);
153
+ if (parent.empty ())
154
+ continue ;
155
+
156
+ class_map[parent].children .push_back (symbol_pair.first );
157
+ class_map[symbol_pair.first ].parents .push_back (parent);
158
+ }
159
+ }
160
+ }
161
+ }
162
+
164
163
// / Get all the classes that class c inherits from (directly or indirectly). The
165
164
// / first element(s) will be the immediate parents of c, though after this
166
165
// / the order is all the parents of the first immediate parent
0 commit comments