CBMC
java_bytecode_convert_method_class.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: JAVA Bytecode Language Conversion
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_JAVA_BYTECODE_JAVA_BYTECODE_CONVERT_METHOD_CLASS_H
13 #define CPROVER_JAVA_BYTECODE_JAVA_BYTECODE_CONVERT_METHOD_CLASS_H
14 
15 #include "ci_lazy_methods_needed.h"
18 
19 #include <util/expanding_vector.h>
20 #include <util/message.h>
21 #include <util/std_code.h>
22 #include <util/std_expr.h>
23 
25 
26 #include <vector>
27 #include <list>
28 
29 class class_hierarchyt;
30 class prefix_filtert;
31 class symbol_tablet;
32 class symbolt;
33 
35 {
36 public:
39  message_handlert &_message_handler,
40  size_t _max_array_length,
43  java_string_library_preprocesst &_string_preprocess,
45  bool threading_support,
47  : log(_message_handler),
50  max_array_length(_max_array_length),
55  string_preprocess(_string_preprocess),
57  method_has_this(false),
59  {
60  }
61 
67 
68  void operator()(
69  const symbolt &class_symbol,
70  const methodt &method,
71  const optionalt<prefix_filtert> &method_context)
72  {
73  convert(class_symbol, method, method_context);
74  }
75 
76  typedef uint16_t method_offsett;
77 
78 protected:
82  const size_t max_array_length;
85  const bool threading_support;
87 
92 
95 
99 
101 
106 
107 public:
108  struct holet
109  {
112  };
113 
115  {
118  std::vector<holet> holes;
119  };
120 
121  typedef std::vector<local_variable_with_holest>
123 
124  class variablet
125  {
126  public:
128  size_t start_pc;
129  size_t length;
130  bool is_parameter = false;
131  std::vector<holet> holes;
132 
134  const symbol_exprt &_symbol_expr,
135  std::size_t _start_pc,
136  std::size_t _length)
137  : symbol_expr(_symbol_expr), start_pc(_start_pc), length(_length)
138  {
139  }
140 
142  const symbol_exprt &_symbol_expr,
143  std::size_t _start_pc,
144  std::size_t _length,
145  bool _is_parameter)
146  : symbol_expr(_symbol_expr),
147  start_pc(_start_pc),
148  length(_length),
149  is_parameter(_is_parameter)
150  {
151  }
152 
154  const symbol_exprt &_symbol_expr,
155  std::size_t _start_pc,
156  std::size_t _length,
157  bool _is_parameter,
158  std::vector<holet> &&_holes)
159  : symbol_expr(_symbol_expr),
160  start_pc(_start_pc),
161  length(_length),
162  is_parameter(_is_parameter),
163  holes(std::move(_holes))
164  {
165  }
166  };
167 
168 protected:
169  typedef std::vector<variablet> variablest;
171  std::set<symbol_exprt> used_local_names;
173  std::map<irep_idt, bool> class_has_clinit_method;
174  std::map<irep_idt, bool> any_superclass_has_clinit_method;
176 
178  {
181  };
182 
183  // return corresponding reference of variable
184  const variablet &find_variable_for_slot(
185  size_t address,
186  variablest &var_list);
187 
188  // JVM local variables
190  {
193  };
194 
195  exprt variable(const exprt &arg, char type_char, size_t address);
196 
197  // temporary variables
198  std::list<symbol_exprt> tmp_vars;
199 
200  symbol_exprt tmp_variable(const std::string &prefix, const typet &type);
201 
202  // JVM program locations
203  static irep_idt label(const irep_idt &address);
204 
205  // JVM Stack
206  typedef std::vector<exprt> stackt;
208 
209  exprt::operandst pop(std::size_t n);
210 
211  void pop_residue(std::size_t n);
212 
213  void push(const exprt::operandst &o);
214 
219  {
220  return v.index < slots_for_parameters;
221  }
222 
224  {
226  const instructionst::const_iterator &it,
227  const codet &_code)
228  : source(it), code(_code), done(false)
229  {
230  }
231 
232  instructionst::const_iterator source;
233  std::list<method_offsett> successors;
234  std::set<method_offsett> predecessors;
237  bool done;
238  };
239 
240 public:
241  typedef std::map<method_offsett, converted_instructiont> address_mapt;
242  typedef std::pair<const methodt &, const address_mapt &> method_with_amapt;
245 
246 protected:
247  void find_initializers(
249  const address_mapt &amap,
250  const java_cfg_dominatorst &doms);
251 
253  local_variable_table_with_holest::iterator firstvar,
254  local_variable_table_with_holest::iterator varlimit,
255  const address_mapt &amap,
256  const java_cfg_dominatorst &doms);
257 
258  void setup_local_variables(const methodt &m, const address_mapt &amap);
259 
261  {
262  bool leaf;
263  std::vector<method_offsett> branch_addresses;
264  std::vector<block_tree_nodet> branch;
265 
267  {
268  }
269 
270  explicit block_tree_nodet(bool l) : leaf(l)
271  {
272  }
273 
275  {
276  return block_tree_nodet(true);
277  }
278  };
279 
280  static void replace_goto_target(
281  codet &repl,
282  const irep_idt &old_label,
283  const irep_idt &new_label);
284 
286  block_tree_nodet &tree,
287  code_blockt &this_block,
288  method_offsett address_start,
289  method_offsett address_limit,
290  method_offsett next_block_start_address);
291 
293  block_tree_nodet &tree,
294  code_blockt &this_block,
295  method_offsett address_start,
296  method_offsett address_limit,
297  method_offsett next_block_start_address,
298  const address_mapt &amap,
299  bool allow_merge = true);
300 
301  // conversion
302  void convert(
303  const symbolt &class_symbol,
304  const methodt &,
305  const optionalt<prefix_filtert> &method_context);
306 
308  const methodt &method,
309  const java_method_typet &method_type);
310 
312 
313  codet get_clinit_call(const irep_idt &classname);
314 
315  bool is_method_inherited(
316  const irep_idt &classname,
317  const irep_idt &mangled_method_name) const;
318 
320  const irep_idt &class_identifier, const irep_idt &component_name) const;
321 
323  {
324  VARIABLE,
325  ARRAY_REF,
326  STATIC_FIELD,
327  FIELD
328  };
329 
330  void save_stack_entries(
331  const std::string &,
332  code_blockt &,
333  const bytecode_write_typet,
334  const irep_idt &);
335 
337  const std::string &,
338  const typet &,
339  code_blockt &,
340  exprt &);
341 
342  std::vector<method_offsett> try_catch_handler(
343  method_offsett address,
345  const;
346 
348  address_mapt &address_map,
349  const std::vector<method_offsett> &jsr_ret_targets,
350  const std::vector<
351  std::vector<java_bytecode_parse_treet::instructiont>::const_iterator>
352  &ret_instructions) const;
353 
355  const source_locationt &location,
356  std::size_t instruction_address,
357  const exprt &arg0,
358  codet &result_code);
359 
361  const irep_idt &statement,
362  const exprt::operandst &op,
363  const source_locationt &location);
364 
366  const irep_idt &statement,
367  const exprt &arg0,
368  const exprt::operandst &op,
369  const method_offsett address,
370  const source_locationt &location);
371 
372  static exprt
373  convert_aload(const irep_idt &statement, const exprt::operandst &op);
374 
384  exprt convert_load(const exprt &index, char type_char, size_t address);
385 
387  const std::vector<method_offsett> &jsr_ret_targets,
388  const exprt &arg0,
389  const source_locationt &location,
390  const method_offsett address);
391 
394  const u1 bytecode,
395  const exprt::operandst &op,
396  const mp_integer &number,
397  const source_locationt &location) const;
398 
401  const exprt::operandst &op,
402  const irep_idt &id,
403  const mp_integer &number,
404  const source_locationt &location) const;
405 
408  const exprt::operandst &op,
409  const mp_integer &number,
410  const source_locationt &location) const;
411 
414  const exprt::operandst &op,
415  const mp_integer &number,
416  const source_locationt &location) const;
417 
419  const exprt &arg0,
420  const exprt &arg1,
421  const source_locationt &location,
422  method_offsett address);
423 
425  const irep_idt &statement,
426  const exprt::operandst &op,
427  exprt::operandst &results) const;
428 
430  const irep_idt &statement,
431  const exprt::operandst &op,
432  exprt::operandst &results) const;
433 
435  convert_cmp(const exprt::operandst &op, exprt::operandst &results) const;
436 
438  const irep_idt &statement,
439  const exprt::operandst &op,
440  exprt::operandst &results) const;
441 
442  void convert_getstatic(
443  const source_locationt &source_location,
444  const exprt &arg0,
445  const symbol_exprt &symbol_expr,
446  bool is_assertions_disabled_field,
447  codet &c,
448  exprt::operandst &results);
449 
451  convert_putfield(const fieldref_exprt &arg0, const exprt::operandst &op);
452 
454  const source_locationt &location,
455  const exprt &arg0,
456  const exprt::operandst &op,
457  const symbol_exprt &symbol_expr);
458 
459  void convert_new(
460  const source_locationt &location,
461  const exprt &arg0,
462  codet &c,
463  exprt::operandst &results);
464 
466  const source_locationt &location,
467  const irep_idt &statement,
468  const exprt &arg0,
469  const exprt::operandst &op,
470  exprt::operandst &results);
471 
473  const source_locationt &location,
474  const exprt &arg0,
475  const exprt::operandst &op,
476  exprt::operandst &results);
477 
479  const methodt &method,
480  const std::set<method_offsett> &working_set,
481  method_offsett cur_pc,
482  codet &c);
483 
484  void convert_athrow(
485  const source_locationt &location,
486  const exprt::operandst &op,
487  codet &c,
488  exprt::operandst &results) const;
489 
490  void convert_checkcast(
491  const exprt &arg0,
492  const exprt::operandst &op,
493  codet &c,
494  exprt::operandst &results) const;
495 
497  const irep_idt &statement,
498  const exprt::operandst &op,
499  const source_locationt &source_location);
500 
502 
503  void convert_invoke(
504  source_locationt location,
505  const irep_idt &statement,
506  class_method_descriptor_exprt &class_method_descriptor,
507  codet &c,
508  exprt::operandst &results);
509 
511  const irep_idt &statement,
512  const constant_exprt &arg0,
513  exprt::operandst &results) const;
514 
516 
518 
519  void convert_dup2(exprt::operandst &op, exprt::operandst &results);
520 
522  const exprt::operandst &op,
524  const source_locationt &location);
525 
526  codet convert_pop(const irep_idt &statement, const exprt::operandst &op);
527 
529 };
530 #endif
messaget
Class that provides messages with a built-in verbosity 'level'.
Definition: message.h:154
java_bytecode_convert_methodt::instructionst
methodt::instructionst instructionst
Definition: java_bytecode_convert_method_class.h:64
java_bytecode_convert_methodt::convert_invoke
void convert_invoke(source_locationt location, const irep_idt &statement, class_method_descriptor_exprt &class_method_descriptor, codet &c, exprt::operandst &results)
Definition: java_bytecode_convert_method.cpp:2234
java_bytecode_convert_methodt::convert_pop
codet convert_pop(const irep_idt &statement, const exprt::operandst &op)
Definition: java_bytecode_convert_method.cpp:2039
java_bytecode_convert_methodt::is_parameter
bool is_parameter(const local_variablet &v)
Returns true iff the slot index of the local variable of a method (coming from the LVT) is a paramete...
Definition: java_bytecode_convert_method_class.h:218
dstringt
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition: dstring.h:36
java_bytecode_convert_methodt::converted_instructiont::stack
stackt stack
Definition: java_bytecode_convert_method_class.h:236
code_blockt
A codet representing sequential composition of program statements.
Definition: std_code.h:129
symbol_tablet
The symbol table.
Definition: symbol_table.h:13
java_bytecode_convert_methodt::threading_support
const bool threading_support
Definition: java_bytecode_convert_method_class.h:85
java_bytecode_convert_methodt::holet
Definition: java_bytecode_convert_method_class.h:108
java_bytecode_convert_methodt::variable_cast_argumentt
variable_cast_argumentt
Definition: java_bytecode_convert_method_class.h:189
java_bytecode_convert_methodt::convert_load
exprt convert_load(const exprt &index, char type_char, size_t address)
Load reference from local variable.
Definition: java_bytecode_convert_method.cpp:3016
java_bytecode_convert_methodt::local_variable_with_holest::var
local_variablet var
Definition: java_bytecode_convert_method_class.h:116
mp_integer
BigInt mp_integer
Definition: smt_terms.h:17
class_hierarchyt
Non-graph-based representation of the class hierarchy.
Definition: class_hierarchy.h:42
java_bytecode_convert_methodt::current_method
irep_idt current_method
A copy of method_id :/.
Definition: java_bytecode_convert_method_class.h:94
java_bytecode_convert_methodt::log
messaget log
Definition: java_bytecode_convert_method_class.h:79
java_bytecode_convert_methodt::method_id
irep_idt method_id
Fully qualified name of the method under translation.
Definition: java_bytecode_convert_method_class.h:91
java_bytecode_parse_treet::methodt::local_variablet
Definition: java_bytecode_parse_tree.h:126
java_bytecode_convert_methodt::setup_local_variables
void setup_local_variables(const methodt &m, const address_mapt &amap)
See find_initializers_for_slot above for more detail.
Definition: java_local_variable_table.cpp:740
prefix_filtert
Provides filtering of strings vai inclusion/exclusion lists of prefixes.
Definition: prefix_filter.h:19
java_bytecode_convert_methodt::convert_if_cmp
code_ifthenelset convert_if_cmp(const java_bytecode_convert_methodt::address_mapt &address_map, const u1 bytecode, const exprt::operandst &op, const mp_integer &number, const source_locationt &location) const
Definition: java_bytecode_convert_method.cpp:2923
java_bytecode_convert_methodt::convert_dup2
void convert_dup2(exprt::operandst &op, exprt::operandst &results)
Definition: java_bytecode_convert_method.cpp:2128
java_bytecode_convert_methodt::java_bytecode_convert_methodt
java_bytecode_convert_methodt(symbol_table_baset &symbol_table, message_handlert &_message_handler, size_t _max_array_length, bool throw_assertion_error, optionalt< ci_lazy_methods_neededt > needed_lazy_methods, java_string_library_preprocesst &_string_preprocess, const class_hierarchyt &class_hierarchy, bool threading_support, bool assert_no_exceptions_thrown)
Definition: java_bytecode_convert_method_class.h:37
typet
The type of an expression, extends irept.
Definition: type.h:28
java_bytecode_parse_treet::methodt
Definition: java_bytecode_parse_tree.h:84
java_bytecode_parse_treet::methodt::instructionst
std::vector< instructiont > instructionst
Definition: java_bytecode_parse_tree.h:91
java_bytecode_convert_methodt::try_catch_handler
std::vector< method_offsett > try_catch_handler(method_offsett address, const java_bytecode_parse_treet::methodt::exception_tablet &exception_table) const
Definition: java_bytecode_convert_method.cpp:3180
java_bytecode_convert_methodt::needed_lazy_methods
optionalt< ci_lazy_methods_neededt > needed_lazy_methods
Definition: java_bytecode_convert_method_class.h:86
fieldref_exprt
Represents the argument of an instruction that uses a CONSTANT_Fieldref This is used for example as a...
Definition: java_bytecode_parse_tree.h:333
java_bytecode_convert_methodt::ns
namespacet ns
Definition: java_bytecode_convert_method_class.h:81
java_bytecode_convert_methodt::label
static irep_idt label(const irep_idt &address)
Definition: java_bytecode_convert_method.cpp:160
java_bytecode_convert_methodt::find_initializers
void find_initializers(local_variable_table_with_holest &vars, const address_mapt &amap, const java_cfg_dominatorst &doms)
See find_initializers_for_slot above for more detail.
Definition: java_local_variable_table.cpp:691
java_bytecode_convert_methodt::variablet::length
size_t length
Definition: java_bytecode_convert_method_class.h:129
java_bytecode_convert_methodt::variable
exprt variable(const exprt &arg, char type_char, size_t address)
Returns an expression indicating a local variable suitable to load/store from a bytecode at address a...
Definition: java_bytecode_convert_method.cpp:198
java_bytecode_convert_methodt::class_hierarchy
const class_hierarchyt & class_hierarchy
Definition: java_bytecode_convert_method_class.h:175
java_bytecode_parse_treet::instructiont
Definition: java_bytecode_parse_tree.h:55
java_bytecode_convert_methodt::convert_iinc
code_blockt convert_iinc(const exprt &arg0, const exprt &arg1, const source_locationt &location, method_offsett address)
Definition: java_bytecode_convert_method.cpp:2826
exprt
Base class for all expressions.
Definition: expr.h:55
java_bytecode_convert_methodt::local_variable_with_holest::holes
std::vector< holet > holes
Definition: java_bytecode_convert_method_class.h:118
java_bytecode_convert_methodt::convert_ifnonull
code_ifthenelset convert_ifnonull(const java_bytecode_convert_methodt::address_mapt &address_map, const exprt::operandst &op, const mp_integer &number, const source_locationt &location) const
Definition: java_bytecode_convert_method.cpp:2877
java_bytecode_convert_methodt::variablet::variablet
variablet(const symbol_exprt &_symbol_expr, std::size_t _start_pc, std::size_t _length)
Definition: java_bytecode_convert_method_class.h:133
java_bytecode_convert_methodt::block_tree_nodet::branch
std::vector< block_tree_nodet > branch
Definition: java_bytecode_convert_method_class.h:264
java_bytecode_convert_methodt::convert_shl
exprt::operandst & convert_shl(const irep_idt &statement, const exprt::operandst &op, exprt::operandst &results) const
Definition: java_bytecode_convert_method.cpp:2790
java_bytecode_convert_methodt::convert_multianewarray
code_blockt convert_multianewarray(const source_locationt &location, const exprt &arg0, const exprt::operandst &op, exprt::operandst &results)
Definition: java_bytecode_convert_method.cpp:2545
java_bytecode_convert_methodt::NO_CAST
@ NO_CAST
Definition: java_bytecode_convert_method_class.h:192
java_bytecode_convert_methodt::converted_instructiont
Definition: java_bytecode_convert_method_class.h:223
java_bytecode_convert_methodt::INST_INDEX_CONST
@ INST_INDEX_CONST
Definition: java_bytecode_convert_method_class.h:180
java_bytecode_convert_methodt::convert_newarray
code_blockt convert_newarray(const source_locationt &location, const irep_idt &statement, const exprt &arg0, const exprt::operandst &op, exprt::operandst &results)
Definition: java_bytecode_convert_method.cpp:2572
java_bytecode_convert_methodt::convert_ret
code_blockt convert_ret(const std::vector< method_offsett > &jsr_ret_targets, const exprt &arg0, const source_locationt &location, const method_offsett address)
Definition: java_bytecode_convert_method.cpp:2947
java_bytecode_convert_methodt::local_variable_tablet
methodt::local_variable_tablet local_variable_tablet
Definition: java_bytecode_convert_method_class.h:65
java_bytecode_convert_methodt::holet::start_pc
method_offsett start_pc
Definition: java_bytecode_convert_method_class.h:110
symbol_exprt
Expression to hold a symbol (variable)
Definition: std_expr.h:112
java_bytecode_convert_methodt::variables
expanding_vectort< variablest > variables
Definition: java_bytecode_convert_method_class.h:170
java_bytecode_convert_methodt::convert_cmp2
exprt::operandst & convert_cmp2(const irep_idt &statement, const exprt::operandst &op, exprt::operandst &results) const
Definition: java_bytecode_convert_method.cpp:2742
java_bytecode_convert_methodt::methodt
java_bytecode_parse_treet::methodt methodt
Definition: java_bytecode_convert_method_class.h:62
java_bytecode_convert_methodt::convert_cmp
exprt::operandst & convert_cmp(const exprt::operandst &op, exprt::operandst &results) const
Definition: java_bytecode_convert_method.cpp:2770
expanding_vectort< variablest >
code_ifthenelset
codet representation of an if-then-else statement.
Definition: std_code.h:459
java_bytecode_convert_methodt::variablet::variablet
variablet(const symbol_exprt &_symbol_expr, std::size_t _start_pc, std::size_t _length, bool _is_parameter)
Definition: java_bytecode_convert_method_class.h:141
java_bytecode_convert_methodt::convert_instructions
code_blockt convert_instructions(const methodt &)
Definition: java_bytecode_convert_method.cpp:1060
cfg_dominators.h
java_bytecode_convert_methodt::block_tree_nodet::get_leaf
static block_tree_nodet get_leaf()
Definition: java_bytecode_convert_method_class.h:274
java_bytecode_convert_methodt::converted_instructiont::code
codet code
Definition: java_bytecode_convert_method_class.h:235
class_method_descriptor_exprt
An expression describing a method on a class.
Definition: std_expr.h:3440
java_bytecode_convert_methodt::variablet::symbol_expr
symbol_exprt symbol_expr
Definition: java_bytecode_convert_method_class.h:127
java_bytecode_convert_methodt::converted_instructiont::successors
std::list< method_offsett > successors
Definition: java_bytecode_convert_method_class.h:233
namespacet
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition: namespace.h:90
java_bytecode_convert_methodt::convert_new
void convert_new(const source_locationt &location, const exprt &arg0, codet &c, exprt::operandst &results)
Definition: java_bytecode_convert_method.cpp:2630
java_bytecode_convert_methodt::variablet::start_pc
size_t start_pc
Definition: java_bytecode_convert_method_class.h:128
java_bytecode_convert_methodt::convert_switch
code_switcht convert_switch(const exprt::operandst &op, const java_bytecode_parse_treet::instructiont::argst &args, const source_locationt &location)
Definition: java_bytecode_convert_method.cpp:2055
java_bytecode_convert_methodt::get_clinit_call
codet get_clinit_call(const irep_idt &classname)
Each static access to classname should be prefixed with a check for necessary static init; this retur...
Definition: java_bytecode_convert_method.cpp:989
java_bytecode_convert_methodt::convert_if
code_ifthenelset convert_if(const java_bytecode_convert_methodt::address_mapt &address_map, const exprt::operandst &op, const irep_idt &id, const mp_integer &number, const source_locationt &location) const
Definition: java_bytecode_convert_method.cpp:2899
java_bytecode_convert_methodt::method_return_type
typet method_return_type
Return type of the method under conversion.
Definition: java_bytecode_convert_method_class.h:98
java_bytecode_convert_methodt::max_array_length
const size_t max_array_length
Definition: java_bytecode_convert_method_class.h:82
java_bytecode_convert_methodt::tmp_vars
std::list< symbol_exprt > tmp_vars
Definition: java_bytecode_convert_method_class.h:198
java_bytecode_convert_methodt::get_static_field
irep_idt get_static_field(const irep_idt &class_identifier, const irep_idt &component_name) const
Get static field identifier referred to by class_identifier.component_name Note this may be inherited...
Definition: java_bytecode_convert_method.cpp:3333
java_bytecode_convert_methodt::get_or_create_block_for_pcrange
code_blockt & get_or_create_block_for_pcrange(block_tree_nodet &tree, code_blockt &this_block, method_offsett address_start, method_offsett address_limit, method_offsett next_block_start_address, const address_mapt &amap, bool allow_merge=true)
As above, but this version can additionally create a new branch in the block_tree-node and code_block...
Definition: java_bytecode_convert_method.cpp:771
java_bytecode_convert_methodt::method_offsett
uint16_t method_offsett
Definition: java_bytecode_convert_method_class.h:76
java_bytecode_convert_methodt::variablet::is_parameter
bool is_parameter
Definition: java_bytecode_convert_method_class.h:130
java_bytecode_convert_methodt::throw_assertion_error
const bool throw_assertion_error
Definition: java_bytecode_convert_method_class.h:83
address_mapt
java_bytecode_convert_methodt::address_mapt address_mapt
Definition: java_local_variable_table.cpp:135
java_bytecode_convert_methodt::local_variable_with_holest::is_parameter
bool is_parameter
Definition: java_bytecode_convert_method_class.h:117
java_bytecode_convert_methodt::assert_no_exceptions_thrown
const bool assert_no_exceptions_thrown
Definition: java_bytecode_convert_method_class.h:84
java_bytecode_convert_methodt::bytecode_write_typet::STATIC_FIELD
@ STATIC_FIELD
java_bytecode_parse_tree.h
symbol_table_baset
The symbol table base class interface.
Definition: symbol_table_base.h:21
java_bytecode_convert_methodt::converted_instructiont::converted_instructiont
converted_instructiont(const instructionst::const_iterator &it, const codet &_code)
Definition: java_bytecode_convert_method_class.h:225
java_bytecode_convert_methodt::local_variable_table_with_holest
std::vector< local_variable_with_holest > local_variable_table_with_holest
Definition: java_bytecode_convert_method_class.h:122
java_bytecode_convert_methodt::find_variable_for_slot
const variablet & find_variable_for_slot(size_t address, variablest &var_list)
See above.
Definition: java_local_variable_table.cpp:856
ci_lazy_methods_needed.h
java_bytecode_convert_methodt::class_has_clinit_method
std::map< irep_idt, bool > class_has_clinit_method
Definition: java_bytecode_convert_method_class.h:173
java_bytecode_convert_methodt::block_tree_nodet::branch_addresses
std::vector< method_offsett > branch_addresses
Definition: java_bytecode_convert_method_class.h:263
java_bytecode_convert_methodt::slots_for_parameters
method_offsett slots_for_parameters
Number of local variable slots used by the JVM to pass parameters upon invocation of the method under...
Definition: java_bytecode_convert_method_class.h:105
java_bytecode_convert_methodt::instruction_sizet
instruction_sizet
Definition: java_bytecode_convert_method_class.h:177
java_bytecode_convert_methodt::variablet::variablet
variablet(const symbol_exprt &_symbol_expr, std::size_t _start_pc, std::size_t _length, bool _is_parameter, std::vector< holet > &&_holes)
Definition: java_bytecode_convert_method_class.h:153
java_bytecode_convert_methodt::java_cfg_dominatorst
cfg_dominators_templatet< method_with_amapt, method_offsett, false > java_cfg_dominatorst
Definition: java_bytecode_convert_method_class.h:244
java_bytecode_convert_methodt::convert_dup2_x1
void convert_dup2_x1(exprt::operandst &op, exprt::operandst &results)
Definition: java_bytecode_convert_method.cpp:2141
java_bytecode_convert_methodt::method_has_this
bool method_has_this
Definition: java_bytecode_convert_method_class.h:172
java_bytecode_convert_methodt::convert_putstatic
code_blockt convert_putstatic(const source_locationt &location, const exprt &arg0, const exprt::operandst &op, const symbol_exprt &symbol_expr)
Definition: java_bytecode_convert_method.cpp:2654
java_bytecode_convert_methodt::bytecode_write_typet::VARIABLE
@ VARIABLE
message_handlert
Definition: message.h:27
java_bytecode_convert_methodt::convert_ushr
exprt::operandst & convert_ushr(const irep_idt &statement, const exprt::operandst &op, exprt::operandst &results) const
Definition: java_bytecode_convert_method.cpp:2807
java_bytecode_convert_methodt::convert_getstatic
void convert_getstatic(const source_locationt &source_location, const exprt &arg0, const symbol_exprt &symbol_expr, bool is_assertions_disabled_field, codet &c, exprt::operandst &results)
Definition: java_bytecode_convert_method.cpp:2696
exprt::operandst
std::vector< exprt > operandst
Definition: expr.h:58
java_bytecode_convert_methodt::bytecode_write_typet::ARRAY_REF
@ ARRAY_REF
expanding_vector.h
java_bytecode_convert_methodt::variablet::holes
std::vector< holet > holes
Definition: java_bytecode_convert_method_class.h:131
java_bytecode_convert_methodt::convert_checkcast
void convert_checkcast(const exprt &arg0, const exprt::operandst &op, codet &c, exprt::operandst &results) const
Definition: java_bytecode_convert_method.cpp:2410
java_bytecode_convert_methodt::get_block_for_pcrange
code_blockt & get_block_for_pcrange(block_tree_nodet &tree, code_blockt &this_block, method_offsett address_start, method_offsett address_limit, method_offsett next_block_start_address)
'tree' describes a tree of code_blockt objects; this_block is the corresponding block (thus they are ...
Definition: java_bytecode_convert_method.cpp:734
std_code.h
optionalt
nonstd::optional< T > optionalt
Definition: optional.h:35
java_bytecode_convert_methodt::converted_instructiont::predecessors
std::set< method_offsett > predecessors
Definition: java_bytecode_convert_method_class.h:234
java_bytecode_convert_methodt::local_variablet
methodt::local_variablet local_variablet
Definition: java_bytecode_convert_method_class.h:66
java_bytecode_parse_treet::methodt::exception_tablet
std::vector< exceptiont > exception_tablet
Definition: java_bytecode_parse_tree.h:121
java_bytecode_convert_methodt::INST_INDEX
@ INST_INDEX
Definition: java_bytecode_convert_method_class.h:179
java_bytecode_convert_methodt
Definition: java_bytecode_convert_method_class.h:34
source_locationt
Definition: source_location.h:18
java_bytecode_convert_methodt::convert_putfield
code_blockt convert_putfield(const fieldref_exprt &arg0, const exprt::operandst &op)
Definition: java_bytecode_convert_method.cpp:2685
java_bytecode_convert_methodt::convert_const
exprt::operandst & convert_const(const irep_idt &statement, const constant_exprt &arg0, exprt::operandst &results) const
Definition: java_bytecode_convert_method.cpp:2175
java_bytecode_convert_methodt::CAST_AS_NEEDED
@ CAST_AS_NEEDED
Definition: java_bytecode_convert_method_class.h:191
java_bytecode_convert_methodt::string_preprocess
java_string_library_preprocesst & string_preprocess
Definition: java_bytecode_convert_method_class.h:100
java_bytecode_convert_methodt::do_exception_handling
codet & do_exception_handling(const methodt &method, const std::set< method_offsett > &working_set, method_offsett cur_pc, codet &c)
Definition: java_bytecode_convert_method.cpp:2464
java_bytecode_convert_methodt::converted_instructiont::source
instructionst::const_iterator source
Definition: java_bytecode_convert_method_class.h:232
java_bytecode_convert_methodt::create_stack_tmp_var
void create_stack_tmp_var(const std::string &, const typet &, code_blockt &, exprt &)
actually create a temporary variable to hold the value of a stack entry
Definition: java_bytecode_convert_method.cpp:3434
java_bytecode_convert_methodt::block_tree_nodet::leaf
bool leaf
Definition: java_bytecode_convert_method_class.h:262
java_bytecode_parse_treet::methodt::local_variable_tablet
std::vector< local_variablet > local_variable_tablet
Definition: java_bytecode_parse_tree.h:136
java_bytecode_parse_treet::instructiont::argst
std::vector< exprt > argst
Definition: java_bytecode_parse_tree.h:60
java_bytecode_convert_methodt::find_initializers_for_slot
void find_initializers_for_slot(local_variable_table_with_holest::iterator firstvar, local_variable_table_with_holest::iterator varlimit, const address_mapt &amap, const java_cfg_dominatorst &doms)
Given a sequence of users of the same local variable slot, this figures out which ones are related by...
Definition: java_local_variable_table.cpp:597
java_bytecode_convert_methodt::convert_ifnull
code_ifthenelset convert_ifnull(const java_bytecode_convert_methodt::address_mapt &address_map, const exprt::operandst &op, const mp_integer &number, const source_locationt &location) const
Definition: java_bytecode_convert_method.cpp:2855
u1
uint8_t u1
Definition: bytecode_info.h:55
java_bytecode_convert_methodt::pop
exprt::operandst pop(std::size_t n)
Definition: java_bytecode_convert_method.cpp:126
java_bytecode_convert_methodt::used_local_names
std::set< symbol_exprt > used_local_names
Definition: java_bytecode_convert_method_class.h:171
code_switcht
codet representing a switch statement.
Definition: std_code.h:547
symbolt
Symbol table entry.
Definition: symbol.h:27
java_bytecode_convert_methodt::instructiont
java_bytecode_parse_treet::instructiont instructiont
Definition: java_bytecode_convert_method_class.h:63
java_bytecode_convert_methodt::address_mapt
std::map< method_offsett, converted_instructiont > address_mapt
Definition: java_bytecode_convert_method_class.h:241
java_string_library_preprocesst
Definition: java_string_library_preprocess.h:36
java_bytecode_convert_methodt::any_superclass_has_clinit_method
std::map< irep_idt, bool > any_superclass_has_clinit_method
Definition: java_bytecode_convert_method_class.h:174
java_bytecode_convert_methodt::block_tree_nodet::block_tree_nodet
block_tree_nodet()
Definition: java_bytecode_convert_method_class.h:266
java_bytecode_convert_methodt::push
void push(const exprt::operandst &o)
Definition: java_bytecode_convert_method.cpp:151
java_bytecode_convert_methodt::stackt
std::vector< exprt > stackt
Definition: java_bytecode_convert_method_class.h:206
java_bytecode_convert_methodt::convert_monitorenterexit
codet convert_monitorenterexit(const irep_idt &statement, const exprt::operandst &op, const source_locationt &source_location)
Definition: java_bytecode_convert_method.cpp:2105
java_bytecode_convert_methodt::convert_parameter_annotations
code_blockt convert_parameter_annotations(const methodt &method, const java_method_typet &method_type)
Definition: java_bytecode_convert_method.cpp:1011
java_bytecode_convert_methodt::block_tree_nodet
Definition: java_bytecode_convert_method_class.h:260
java_bytecode_convert_methodt::java_bytecode_convert_method_unit_testt
friend class java_bytecode_convert_method_unit_testt
Definition: java_bytecode_convert_method_class.h:528
java_bytecode_convert_methodt::draw_edges_from_ret_to_jsr
void draw_edges_from_ret_to_jsr(address_mapt &address_map, const std::vector< method_offsett > &jsr_ret_targets, const std::vector< std::vector< java_bytecode_parse_treet::instructiont >::const_iterator > &ret_instructions) const
Definition: java_bytecode_convert_method.cpp:3163
java_bytecode_convert_methodt::tmp_variable
symbol_exprt tmp_variable(const std::string &prefix, const typet &type)
Definition: java_bytecode_convert_method.cpp:165
java_bytecode_convert_methodt::convert_astore
code_blockt convert_astore(const irep_idt &statement, const exprt::operandst &op, const source_locationt &location)
Definition: java_bytecode_convert_method.cpp:3062
java_bytecode_convert_methodt::variablest
std::vector< variablet > variablest
Definition: java_bytecode_convert_method_class.h:169
java_bytecode_convert_methodt::convert
void convert(const symbolt &class_symbol, const methodt &, const optionalt< prefix_filtert > &method_context)
Definition: java_bytecode_convert_method.cpp:539
java_bytecode_convert_methodt::operator()
void operator()(const symbolt &class_symbol, const methodt &method, const optionalt< prefix_filtert > &method_context)
Definition: java_bytecode_convert_method_class.h:68
java_bytecode_convert_methodt::local_variable_with_holest
Definition: java_bytecode_convert_method_class.h:114
java_bytecode_convert_methodt::convert_dup2_x2
void convert_dup2_x2(exprt::operandst &op, exprt::operandst &results)
Definition: java_bytecode_convert_method.cpp:2154
java_bytecode_convert_methodt::pop_residue
void pop_residue(std::size_t n)
removes minimum(n, stack.size()) elements from the stack
Definition: java_bytecode_convert_method.cpp:144
java_bytecode_convert_methodt::convert_invoke_dynamic
optionalt< exprt > convert_invoke_dynamic(const source_locationt &location, std::size_t instruction_address, const exprt &arg0, codet &result_code)
Definition: java_bytecode_convert_method.cpp:3092
message.h
constant_exprt
A constant literal expression.
Definition: std_expr.h:2941
std_expr.h
java_bytecode_convert_methodt::variablet
Definition: java_bytecode_convert_method_class.h:124
java_bytecode_convert_methodt::bytecode_write_typet
bytecode_write_typet
Definition: java_bytecode_convert_method_class.h:322
java_bytecode_parse_treet::methodt::local_variablet::index
std::size_t index
Definition: java_bytecode_parse_tree.h:131
java_bytecode_convert_methodt::convert_athrow
void convert_athrow(const source_locationt &location, const exprt::operandst &op, codet &c, exprt::operandst &results) const
Definition: java_bytecode_convert_method.cpp:2426
java_method_typet
Definition: java_types.h:100
java_bytecode_convert_methodt::method_with_amapt
std::pair< const methodt &, const address_mapt & > method_with_amapt
Definition: java_bytecode_convert_method_class.h:242
java_bytecode_convert_methodt::converted_instructiont::done
bool done
Definition: java_bytecode_convert_method_class.h:237
java_bytecode_convert_methodt::replace_call_to_cprover_assume
codet & replace_call_to_cprover_assume(source_locationt location, codet &c)
Definition: java_bytecode_convert_method.cpp:2395
java_bytecode_convert_methodt::is_method_inherited
bool is_method_inherited(const irep_idt &classname, const irep_idt &mangled_method_name) const
Returns true iff method methodid from class classname is a method inherited from a class or interface...
Definition: java_bytecode_convert_method.cpp:3318
java_bytecode_convert_methodt::replace_goto_target
static void replace_goto_target(codet &repl, const irep_idt &old_label, const irep_idt &new_label)
Find all goto statements in 'repl' that target 'old_label' and redirect them to 'new_label'.
Definition: java_bytecode_convert_method.cpp:700
java_bytecode_convert_methodt::stack
stackt stack
Definition: java_bytecode_convert_method_class.h:207
java_bytecode_convert_methodt::bytecode_write_typet::FIELD
@ FIELD
java_bytecode_convert_methodt::symbol_table
symbol_table_baset & symbol_table
Definition: java_bytecode_convert_method_class.h:80
java_bytecode_convert_class.h
java_bytecode_convert_methodt::convert_aload
static exprt convert_aload(const irep_idt &statement, const exprt::operandst &op)
Definition: java_bytecode_convert_method.cpp:2996
java_bytecode_convert_methodt::holet::length
method_offsett length
Definition: java_bytecode_convert_method_class.h:111
cfg_dominators_templatet
Dominator graph.
Definition: cfg_dominators.h:36
java_bytecode_convert_methodt::block_tree_nodet::block_tree_nodet
block_tree_nodet(bool l)
Definition: java_bytecode_convert_method_class.h:270
codet
Data structure for representing an arbitrary statement in a program.
Definition: std_code_base.h:28
java_bytecode_convert_methodt::convert_store
code_blockt convert_store(const irep_idt &statement, const exprt &arg0, const exprt::operandst &op, const method_offsett address, const source_locationt &location)
Definition: java_bytecode_convert_method.cpp:3037
java_bytecode_convert_methodt::save_stack_entries
void save_stack_entries(const std::string &, code_blockt &, const bytecode_write_typet, const irep_idt &)
Create temporary variables if a write instruction can have undesired side- effects.
Definition: java_bytecode_convert_method.cpp:3352