CBMC
java_string_library_preprocess.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Produce code for simple implementation of String Java libraries
4 
5 Author: Romain Brenguier
6 
7 Date: March 2017
8 
9 \*******************************************************************/
10 
13 
14 #ifndef CPROVER_JAVA_BYTECODE_JAVA_STRING_LIBRARY_PREPROCESS_H
15 #define CPROVER_JAVA_BYTECODE_JAVA_STRING_LIBRARY_PREPROCESS_H
16 
17 #include <util/std_code.h>
18 #include <util/symbol_table.h>
20 #include <util/string_expr.h>
21 
22 #include <util/ieee_float.h> // should get rid of this
23 #include <util/optional.h>
24 
25 #include <array>
26 #include <unordered_set>
27 #include <functional>
29 #include "java_types.h"
30 
31 class message_handlert;
32 
33 // Arbitrary limit of 10 arguments for the number of arguments to String.format
34 #define MAX_FORMAT_ARGS 10
35 
37 {
38 public:
43  {
44  }
45 
48 
49  bool implements_function(const irep_idt &function_id) const;
50  void get_all_function_names(std::unordered_set<irep_idt> &methods) const;
51 
53  const symbolt &symbol,
54  symbol_table_baset &symbol_table,
55  message_handlert &message_handler);
56 
58  {
60  }
61  std::vector<irep_idt> get_string_type_base_classes(
62  const irep_idt &class_name);
63  void add_string_type(const irep_idt &class_name, symbol_tablet &symbol_table);
64  bool is_known_string_type(irep_idt class_name);
65 
67  {
72  }
73  static bool implements_java_char_sequence(const typet &type)
74  {
75  return is_java_char_sequence_type(type)
78  || is_java_string_type(type);
79  }
80 
81 private:
82  // We forbid copies of the object
84  const java_string_library_preprocesst &)=delete;
85 
86  static bool java_type_matches_tag(const typet &type, const std::string &tag);
87  static bool is_java_string_pointer_type(const typet &type);
88  static bool is_java_string_type(const typet &type);
89  static bool is_java_string_builder_type(const typet &type);
90  static bool is_java_string_builder_pointer_type(const typet &type);
91  static bool is_java_string_buffer_type(const typet &type);
92  static bool is_java_string_buffer_pointer_type(const typet &type);
93  static bool is_java_char_sequence_type(const typet &type);
94  static bool is_java_char_sequence_pointer_type(const typet &type);
95  static bool is_java_char_array_type(const typet &type);
96  static bool is_java_char_array_pointer_type(const typet &type);
97 
99 
103 
104  typedef std::function<codet(
105  const java_method_typet &,
106  const source_locationt &,
107  const irep_idt &,
109  message_handlert &)>
111 
112  typedef std::unordered_map<irep_idt, irep_idt> id_mapt;
113 
114  // Table mapping each java method signature to the code generating function
115  std::unordered_map<irep_idt, conversion_functiont> conversion_table;
116 
117  // Some Java functions have an equivalent in the solver that we will
118  // call with the same argument and will return the same result
120 
121  // Some Java functions have an equivalent except that they should
122  // return Java Strings instead of string_exprt
124 
125  // Some Java initialization function initialize strings with the
126  // same result as some function of the solver
128 
129  // Some Java functions have an equivalent in the solver except that
130  // in addition they assign the result to the object on which it is called
132 
133  // Some Java functions have an equivalent in the solver except that
134  // they assign the result to the object on which it is called instead
135  // of returning it
137 
138  const std::array<id_mapt *, 5> id_maps = std::array<id_mapt *, 5>
139  {
140  {
146  }
147  };
148 
149  // A set tells us what java types should be considered as string objects
150  std::unordered_set<irep_idt> string_types;
151 
153  const java_method_typet &type,
154  const source_locationt &loc,
155  const irep_idt &function_id,
156  symbol_table_baset &symbol_table,
157  message_handlert &message_handler);
158 
160  const java_method_typet &type,
161  const source_locationt &loc,
162  const irep_idt &function_id,
163  symbol_table_baset &symbol_table,
164  message_handlert &message_handler);
165 
167  const java_method_typet &type,
168  const source_locationt &loc,
169  const irep_idt &function_id,
170  symbol_table_baset &symbol_table,
171  message_handlert &message_handler);
172 
174  const java_method_typet &type,
175  const source_locationt &loc,
176  const irep_idt &function_id,
177  symbol_table_baset &symbol_table,
178  message_handlert &message_handler);
179 
181  const java_method_typet &type,
182  const source_locationt &loc,
183  const irep_idt &function_id,
184  symbol_table_baset &symbol_table,
185  message_handlert &message_handler);
186 
187  // Helper functions
189  const java_method_typet::parameterst &params,
190  const source_locationt &loc,
191  const irep_idt &function_name,
192  symbol_table_baset &symbol_table,
193  code_blockt &init_code);
194 
195  // Friending this function for unit testing convert_exprt_to_string_exprt
198  const exprt &deref,
199  const source_locationt &loc,
200  const irep_idt &function_id,
201  symbol_tablet &symbol_table,
202  code_blockt &init_code);
203 
205  const exprt &deref,
206  const source_locationt &loc,
207  symbol_table_baset &symbol_table,
208  const irep_idt &function_name,
209  code_blockt &init_code);
210 
212  const exprt::operandst &operands,
213  const source_locationt &loc,
214  const irep_idt &function_name,
215  symbol_table_baset &symbol_table,
216  code_blockt &init_code);
217 
219  const exprt &array_pointer,
220  const source_locationt &loc,
221  const irep_idt &function_name,
222  symbol_table_baset &symbol_table,
223  code_blockt &code);
224 
226  const typet &type,
227  const source_locationt &loc,
228  const irep_idt &function_id,
229  symbol_table_baset &symbol_table);
230 
232  const source_locationt &loc,
233  const irep_idt &function_id,
234  symbol_table_baset &symbol_table,
235  code_blockt &code);
236 
238  const source_locationt &loc,
239  const irep_idt &function_id,
240  symbol_table_baset &symbol_table,
241  code_blockt &code);
242 
244  const typet &type,
245  const source_locationt &loc,
246  const irep_idt &function_id,
247  symbol_table_baset &symbol_table,
248  code_blockt &code);
249 
251  const irep_idt &function_id,
252  const exprt::operandst &arguments,
253  const typet &type,
254  symbol_table_baset &symbol_table);
255 
257  const irep_idt &function_id,
258  const exprt::operandst &arguments,
259  const source_locationt &loc,
260  symbol_table_baset &symbol_table,
261  code_blockt &code);
262 
264  const exprt &lhs,
265  const exprt &rhs_array,
266  const exprt &rhs_length,
267  const symbol_table_baset &symbol_table,
268  bool is_constructor);
269 
271  const exprt &lhs,
272  const refined_string_exprt &rhs,
273  const symbol_table_baset &symbol_table,
274  bool is_constructor);
275 
277  const refined_string_exprt &lhs,
278  const exprt &rhs,
279  const source_locationt &loc,
280  const symbol_table_baset &symbol_table,
281  code_blockt &code);
282 
284  const std::string &s,
285  const source_locationt &loc,
286  symbol_table_baset &symbol_table,
287  code_blockt &code);
288 
290  const irep_idt &function_id,
291  const java_method_typet &type,
292  const source_locationt &loc,
293  symbol_table_baset &symbol_table);
294 
296  const irep_idt &function_id,
297  const java_method_typet &type,
298  const source_locationt &loc,
299  symbol_table_baset &symbol_table,
300  bool is_constructor = true);
301 
303  const irep_idt &function_id,
304  const java_method_typet &type,
305  const source_locationt &loc,
306  symbol_table_baset &symbol_table);
307 
309  const irep_idt &function_id,
310  const java_method_typet &type,
311  const source_locationt &loc,
312  symbol_table_baset &symbol_table);
313 
315  const irep_idt &function_id,
316  const java_method_typet &type,
317  const source_locationt &loc,
318  symbol_table_baset &symbol_table);
319 };
320 
322  symbol_table_baset &symbol_table,
323  const source_locationt &loc,
324  const irep_idt &function_id,
325  code_blockt &code);
326 
328  const exprt &pointer,
329  const exprt &array,
330  symbol_table_baset &symbol_table,
331  const source_locationt &loc,
332  const irep_idt &function_id,
333  code_blockt &code);
334 
336  const exprt &array,
337  const exprt &length,
338  symbol_table_baset &symbol_table,
339  const source_locationt &loc,
340  const irep_idt &function_id,
341  code_blockt &code);
342 
344  const exprt &pointer,
345  const exprt &length,
346  const irep_idt &char_range,
347  symbol_table_baset &symbol_table,
348  const source_locationt &loc,
349  const irep_idt &function_id,
350  code_blockt &code);
351 
352 #endif // CPROVER_JAVA_BYTECODE_JAVA_STRING_LIBRARY_PREPROCESS_H
java_string_library_preprocesst::convert_exprt_to_string_exprt
refined_string_exprt convert_exprt_to_string_exprt(const exprt &deref, const source_locationt &loc, symbol_table_baset &symbol_table, const irep_idt &function_name, code_blockt &init_code)
Creates a string_exprt from the input exprt representing a char sequence.
Definition: java_string_library_preprocess.cpp:308
java_string_library_preprocesst::replace_char_array
refined_string_exprt replace_char_array(const exprt &array_pointer, const source_locationt &loc, const irep_idt &function_name, symbol_table_baset &symbol_table, code_blockt &code)
we declare a new cprover_string whose contents is deduced from the char array.
Definition: java_string_library_preprocess.cpp:429
java_string_library_preprocesst::char_type
const typet char_type
Definition: java_string_library_preprocess.h:100
java_string_library_preprocesst::process_parameters
exprt::operandst process_parameters(const java_method_typet::parameterst &params, const source_locationt &loc, const irep_idt &function_name, symbol_table_baset &symbol_table, code_blockt &init_code)
calls string_refine_preprocesst::process_operands with a list of parameters.
Definition: java_string_library_preprocess.cpp:279
dstringt
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition: dstring.h:36
java_string_library_preprocesst::make_copy_string_code
code_blockt make_copy_string_code(const java_method_typet &type, const source_locationt &loc, const irep_idt &function_id, symbol_table_baset &symbol_table, message_handlert &message_handler)
Generates code for a function which copies a string object to a new string object.
Definition: java_string_library_preprocess.cpp:1302
java_string_library_preprocesst::id_mapt
std::unordered_map< irep_idt, irep_idt > id_mapt
Definition: java_string_library_preprocess.h:112
java_string_library_preprocesst::cprover_equivalent_to_java_assign_and_return_function
id_mapt cprover_equivalent_to_java_assign_and_return_function
Definition: java_string_library_preprocess.h:131
code_blockt
A codet representing sequential composition of program statements.
Definition: std_code.h:129
java_string_library_preprocesst::conversion_functiont
std::function< codet(const java_method_typet &, const source_locationt &, const irep_idt &, symbol_table_baset &, message_handlert &)> conversion_functiont
Definition: java_string_library_preprocess.h:110
java_string_library_preprocesst::code_for_function
codet code_for_function(const symbolt &symbol, symbol_table_baset &symbol_table, message_handlert &message_handler)
Should be called to provide code for string functions that are used in the code but for which no impl...
Definition: java_string_library_preprocess.cpp:1458
symbol_tablet
The symbol table.
Definition: symbol_table.h:13
java_string_library_preprocesst::make_copy_constructor_code
code_blockt make_copy_constructor_code(const java_method_typet &type, const source_locationt &loc, const irep_idt &function_id, symbol_table_baset &symbol_table, message_handlert &message_handler)
Generates code for a constructor of a string object from another string object.
Definition: java_string_library_preprocess.cpp:1352
java_string_library_preprocesst::java_string_library_preprocesst
java_string_library_preprocesst()
Definition: java_string_library_preprocess.h:39
java_string_library_preprocesst::index_type
const typet index_type
Definition: java_string_library_preprocess.h:101
java_string_library_preprocesst::make_string_returning_function_from_call
code_blockt make_string_returning_function_from_call(const irep_idt &function_id, const java_method_typet &type, const source_locationt &loc, symbol_table_baset &symbol_table)
Provide code for a function that calls a function from the solver and return the string_expr result a...
Definition: java_string_library_preprocess.cpp:1257
character_refine_preprocess.h
typet
The type of an expression, extends irept.
Definition: type.h:28
make_nondet_infinite_char_array
exprt make_nondet_infinite_char_array(symbol_table_baset &symbol_table, const source_locationt &loc, const irep_idt &function_id, code_blockt &code)
Declare a fresh symbol of type array of character with infinite size.
Definition: java_string_library_preprocess.cpp:613
code_typet::parameterst
std::vector< parametert > parameterst
Definition: std_types.h:541
optional.h
java_string_library_preprocesst::string_expr_of_function
refined_string_exprt string_expr_of_function(const irep_idt &function_id, const exprt::operandst &arguments, const source_locationt &loc, symbol_table_baset &symbol_table, code_blockt &code)
Create a refined_string_exprt str whose content and length are fresh symbols, calls the string primit...
Definition: java_string_library_preprocess.cpp:748
character_refine_preprocesst
Definition: character_refine_preprocess.h:30
refined_string_typet
Definition: refined_string_type.h:26
java_string_library_preprocesst::cprover_equivalent_to_java_function
id_mapt cprover_equivalent_to_java_function
Definition: java_string_library_preprocess.h:119
java_string_library_preprocesst::cprover_equivalent_to_java_string_returning_function
id_mapt cprover_equivalent_to_java_string_returning_function
Definition: java_string_library_preprocess.h:123
java_string_library_preprocesst::make_assign_and_return_function_from_call
code_blockt make_assign_and_return_function_from_call(const irep_idt &function_id, const java_method_typet &type, const source_locationt &loc, symbol_table_baset &symbol_table)
Call a cprover internal function, assign the result to object this and return it.
Definition: java_string_library_preprocess.cpp:1118
java_string_library_preprocesst::cprover_equivalent_to_java_constructor
id_mapt cprover_equivalent_to_java_constructor
Definition: java_string_library_preprocess.h:127
java_string_library_preprocesst::decl_string_expr
refined_string_exprt decl_string_expr(const source_locationt &loc, const irep_idt &function_id, symbol_table_baset &symbol_table, code_blockt &code)
Add declaration of a refined string expr whose content and length are fresh symbols.
Definition: java_string_library_preprocess.cpp:485
exprt
Base class for all expressions.
Definition: expr.h:55
java_string_library_preprocesst::implements_function
bool implements_function(const irep_idt &function_id) const
Definition: java_string_library_preprocess.cpp:1418
java_string_library_preprocesst::make_assign_function_from_call
code_blockt make_assign_function_from_call(const irep_idt &function_id, const java_method_typet &type, const source_locationt &loc, symbol_table_baset &symbol_table)
Call a cprover internal function and assign the result to object this.
Definition: java_string_library_preprocess.cpp:1143
java_string_library_preprocesst::make_init_function_from_call
code_blockt make_init_function_from_call(const irep_idt &function_id, const java_method_typet &type, const source_locationt &loc, symbol_table_baset &symbol_table, bool is_constructor=true)
Generate the goto code for string initialization.
Definition: java_string_library_preprocess.cpp:1074
java_string_library_preprocesst::initialize_known_type_table
void initialize_known_type_table()
Definition: java_string_library_preprocess.cpp:1507
java_string_library_preprocesst::process_operands
exprt::operandst process_operands(const exprt::operandst &operands, const source_locationt &loc, const irep_idt &function_name, symbol_table_baset &symbol_table, code_blockt &init_code)
for each expression that is of a type implementing strings, we declare a new cprover_string whose con...
Definition: java_string_library_preprocess.cpp:336
java_string_library_preprocesst::is_java_char_sequence_pointer_type
static bool is_java_char_sequence_pointer_type(const typet &type)
Definition: java_string_library_preprocess.cpp:138
symbol_exprt
Expression to hold a symbol (variable)
Definition: std_expr.h:112
java_string_library_preprocesst::code_assign_java_string_to_string_expr
void code_assign_java_string_to_string_expr(const refined_string_exprt &lhs, const exprt &rhs, const source_locationt &loc, const symbol_table_baset &symbol_table, code_blockt &code)
Definition: java_string_library_preprocess.cpp:856
java_string_library_preprocesst::is_java_string_builder_type
static bool is_java_string_builder_type(const typet &type)
Definition: java_string_library_preprocess.cpp:83
java_string_library_preprocesst::get_string_type_base_classes
std::vector< irep_idt > get_string_type_base_classes(const irep_idt &class_name)
Gets the base classes for known String and String-related types, or returns an empty list for other t...
Definition: java_string_library_preprocess.cpp:184
refined_string_exprt
Definition: string_expr.h:108
java_string_library_preprocesst::string_literal_to_string_expr
refined_string_exprt string_literal_to_string_expr(const std::string &s, const source_locationt &loc, symbol_table_baset &symbol_table, code_blockt &code)
Create a string expression whose value is given by a literal.
Definition: java_string_library_preprocess.cpp:893
java_string_library_preprocesst::add_string_type
void add_string_type(const irep_idt &class_name, symbol_tablet &symbol_table)
Add to the symbol table type declaration for a String-like Java class.
Definition: java_string_library_preprocess.cpp:217
code_function_callt
goto_instruction_codet representation of a function call statement.
Definition: goto_instruction_code.h:271
add_character_set_constraint
void add_character_set_constraint(const exprt &pointer, const exprt &length, const irep_idt &char_range, symbol_table_baset &symbol_table, const source_locationt &loc, const irep_idt &function_id, code_blockt &code)
Add a call to a primitive of the string solver which ensures all characters belong to the character s...
Definition: java_string_library_preprocess.cpp:708
java_string_library_preprocesst::conversion_table
std::unordered_map< irep_idt, conversion_functiont > conversion_table
Definition: java_string_library_preprocess.h:115
java_string_library_preprocesst::make_float_to_string_code
code_blockt make_float_to_string_code(const java_method_typet &type, const source_locationt &loc, const irep_idt &function_id, symbol_table_baset &symbol_table, message_handlert &message_handler)
Provide code for the String.valueOf(F) function.
Definition: java_string_library_preprocess.cpp:914
java_string_library_preprocesst::make_string_length_code
code_returnt make_string_length_code(const java_method_typet &type, const source_locationt &loc, const irep_idt &function_id, symbol_table_baset &symbol_table, message_handlert &message_handler)
Generates code for the String.length method.
Definition: java_string_library_preprocess.cpp:1397
java_string_library_preprocesst::make_function_from_call
code_blockt make_function_from_call(const irep_idt &function_id, const java_method_typet &type, const source_locationt &loc, symbol_table_baset &symbol_table)
Provide code for a function that calls a function from the solver and simply returns it.
Definition: java_string_library_preprocess.cpp:1227
symbol_table_baset
The symbol table base class interface.
Definition: symbol_table_base.h:21
java_string_library_preprocesst::get_all_function_names
void get_all_function_names(std::unordered_set< irep_idt > &methods) const
Definition: java_string_library_preprocess.cpp:1442
java_string_library_preprocesst::is_java_char_array_type
static bool is_java_char_array_type(const typet &type)
Definition: java_string_library_preprocess.cpp:152
java_string_library_preprocesst::replace_character_call
codet replace_character_call(code_function_callt call)
Definition: java_string_library_preprocess.h:57
java_string_library_preprocesst::make_nondet_string_expr
refined_string_exprt make_nondet_string_expr(const source_locationt &loc, const irep_idt &function_id, symbol_table_baset &symbol_table, code_blockt &code)
add symbols with prefix cprover_string_length and cprover_string_data and construct a string_expr fro...
Definition: java_string_library_preprocess.cpp:510
pointer_type
pointer_typet pointer_type(const typet &subtype)
Definition: c_types.cpp:253
java_string_library_preprocesst::cprover_equivalent_to_java_assign_function
id_mapt cprover_equivalent_to_java_assign_function
Definition: java_string_library_preprocess.h:136
java_string_library_preprocesst::implements_java_char_sequence
static bool implements_java_char_sequence(const typet &type)
Definition: java_string_library_preprocess.h:73
java_string_library_preprocesst::is_java_char_sequence_type
static bool is_java_char_sequence_type(const typet &type)
Definition: java_string_library_preprocess.cpp:129
message_handlert
Definition: message.h:27
exprt::operandst
std::vector< exprt > operandst
Definition: expr.h:58
java_int_type
signedbv_typet java_int_type()
Definition: java_types.cpp:31
std_code.h
java_string_library_preprocesst::java_type_matches_tag
static bool java_type_matches_tag(const typet &type, const std::string &tag)
Definition: java_string_library_preprocess.cpp:53
java_string_library_preprocesst::character_preprocess
character_refine_preprocesst character_preprocess
Definition: java_string_library_preprocess.h:98
add_array_to_length_association
void add_array_to_length_association(const exprt &array, const exprt &length, symbol_table_baset &symbol_table, const source_locationt &loc, const irep_idt &function_id, code_blockt &code)
Add a call to a primitive of the string solver, letting it know that the actual length of array is le...
Definition: java_string_library_preprocess.cpp:676
source_locationt
Definition: source_location.h:18
java_string_library_preprocesst::is_java_char_array_pointer_type
static bool is_java_char_array_pointer_type(const typet &type)
Definition: java_string_library_preprocess.cpp:161
java_string_library_preprocesst::is_java_string_buffer_type
static bool is_java_string_buffer_type(const typet &type)
Definition: java_string_library_preprocess.cpp:106
java_string_library_preprocesst::make_class_identifier_code
code_blockt make_class_identifier_code(const java_method_typet &type, const source_locationt &loc, const irep_idt &function_id, symbol_table_baset &symbol_table, message_handlert &message_handler)
Used to provide our own implementation of the CProver.classIdentifier() function.
Definition: java_string_library_preprocess.cpp:1167
code_returnt
goto_instruction_codet representation of a "return from a function" statement.
Definition: goto_instruction_code.h:494
add_pointer_to_array_association
void add_pointer_to_array_association(const exprt &pointer, const exprt &array, symbol_table_baset &symbol_table, const source_locationt &loc, const irep_idt &function_id, code_blockt &code)
Add a call to a primitive of the string solver, letting it know that pointer points to the first char...
Definition: java_string_library_preprocess.cpp:645
refined_string_type.h
java_string_library_preprocesst::refined_string_type
const refined_string_typet refined_string_type
Definition: java_string_library_preprocess.h:102
java_string_library_preprocesst::code_assign_components_to_java_string
codet code_assign_components_to_java_string(const exprt &lhs, const exprt &rhs_array, const exprt &rhs_length, const symbol_table_baset &symbol_table, bool is_constructor)
Produce code for an assignment of a string expr to a Java string.
Definition: java_string_library_preprocess.cpp:795
java_string_library_preprocesst::is_java_string_buffer_pointer_type
static bool is_java_string_buffer_pointer_type(const typet &type)
Definition: java_string_library_preprocess.cpp:115
java_string_library_preprocesst::id_maps
const std::array< id_mapt *, 5 > id_maps
Definition: java_string_library_preprocess.h:138
java_string_library_preprocesst::implements_java_char_sequence_pointer
static bool implements_java_char_sequence_pointer(const typet &type)
Definition: java_string_library_preprocess.h:66
symbolt
Symbol table entry.
Definition: symbol.h:27
ieee_float.h
java_string_library_preprocesst::convert_exprt_to_string_exprt_unit_test
friend refined_string_exprt convert_exprt_to_string_exprt_unit_test(java_string_library_preprocesst &preprocess, const exprt &deref, const source_locationt &loc, const irep_idt &function_id, symbol_tablet &symbol_table, code_blockt &init_code)
java_char_type
unsignedbv_typet java_char_type()
Definition: java_types.cpp:61
java_string_library_preprocesst
Definition: java_string_library_preprocess.h:36
java_string_library_preprocesst::is_known_string_type
bool is_known_string_type(irep_idt class_name)
Check whether a class name is known as a string type.
Definition: java_string_library_preprocess.cpp:1501
java_string_library_preprocesst::allocate_fresh_string
exprt allocate_fresh_string(const typet &type, const source_locationt &loc, const irep_idt &function_id, symbol_table_baset &symbol_table, code_blockt &code)
declare a new String and allocate it
Definition: java_string_library_preprocess.cpp:547
preprocess
static std::string preprocess(const std::string &source_file, const c_wranglert &c_wrangler)
Definition: c_wrangler.cpp:321
java_string_library_preprocesst::initialize_conversion_table
void initialize_conversion_table()
fill maps with correspondence from java method names to conversion functions
Definition: java_string_library_preprocess.cpp:1516
java_string_library_preprocesst::fresh_string
symbol_exprt fresh_string(const typet &type, const source_locationt &loc, const irep_idt &function_id, symbol_table_baset &symbol_table)
add a symbol with static lifetime and name containing cprover_string and given type
Definition: java_string_library_preprocess.cpp:466
java_types.h
symbol_table.h
Author: Diffblue Ltd.
is_constructor
static bool is_constructor(const irep_idt &method_name)
Definition: java_bytecode_convert_method.cpp:121
java_string_library_preprocesst::is_java_string_pointer_type
static bool is_java_string_pointer_type(const typet &type)
Definition: java_string_library_preprocess.cpp:61
java_string_library_preprocesst::code_assign_string_expr_to_java_string
codet code_assign_string_expr_to_java_string(const exprt &lhs, const refined_string_exprt &rhs, const symbol_table_baset &symbol_table, bool is_constructor)
Produce code for an assignemnt of a string expr to a Java string.
Definition: java_string_library_preprocess.cpp:837
character_refine_preprocesst::replace_character_call
codet replace_character_call(const code_function_callt &call) const
replace function calls to functions of the Character by an affectation if possible,...
Definition: character_refine_preprocess.cpp:1288
java_string_library_preprocesst::string_types
std::unordered_set< irep_idt > string_types
Definition: java_string_library_preprocess.h:150
string_expr.h
java_method_typet
Definition: java_types.h:100
java_string_library_preprocesst::is_java_string_type
static bool is_java_string_type(const typet &type)
Definition: java_string_library_preprocess.cpp:75
java_string_library_preprocesst::is_java_string_builder_pointer_type
static bool is_java_string_builder_pointer_type(const typet &type)
Definition: java_string_library_preprocess.cpp:92
codet
Data structure for representing an arbitrary statement in a program.
Definition: std_code_base.h:28
java_string_library_preprocesst::code_return_function_application
codet code_return_function_application(const irep_idt &function_id, const exprt::operandst &arguments, const typet &type, symbol_table_baset &symbol_table)
return the result of a function call
Definition: java_string_library_preprocess.cpp:597