cprover
source_lines.cpp
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Source Lines
4 
5 Author: Mark R. Tuttle
6 
7 \*******************************************************************/
8 
11 
12 #include "source_lines.h"
13 
15 #include <util/range.h>
16 #include <util/source_location.h>
17 #include <util/string2int.h>
18 #include <util/string_utils.h>
19 
20 #include <sstream>
21 
23 {
24  if(loc.get_file().empty() || loc.is_built_in())
25  return;
26  const std::string &file = id2string(loc.get_file());
27 
28  // the function of a source location can fail to be set
29  const std::string &func = id2string(loc.get_function());
30 
31  if(loc.get_line().empty())
32  return;
33  std::size_t line = safe_string2size_t(id2string(loc.get_line()));
34 
35  block_lines[file + ":" + func].insert(line);
36 }
37 
38 std::string source_linest::to_string() const
39 {
40  std::stringstream ss;
41  const auto map =
42  make_range(block_lines).map([&](const block_linest::value_type &pair) {
43  std::vector<unsigned> line_numbers(
44  pair.second.begin(), pair.second.end());
45  return pair.first + ':' + format_number_range(line_numbers);
46  });
47  join_strings(ss, map.begin(), map.end(), "; ");
48  return ss.str();
49 }
source_locationt::get_function
const irep_idt & get_function() const
Definition: source_location.h:56
string_utils.h
file
Definition: kdev_t.h:19
source_linest::to_string
std::string to_string() const
Construct a string representing the set of lines.
Definition: source_lines.cpp:38
safe_string2size_t
std::size_t safe_string2size_t(const std::string &str, int base)
Definition: string2int.cpp:26
source_linest::insert
void insert(const source_locationt &loc)
Insert a line (a source location) into the set of lines.
Definition: source_lines.cpp:22
source_locationt::get_line
const irep_idt & get_line() const
Definition: source_location.h:46
string2int.h
id2string
const std::string & id2string(const irep_idt &d)
Definition: irep.h:44
source_lines.h
Set of source code lines contributing to a basic block.
join_strings
Stream & join_strings(Stream &&os, const It b, const It e, const Delimiter &delimiter, TransformFunc &&transform_func)
Prints items to an stream, separated by a constant delimiter.
Definition: string_utils.h:64
source_location.h
range.h
Ranges: pair of begin and end iterators, which can be initialized from containers,...
dstringt::empty
bool empty() const
Definition: dstring.h:88
format_number_range
std::string format_number_range(const std::vector< unsigned > &input_numbers)
create shorter representation for output
Definition: format_number_range.cpp:25
source_locationt
Definition: source_location.h:20
source_locationt::get_file
const irep_idt & get_file() const
Definition: source_location.h:36
source_linest::block_lines
block_linest block_lines
Definition: source_lines.h:58
source_locationt::is_built_in
static bool is_built_in(const std::string &s)
Definition: source_location.cpp:16
format_number_range.h
Format vector of numbers into a compressed range.
make_range
ranget< iteratort > make_range(iteratort begin, iteratort end)
Definition: range.h:524