CBMC
inlining_decorator.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Utility functions for code contracts.
4 
5 Author: Remi Delmas, delmasrd@amazon.com
6 
7 Date: August 2022
8 
9 \*******************************************************************/
10 
11 #ifndef CPROVER_GOTO_INSTRUMENT_CONTRACTS_INLINING_DECORATOR_H
12 #define CPROVER_GOTO_INSTRUMENT_CONTRACTS_INLINING_DECORATOR_H
13 
14 #include <util/irep.h>
15 #include <util/message.h>
16 
17 #include <regex>
18 #include <set>
19 #include <sstream>
20 
43 {
44 private:
46 
47  std::regex no_body_regex;
48  std::set<irep_idt> no_body_set;
49 
50  void match_no_body_warning(const std::string &message);
51 
53  std::set<irep_idt> missing_function_set;
54 
55  void match_missing_function_warning(const std::string &message);
56 
58  std::set<irep_idt> recursive_call_set;
59 
60  void match_recursive_call_warning(const std::string &message);
61 
63  std::set<irep_idt> not_enough_arguments_set;
64 
65  void match_not_enough_arguments_warning(const std::string &message);
66 
67  void parse_message(const std::string &message);
68 
69 public:
70  explicit inlining_decoratort(message_handlert &_wrapped);
71 
74  void throw_on_no_body(messaget &log, const int error_code);
75 
78  void throw_on_recursive_calls(messaget &log, const int error_code);
79 
82  void throw_on_missing_function(messaget &log, const int error_code);
83 
86  void throw_on_not_enough_arguments(messaget &log, const int error_code);
87 
88  const std::set<irep_idt> &get_no_body_set() const
89  {
90  return no_body_set;
91  }
92 
93  const std::set<irep_idt> &get_missing_function_set() const
94  {
95  return missing_function_set;
96  }
97 
98  const std::set<irep_idt> &get_recursive_call_set() const
99  {
100  return recursive_call_set;
101  }
102 
103  const std::set<irep_idt> &get_not_enough_arguments_set() const
104  {
106  }
107 
108  void print(unsigned level, const std::string &message) override
109  {
110  parse_message(message);
111  wrapped.print(level, message);
112  }
113 
114  void print(unsigned level, const xmlt &xml) override
115  {
116  wrapped.print(level, xml);
117  }
118 
119  void print(unsigned level, const jsont &json) override
120  {
121  wrapped.print(level, json);
122  }
123 
124  void print(unsigned level, const structured_datat &data) override
125  {
126  wrapped.print(level, data);
127  }
128 
129  void print(
130  unsigned level,
131  const std::string &message,
132  const source_locationt &location) override
133  {
134  parse_message(message);
135  wrapped.print(level, message, location);
136  return;
137  }
138 
139  void flush(unsigned i) override
140  {
141  return wrapped.flush(i);
142  }
143 
144  void set_verbosity(unsigned _verbosity)
145  {
146  wrapped.set_verbosity(_verbosity);
147  }
148 
149  unsigned get_verbosity() const
150  {
151  return wrapped.get_verbosity();
152  }
153 
154  std::size_t get_message_count(unsigned level) const
155  {
156  return wrapped.get_message_count(level);
157  }
158 
159  std::string command(unsigned i) const override
160  {
161  return wrapped.command(i);
162  }
163 };
164 
165 #endif
messaget
Class that provides messages with a built-in verbosity 'level'.
Definition: message.h:154
inlining_decoratort::get_recursive_call_set
const std::set< irep_idt > & get_recursive_call_set() const
Definition: inlining_decorator.h:98
inlining_decoratort::throw_on_no_body
void throw_on_no_body(messaget &log, const int error_code)
Throws the given error code if no body for function warnings happend during inlining.
Definition: inlining_decorator.cpp:68
inlining_decoratort::throw_on_recursive_calls
void throw_on_recursive_calls(messaget &log, const int error_code)
Throws the given error code if recursive call warnings happend during inlining.
Definition: inlining_decorator.cpp:81
message_handlert::command
virtual std::string command(unsigned) const
Create an ECMA-48 SGR (Select Graphic Rendition) command.
Definition: message.h:66
inlining_decoratort::print
void print(unsigned level, const xmlt &xml) override
Definition: inlining_decorator.h:114
inlining_decoratort::match_no_body_warning
void match_no_body_warning(const std::string &message)
Definition: inlining_decorator.cpp:25
inlining_decoratort::missing_function_set
std::set< irep_idt > missing_function_set
Definition: inlining_decorator.h:53
inlining_decoratort::print
void print(unsigned level, const jsont &json) override
Definition: inlining_decorator.h:119
inlining_decoratort::match_recursive_call_warning
void match_recursive_call_warning(const std::string &message)
Definition: inlining_decorator.cpp:42
message_handlert::get_verbosity
unsigned get_verbosity() const
Definition: message.h:54
inlining_decoratort::set_verbosity
void set_verbosity(unsigned _verbosity)
Definition: inlining_decorator.h:144
inlining_decoratort::recursive_call_set
std::set< irep_idt > recursive_call_set
Definition: inlining_decorator.h:58
jsont
Definition: json.h:26
message_handlert::print
virtual void print(unsigned level, const std::string &message)=0
Definition: message.cpp:60
inlining_decoratort::get_no_body_set
const std::set< irep_idt > & get_no_body_set() const
Definition: inlining_decorator.h:88
inlining_decoratort::not_enough_arguments_regex
std::regex not_enough_arguments_regex
Definition: inlining_decorator.h:62
inlining_decoratort::get_not_enough_arguments_set
const std::set< irep_idt > & get_not_enough_arguments_set() const
Definition: inlining_decorator.h:103
inlining_decoratort::get_message_count
std::size_t get_message_count(unsigned level) const
Definition: inlining_decorator.h:154
inlining_decoratort::print
void print(unsigned level, const std::string &message, const source_locationt &location) override
Definition: inlining_decorator.h:129
xml
xmlt xml(const irep_idt &property_id, const property_infot &property_info)
Definition: properties.cpp:110
inlining_decoratort::no_body_set
std::set< irep_idt > no_body_set
Definition: inlining_decorator.h:48
inlining_decoratort::print
void print(unsigned level, const std::string &message) override
Definition: inlining_decorator.h:108
json
static void json(json_objectT &result, const irep_idt &property_id, const property_infot &property_info)
Definition: properties.cpp:120
inlining_decoratort::not_enough_arguments_set
std::set< irep_idt > not_enough_arguments_set
Definition: inlining_decorator.h:63
inlining_decoratort::match_not_enough_arguments_warning
void match_not_enough_arguments_warning(const std::string &message)
Definition: inlining_decorator.cpp:51
message_handlert
Definition: message.h:27
inlining_decoratort::flush
void flush(unsigned i) override
Definition: inlining_decorator.h:139
inlining_decoratort::inlining_decoratort
inlining_decoratort(message_handlert &_wrapped)
Definition: inlining_decorator.cpp:13
inlining_decoratort::wrapped
message_handlert & wrapped
Definition: inlining_decorator.h:45
xmlt
Definition: xml.h:20
structured_datat
A way of representing nested key/value data.
Definition: structured_data.h:73
inlining_decoratort
Decorator for a message_handlert used during function inlining that collect names of GOTO functions c...
Definition: inlining_decorator.h:42
source_locationt
Definition: source_location.h:18
inlining_decoratort::missing_function_regex
std::regex missing_function_regex
Definition: inlining_decorator.h:52
message_handlert::set_verbosity
void set_verbosity(unsigned _verbosity)
Definition: message.h:53
inlining_decoratort::print
void print(unsigned level, const structured_datat &data) override
Definition: inlining_decorator.h:124
inlining_decoratort::throw_on_missing_function
void throw_on_missing_function(messaget &log, const int error_code)
Throws the given error code if missing function warnings happend during inlining.
Definition: inlining_decorator.cpp:96
inlining_decoratort::no_body_regex
std::regex no_body_regex
Definition: inlining_decorator.h:47
message_handlert::flush
virtual void flush(unsigned)=0
inlining_decoratort::parse_message
void parse_message(const std::string &message)
Definition: inlining_decorator.cpp:60
inlining_decoratort::match_missing_function_warning
void match_missing_function_warning(const std::string &message)
Definition: inlining_decorator.cpp:33
inlining_decoratort::throw_on_not_enough_arguments
void throw_on_not_enough_arguments(messaget &log, const int error_code)
Throws the given error code if not enough arguments warnings happend during inlining.
Definition: inlining_decorator.cpp:111
inlining_decoratort::get_missing_function_set
const std::set< irep_idt > & get_missing_function_set() const
Definition: inlining_decorator.h:93
inlining_decoratort::get_verbosity
unsigned get_verbosity() const
Definition: inlining_decorator.h:149
message.h
inlining_decoratort::command
std::string command(unsigned i) const override
Create an ECMA-48 SGR (Select Graphic Rendition) command.
Definition: inlining_decorator.h:159
message_handlert::get_message_count
std::size_t get_message_count(unsigned level) const
Definition: message.h:56
irep.h
inlining_decoratort::recursive_call_regex
std::regex recursive_call_regex
Definition: inlining_decorator.h:57