CBMC
write_stack.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3  Module: Variable Sensitivity Domain
4 
5  Author: DiffBlue Limited.
6 
7 \*******************************************************************/
8 
12 
13 #ifndef CPROVER_ANALYSES_VARIABLE_SENSITIVITY_WRITE_STACK_H
14 #define CPROVER_ANALYSES_VARIABLE_SENSITIVITY_WRITE_STACK_H
15 
16 #include <memory>
17 #include <vector>
18 
20 class exprt;
21 class index_exprt;
22 class namespacet;
23 class write_stack_entryt;
24 
26 {
27 public:
28  typedef std::vector<std::shared_ptr<write_stack_entryt>>
30 
31  write_stackt();
32 
34  const exprt &expr,
35  const abstract_environmentt &environment,
36  const namespacet &ns);
37 
38  exprt to_expression() const;
39 
40  size_t depth() const;
41  exprt target_expression(size_t depth) const;
42  exprt offset_expression() const;
43  bool is_top_value() const;
44 
45 private:
47  const exprt &expr,
48  const abstract_environmentt &environment,
49  const namespacet &ns);
50 
52  const exprt &expr,
53  const abstract_environmentt &environment,
54  const namespacet &ns);
55 
57  const index_exprt &expr,
58  const abstract_environmentt &environment,
59  const namespacet &ns);
60 
61  void add_to_stack(
62  std::shared_ptr<write_stack_entryt> entry_pointer,
63  const abstract_environmentt environment,
64  const namespacet &ns);
65 
66  enum class integral_resultt
67  {
71  };
72 
74  const exprt &expr,
75  exprt &out_base_expr,
76  exprt &out_integral_expr);
77 
79  bool top_stack;
80 };
81 
82 #endif // CPROVER_ANALYSES_VARIABLE_SENSITIVITY_WRITE_STACK_H
Base class for all expressions.
Definition: expr.h:56
Array index operator.
Definition: std_expr.h:1465
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition: namespace.h:94
bool top_stack
Definition: write_stack.h:79
void construct_stack_to_array_index(const index_exprt &expr, const abstract_environmentt &environment, const namespacet &ns)
Construct a stack for an array position l-value.
exprt target_expression(size_t depth) const
exprt offset_expression() const
static integral_resultt get_which_side_integral(const exprt &expr, exprt &out_base_expr, exprt &out_integral_expr)
Utility function to find out which side of a binary operation has an integral type,...
void construct_stack_to_lvalue(const exprt &expr, const abstract_environmentt &environment, const namespacet &ns)
Construct a stack up to a specific l-value (i.e.
write_stackt()
Build a topstack.
Definition: write_stack.cpp:26
bool is_top_value() const
Is the stack representing an unknown value and hence can't be written to or read from.
exprt to_expression() const
Convert the stack to an expression that can be used to write to.
void construct_stack_to_pointer(const exprt &expr, const abstract_environmentt &environment, const namespacet &ns)
Add to the stack the elements to get to a pointer.
Definition: write_stack.cpp:60
size_t depth() const
continuation_stack_storet stack
Definition: write_stack.h:78
void add_to_stack(std::shared_ptr< write_stack_entryt > entry_pointer, const abstract_environmentt environment, const namespacet &ns)
Add an element to the top of the stack.
std::vector< std::shared_ptr< write_stack_entryt > > continuation_stack_storet
Definition: write_stack.h:29