Skip to content

Commit 0df68fa

Browse files
committed
Move non-graph function below graph functions
This way everything related to class_hierarchy_grapht appears first in the file, followed by everything related to class_hierarchyt. Ideally these parts should be split into different files in the future.
1 parent 49429eb commit 0df68fa

File tree

1 file changed

+30
-31
lines changed

1 file changed

+30
-31
lines changed

src/goto-programs/class_hierarchy.cpp

+30-31
Original file line numberDiff line numberDiff line change
@@ -19,37 +19,6 @@ Date: April 2016
1919
#include <util/std_types.h>
2020
#include <util/symbol_table.h>
2121

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-
5322
/// Populate the class hierarchy graph, such that there is a node for every
5423
/// struct type in the symbol table and an edge representing each superclass
5524
/// <-> subclass relationship, pointing from parent to child.
@@ -161,6 +130,36 @@ void class_hierarchyt::get_children_trans_rec(
161130
get_children_trans_rec(child, dest);
162131
}
163132

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+
164163
/// Get all the classes that class c inherits from (directly or indirectly). The
165164
/// first element(s) will be the immediate parents of c, though after this
166165
/// the order is all the parents of the first immediate parent

0 commit comments

Comments
 (0)