Skip to content

Commit 76b93e8

Browse files
marek-trtiksmowton
authored andcommitted
Factoring out a private code from module 'remove_virtual_functions.cpp'.
1. Moved remove_virtual_functionst::get_functions to public section, 2. Passing class_hierarchyt instance to class remove_virtual_functionst instad of computing it inside, 3. Introduced collect_virtual_function_callees to API of the module, 4. Fixed CPPLINT issues.
1 parent 15d7b71 commit 76b93e8

File tree

2 files changed

+44
-11
lines changed

2 files changed

+44
-11
lines changed

src/goto-programs/remove_virtual_functions.cpp

+29-11
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ class remove_virtual_functionst
2424
{
2525
public:
2626
remove_virtual_functionst(
27-
const symbol_table_baset &_symbol_table);
27+
const symbol_table_baset &_symbol_table,
28+
const class_hierarchyt &_class_hierarchy);
2829

2930
void operator()(goto_functionst &goto_functions);
3031

@@ -36,17 +37,17 @@ class remove_virtual_functionst
3637
const dispatch_table_entriest &functions,
3738
virtual_dispatch_fallback_actiont fallback_action);
3839

40+
void get_functions(const exprt &, dispatch_table_entriest &);
41+
3942
protected:
4043
const namespacet ns;
4144
const symbol_table_baset &symbol_table;
4245

43-
class_hierarchyt class_hierarchy;
46+
const class_hierarchyt &class_hierarchy;
4447

4548
void remove_virtual_function(
4649
goto_programt &goto_program,
4750
goto_programt::targett target);
48-
49-
void get_functions(const exprt &, dispatch_table_entriest &);
5051
typedef std::function<
5152
resolve_inherited_componentt::inherited_componentt(
5253
const irep_idt &,
@@ -64,11 +65,12 @@ class remove_virtual_functionst
6465
};
6566

6667
remove_virtual_functionst::remove_virtual_functionst(
67-
const symbol_table_baset &_symbol_table):
68-
ns(_symbol_table),
69-
symbol_table(_symbol_table)
68+
const symbol_table_baset &_symbol_table,
69+
const class_hierarchyt &_class_hierarchy)
70+
: ns(_symbol_table),
71+
symbol_table(_symbol_table),
72+
class_hierarchy(_class_hierarchy)
7073
{
71-
class_hierarchy(symbol_table);
7274
}
7375

7476
void remove_virtual_functionst::remove_virtual_function(
@@ -528,7 +530,9 @@ void remove_virtual_functions(
528530
const symbol_table_baset &symbol_table,
529531
goto_functionst &goto_functions)
530532
{
531-
remove_virtual_functionst rvf(symbol_table);
533+
class_hierarchyt class_hierarchy;
534+
class_hierarchy(symbol_table);
535+
remove_virtual_functionst rvf(symbol_table, class_hierarchy);
532536
rvf(goto_functions);
533537
}
534538

@@ -540,7 +544,9 @@ void remove_virtual_functions(goto_modelt &goto_model)
540544

541545
void remove_virtual_functions(goto_model_functiont &function)
542546
{
543-
remove_virtual_functionst rvf(function.get_symbol_table());
547+
class_hierarchyt class_hierarchy;
548+
class_hierarchy(function.get_symbol_table());
549+
remove_virtual_functionst rvf(function.get_symbol_table(), class_hierarchy);
544550
bool changed = rvf.remove_virtual_functions(
545551
function.get_goto_function().body);
546552
// Give fresh location numbers to `function`, in case it has grown:
@@ -555,8 +561,20 @@ void remove_virtual_function(
555561
const dispatch_table_entriest &dispatch_table,
556562
virtual_dispatch_fallback_actiont fallback_action)
557563
{
558-
remove_virtual_functionst rvf(goto_model.symbol_table);
564+
class_hierarchyt class_hierarchy;
565+
class_hierarchy(goto_model.symbol_table);
566+
remove_virtual_functionst rvf(goto_model.symbol_table, class_hierarchy);
559567

560568
rvf.remove_virtual_function(
561569
goto_program, instruction, dispatch_table, fallback_action);
562570
}
571+
572+
void collect_virtual_function_callees(
573+
const exprt &function,
574+
const symbol_table_baset &symbol_table,
575+
const class_hierarchyt &class_hierarchy,
576+
dispatch_table_entriest &overridden_functions)
577+
{
578+
remove_virtual_functionst instance(symbol_table, class_hierarchy);
579+
instance.get_functions(function, overridden_functions);
580+
}

src/goto-programs/remove_virtual_functions.h

+15
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Date: April 2016
1515
#define CPROVER_GOTO_PROGRAMS_REMOVE_VIRTUAL_FUNCTIONS_H
1616

1717
#include "goto_model.h"
18+
#include "class_hierarchy.h"
1819

1920
// remove virtual function calls
2021
// and replace by case-split
@@ -65,4 +66,18 @@ void remove_virtual_function(
6566
const dispatch_table_entriest &dispatch_table,
6667
virtual_dispatch_fallback_actiont fallback_action);
6768

69+
/// Given a function expression representing a virtual method of a class,
70+
/// the function computes all overridden methods of that virtual method.
71+
/// \param function: The virtual function expression for which the overridden
72+
/// methods will be searched for.
73+
/// \param symbol_table: A symbol table.
74+
/// \param class_hierarchy: A class hierarchy.
75+
/// \param [out] overridden_functions: Output collection into which all
76+
/// overridden functions will be stored.
77+
void collect_virtual_function_callees(
78+
const exprt &function,
79+
const symbol_tablet &symbol_table,
80+
const class_hierarchyt &class_hierarchy,
81+
dispatch_table_entriest &overridden_functions);
82+
6883
#endif // CPROVER_GOTO_PROGRAMS_REMOVE_VIRTUAL_FUNCTIONS_H

0 commit comments

Comments
 (0)