cprover
java_bytecode_typecheck.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: JAVA Bytecode Language Type Checking
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_JAVA_BYTECODE_JAVA_BYTECODE_TYPECHECK_H
13 #define CPROVER_JAVA_BYTECODE_JAVA_BYTECODE_TYPECHECK_H
14 
15 #include "java_types.h"
16 
17 #include <set>
18 #include <map>
19 
21 #include <util/typecheck.h>
22 #include <util/namespace.h>
23 #include <util/std_code.h>
24 #include <util/std_expr.h>
25 #include <util/std_types.h>
26 
28  symbol_table_baset &symbol_table,
29  message_handlert &message_handler,
30  bool string_refinement_enabled);
31 
33  journalling_symbol_tablet &symbol_table,
34  message_handlert &message_handler,
35  bool string_refinement_enabled);
36 
38  exprt &expr,
39  message_handlert &message_handler,
40  const namespacet &ns);
41 
43 {
44 public:
46  symbol_table_baset &_symbol_table,
47  message_handlert &_message_handler,
48  bool _string_refinement_enabled):
49  typecheckt(_message_handler),
50  symbol_table(_symbol_table),
52  string_refinement_enabled(_string_refinement_enabled)
53  {
54  }
55 
57 
58  virtual void typecheck();
59  void typecheck(const journalling_symbol_tablet::changesett &identifiers);
60  virtual void typecheck_expr(exprt &expr);
61 
62 protected:
64  const namespacet ns;
66 
69  void typecheck_code(codet &);
70  void typecheck_type(typet &);
74 
75  // overload to use language-specific syntax
76  virtual std::string to_string(const exprt &expr);
77  virtual std::string to_string(const typet &type);
78 
79  std::set<irep_idt> already_typechecked;
80 };
81 
82 #endif // CPROVER_JAVA_BYTECODE_JAVA_BYTECODE_TYPECHECK_H
Data structure for representing an arbitrary statement in a program.
Definition: std_code.h:35
Base class for all expressions.
Definition: expr.h:54
std::set< irep_idt > already_typechecked
virtual std::string to_string(const exprt &expr)
java_bytecode_typecheckt(symbol_table_baset &_symbol_table, message_handlert &_message_handler, bool _string_refinement_enabled)
void typecheck_expr_java_new(side_effect_exprt &)
virtual void typecheck_expr(exprt &expr)
void typecheck_expr_java_new_array(side_effect_exprt &)
symbol_table_baset & symbol_table
A symbol table wrapper that records which entries have been updated/removedA caller can pass a journa...
std::unordered_set< irep_idt > changesett
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition: namespace.h:92
An expression containing a side effect.
Definition: std_code.h:1898
Expression to hold a symbol (variable)
Definition: std_expr.h:81
The symbol table base class interface.
Symbol table entry.
Definition: symbol.h:28
The type of an expression, extends irept.
Definition: type.h:28
bool java_bytecode_typecheck(symbol_table_baset &symbol_table, message_handlert &message_handler, bool string_refinement_enabled)
void java_bytecode_typecheck_updated_symbols(journalling_symbol_tablet &symbol_table, message_handlert &message_handler, bool string_refinement_enabled)
Author: Diffblue Ltd.
API to expression classes.
Pre-defined types.