Skip to content

Commit de0f2a5

Browse files
Introduce renamedt type for result of rename
This is a wrapper that will be used to signal that an expression or type has been renamed to a given level. It makes it possible to define functions which only accept expression which have been through renaming.
1 parent c2eda2f commit de0f2a5

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

src/goto-symex/renaming_level.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,35 @@ struct symex_renaming_levelt
5959
}
6060
};
6161

62+
/// Wrapper for expressions or types which have been renamed up to a given
63+
/// \p level
64+
template <typename underlyingt, levelt level>
65+
class renamedt
66+
{
67+
public:
68+
static_assert(
69+
std::is_base_of<exprt, underlyingt>::value ||
70+
std::is_base_of<typet, underlyingt>::value,
71+
"underlyingt should inherit from exprt or typet");
72+
73+
const underlyingt &get() const
74+
{
75+
return value;
76+
}
77+
78+
private:
79+
underlyingt value;
80+
81+
friend struct symex_level0t;
82+
friend struct symex_level1t;
83+
friend struct symex_level2t;
84+
85+
/// Only symex_levelXt classes can create renamedt objects
86+
explicit renamedt(underlyingt value) : value(std::move(value))
87+
{
88+
}
89+
};
90+
6291
/// Functor to set the level 0 renaming of SSA expressions.
6392
/// Level 0 corresponds to threads.
6493
/// The renaming is built for one particular interleaving.

0 commit comments

Comments
 (0)