cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
name_mangler.cpp
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module: Name mangling
4
5
Author: Kareem Khazem <karkhaz@karkhaz.com>, 2019
6
7
\*******************************************************************/
8
9
#include "
name_mangler.h
"
10
11
#include <
util/get_base_name.h
>
12
13
#include <cstdint>
14
#include <iomanip>
15
#include <sstream>
16
17
irep_idt
file_name_manglert::
18
operator()
(
const
symbolt
&src,
const
std::string &extra_info)
19
{
20
std::string basename =
get_base_name
(src.
location
.
get_file
().
c_str
(),
false
);
21
22
std::stringstream ss;
23
ss <<
FILE_LOCAL_PREFIX
;
24
ss << std::regex_replace(
25
std::regex_replace(basename,
forbidden
,
"_"
),
multi_under
,
"_"
)
26
<<
"_"
;
27
28
if
(extra_info !=
""
)
29
ss << extra_info <<
"_"
;
30
ss << src.
name
;
31
return
irep_idt
(ss.str());
32
}
33
34
irep_idt
djb_manglert::
35
operator()
(
const
symbolt
&src,
const
std::string &extra_info)
36
{
37
char
const
*str = src.
location
.
get_working_directory
().
c_str
();
38
unsigned
long
hash = 5381;
39
int
c;
40
while
((c = *str++))
41
hash = ((hash << 5) + hash) + c;
42
43
uint32_t eight_nibble_hash = (uint32_t)hash;
44
45
std::stringstream ss;
46
ss <<
FILE_LOCAL_PREFIX
<< std::setfill(
'0'
) << std::setw(8) << std::hex
47
<< eight_nibble_hash <<
"_"
<< extra_info <<
"_"
<< src.
name
;
48
return
irep_idt
(ss.str());
49
}
djb_manglert::operator()
irep_idt operator()(const symbolt &, const std::string &)
Definition
name_mangler.cpp:35
dstringt::c_str
const char * c_str() const
Definition
dstring.h:116
file_name_manglert::operator()
irep_idt operator()(const symbolt &, const std::string &)
Definition
name_mangler.cpp:18
file_name_manglert::multi_under
const std::regex multi_under
Definition
name_mangler.h:158
file_name_manglert::forbidden
const std::regex forbidden
Definition
name_mangler.h:157
source_locationt::get_working_directory
const irep_idt & get_working_directory() const
Definition
source_location.h:41
source_locationt::get_file
const irep_idt & get_file() const
Definition
source_location.h:36
symbolt
Symbol table entry.
Definition
symbol.h:28
symbolt::location
source_locationt location
Source code location of definition of symbol.
Definition
symbol.h:37
symbolt::name
irep_idt name
The unique identifier.
Definition
symbol.h:40
get_base_name
std::string get_base_name(const std::string &in, bool strip_suffix)
cleans a filename from path and extension
Definition
get_base_name.cpp:16
get_base_name.h
name_mangler.h
Mangle names of file-local functions to make them unique.
FILE_LOCAL_PREFIX
#define FILE_LOCAL_PREFIX
Definition
name_mangler.h:16
irep_idt
dstringt irep_idt
Definition
verification_result.h:16
goto-programs
name_mangler.cpp
Generated by
1.17.0