CBMC
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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
20class exprt;
21class index_exprt;
22class namespacet;
24
26{
27public:
28 typedef std::vector<std::shared_ptr<write_stack_entryt>>
30
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;
43 bool is_top_value() const;
44
45private:
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
72
74 const exprt &expr,
77
80};
81
82#endif // CPROVER_ANALYSES_VARIABLE_SENSITIVITY_WRITE_STACK_H
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
Definition ai.h:562
Base class for all expressions.
Definition expr.h:56
Array index operator.
Definition std_expr.h:1470
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition namespace.h:91
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.
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.
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