CBMC
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
message.cpp
Go to the documentation of this file.
1/*******************************************************************\
2
3Module:
4
5Author: Daniel Kroening, kroening@kroening.com
6
7\*******************************************************************/
8
9
10#include "message.h"
11
12#include "json.h"
13#include "string2int.h"
14#include "structured_data.h"
15
17 unsigned level,
18 const std::string &message,
19 const source_locationt &location)
20{
21 std::string dest;
22
23 const irep_idt &file=location.get_file();
24 const irep_idt &line=location.get_line();
25 const irep_idt &column=location.get_column();
26 const irep_idt &function=location.get_function();
27
28 if(!file.empty())
29 {
30 if(!dest.empty())
31 dest+=' ';
32 dest+="file "+id2string(file);
33 }
34 if(!line.empty())
35 {
36 if(!dest.empty())
37 dest+=' ';
38 dest+="line "+id2string(line);
39 }
40 if(!column.empty())
41 {
42 if(!dest.empty())
43 dest+=' ';
44 dest+="column "+id2string(column);
45 }
46 if(!function.empty())
47 {
48 if(!dest.empty())
49 dest+=' ';
50 dest+="function "+id2string(function);
51 }
52
53 if(!dest.empty())
54 dest+=": ";
55 dest+=message;
56
57 print(level, dest);
58}
59
61 unsigned level,
62 const std::string &)
63{
64 if(level>=message_count.size())
65 message_count.resize(level+1, 0);
66 ++message_count[level];
67}
68void message_handlert::print(unsigned level, const structured_datat &data)
69{
70 // default to just printing out the data in a format
71 print(level, to_pretty(data));
72}
73
77
78// Visual studio requires this (empty) static object
80
98
106 const std::string &user_input,
108 message_handlert &dest)
109{
110 unsigned v = default_verbosity;
111
112 if(!user_input.empty())
113 {
115
116 if(v > messaget::M_DEBUG)
117 {
118 dest.print(
120 "verbosity value " + user_input + " out of range, using debug-level (" +
121 std::to_string(messaget::M_DEBUG) + ") verbosity",
123
125 }
126 }
127
128 dest.set_verbosity(v);
129
130 return v;
131}
132
141 const std::function<void(mstreamt &)> &output_generator) const
142{
143 if(
145 message_handler->get_verbosity() >= message_stream.message_level)
146 {
148 }
149}
150
152{
153 if(this->tellp() > 0)
154 *this << eom; // force end of previous message
156 {
158 }
159 return *this;
160}
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
Definition ai.h:562
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition dstring.h:38
bool empty() const
Definition dstring.h:89
void set_verbosity(unsigned _verbosity)
Definition message.h:52
virtual void print(unsigned level, const std::string &message)=0
Definition message.cpp:60
std::vector< std::size_t > message_count
Definition message.h:72
unsigned get_verbosity() const
Definition message.h:53
messaget & message
Definition message.h:238
unsigned message_level
Definition message.h:237
mstreamt & operator<<(const xmlt &data)
Definition message.h:241
static const commandt yellow
render text with yellow foreground color
Definition message.h:344
static const commandt bright_magenta
render text with bright magenta foreground color
Definition message.h:368
static unsigned eval_verbosity(const std::string &user_input, const message_levelt default_verbosity, message_handlert &dest)
Parse a (user-)provided string as a verbosity level and set it as the verbosity of dest.
Definition message.cpp:105
message_handlert * message_handler
Definition message.h:431
static const commandt magenta
render text with magenta foreground color
Definition message.h:350
static const commandt reset
return to default formatting, as defined by the terminal
Definition message.h:335
static const commandt green
render text with green foreground color
Definition message.h:341
static const commandt faint
render text with faint font
Definition message.h:377
static const commandt bold
render text with bold font
Definition message.h:374
static const commandt bright_red
render text with bright red foreground color
Definition message.h:356
static const commandt underline
render underlined text
Definition message.h:383
void conditional_output(mstreamt &mstream, const std::function< void(mstreamt &)> &output_generator) const
Generate output to message_stream using output_generator if the configured verbosity is at least as h...
Definition message.cpp:139
static const commandt bright_cyan
render text with bright cyan foreground color
Definition message.h:371
static const commandt bright_yellow
render text with bright yellow foreground color
Definition message.h:362
virtual ~messaget()
Definition message.cpp:74
message_levelt
Definition message.h:168
@ M_DEBUG
Definition message.h:170
@ M_WARNING
Definition message.h:169
static const commandt bright_blue
render text with bright blue foreground color
Definition message.h:365
static const commandt italic
render italic text
Definition message.h:380
static const commandt red
render text with red foreground color
Definition message.h:338
mstreamt mstream
Definition message.h:432
static eomt eom
Definition message.h:289
static const commandt cyan
render text with cyan foreground color
Definition message.h:353
static const commandt bright_green
render text with bright green foreground color
Definition message.h:359
static const commandt blue
render text with blue foreground color
Definition message.h:347
const irep_idt & get_column() const
const irep_idt & get_function() const
const irep_idt & get_file() const
const irep_idt & get_line() const
A way of representing nested key/value data.
const std::string & id2string(const irep_idt &d)
Definition irep.h:44
unsigned unsafe_string2unsigned(const std::string &str, int base)
std::string to_pretty(const structured_datat &data)
Convert the structured_data into plain text.