cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
expr_skeleton.cpp
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module: Symbolic Execution
4
5
Author: Romain Brenguier, romain.brenguier@diffblue.com
6
7
\*******************************************************************/
8
11
12
#include "
expr_skeleton.h
"
13
14
#include <
util/std_expr.h
>
15
16
expr_skeletont::expr_skeletont
() :
skeleton
(
nil_exprt
{})
17
{
18
}
19
20
expr_skeletont
expr_skeletont::remove_op0
(
exprt
e)
21
{
22
PRECONDITION
(e.
id
() != ID_symbol);
23
PRECONDITION
(e.
operands
().size() >= 1);
24
to_multi_ary_expr
(e).
op0
().
make_nil
();
25
return
expr_skeletont
{std::move(e)};
26
}
27
28
exprt
expr_skeletont::apply
(
exprt
expr)
const
29
{
30
PRECONDITION
(
skeleton
.id() != ID_symbol);
31
exprt
result =
skeleton
;
32
exprt
*p = &result;
33
34
while
(p->
is_not_nil
())
35
{
36
INVARIANT
(
37
p->
id
() != ID_symbol,
38
"expected pointed-to expression not to be a symbol"
);
39
INVARIANT
(
40
p->
operands
().size() >= 1,
41
"expected pointed-to expression to have at least one operand"
);
42
p = &
to_multi_ary_expr
(*p).
op0
();
43
}
44
45
INVARIANT
(p->
is_nil
(),
"expected pointed-to expression to be nil"
);
46
47
*p = std::move(expr);
48
return
result;
49
}
50
51
expr_skeletont
expr_skeletont::compose
(
expr_skeletont
other)
const
52
{
53
return
expr_skeletont
(
apply
(other.
skeleton
));
54
}
expr_skeletont::apply
exprt apply(exprt expr) const
Replace the missing part by the given expression, to end-up with a complete expression.
Definition
expr_skeleton.cpp:28
expr_skeletont::expr_skeletont
expr_skeletont()
Empty skeleton.
Definition
expr_skeleton.cpp:16
expr_skeletont::compose
expr_skeletont compose(expr_skeletont other) const
Replace the missing part of the current skeleton by another skeleton, ending in a bigger skeleton cor...
Definition
expr_skeleton.cpp:51
expr_skeletont::remove_op0
static expr_skeletont remove_op0(exprt e)
Create a skeleton by removing the first operand of e.
Definition
expr_skeleton.cpp:20
expr_skeletont::skeleton
exprt skeleton
In skeleton, nil_exprt is used to mark the sub expression to be substituted.
Definition
expr_skeleton.h:51
exprt
Base class for all expressions.
Definition
expr.h:57
exprt::operands
operandst & operands()
Definition
expr.h:95
irept::is_not_nil
bool is_not_nil() const
Definition
irep.h:372
irept::make_nil
void make_nil()
Definition
irep.h:446
irept::id
const irep_idt & id() const
Definition
irep.h:388
irept::is_nil
bool is_nil() const
Definition
irep.h:368
multi_ary_exprt::op0
exprt & op0()
Definition
std_expr.h:926
nil_exprt
The NIL expression.
Definition
std_expr.h:3134
expr_skeleton.h
Expression skeleton.
PRECONDITION
#define PRECONDITION(CONDITION)
Definition
invariant.h:463
INVARIANT
#define INVARIANT(CONDITION, REASON)
This macro uses the wrapper function 'invariant_violated_string'.
Definition
invariant.h:423
std_expr.h
API to expression classes.
to_multi_ary_expr
const multi_ary_exprt & to_multi_ary_expr(const exprt &expr)
Cast an exprt to a multi_ary_exprt.
Definition
std_expr.h:981
goto-symex
expr_skeleton.cpp
Generated by
1.17.0