aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/formal/SymbolicVariables.cpp
diff options
context:
space:
mode:
authorLeonardo Alt <leo@ethereum.org>2018-12-10 18:34:29 +0800
committerLeonardo Alt <leo@ethereum.org>2018-12-10 18:34:29 +0800
commitde46bb2c429ac3a3fac2d86417cf4836e294c7bb (patch)
treedcaeaed69297879d660eae550c653c25c67fd28a /libsolidity/formal/SymbolicVariables.cpp
parent6240d9e72a6f1696d7c37facf805af6ce2352ab2 (diff)
downloaddexon-solidity-de46bb2c429ac3a3fac2d86417cf4836e294c7bb.tar
dexon-solidity-de46bb2c429ac3a3fac2d86417cf4836e294c7bb.tar.gz
dexon-solidity-de46bb2c429ac3a3fac2d86417cf4836e294c7bb.tar.bz2
dexon-solidity-de46bb2c429ac3a3fac2d86417cf4836e294c7bb.tar.lz
dexon-solidity-de46bb2c429ac3a3fac2d86417cf4836e294c7bb.tar.xz
dexon-solidity-de46bb2c429ac3a3fac2d86417cf4836e294c7bb.tar.zst
dexon-solidity-de46bb2c429ac3a3fac2d86417cf4836e294c7bb.zip
[SMTChecker] Introduce SymbolicFunctionVariable
Diffstat (limited to 'libsolidity/formal/SymbolicVariables.cpp')
-rw-r--r--libsolidity/formal/SymbolicVariables.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/libsolidity/formal/SymbolicVariables.cpp b/libsolidity/formal/SymbolicVariables.cpp
index f7d2a119..997635af 100644
--- a/libsolidity/formal/SymbolicVariables.cpp
+++ b/libsolidity/formal/SymbolicVariables.cpp
@@ -99,3 +99,31 @@ SymbolicFixedBytesVariable::SymbolicFixedBytesVariable(
SymbolicIntVariable(make_shared<IntegerType>(_numBytes * 8), _uniqueName, _interface)
{
}
+
+SymbolicFunctionVariable::SymbolicFunctionVariable(
+ TypePointer _type,
+ string const& _uniqueName,
+ smt::SolverInterface&_interface
+):
+ SymbolicVariable(move(_type), _uniqueName, _interface),
+ m_declaration(m_interface.newVariable(currentName(), smtSort(*m_type)))
+{
+ solAssert(m_type->category() == Type::Category::Function, "");
+}
+
+void SymbolicFunctionVariable::resetDeclaration()
+{
+ m_declaration = m_interface.newVariable(currentName(), smtSort(*m_type));
+}
+
+smt::Expression SymbolicFunctionVariable::increaseIndex()
+{
+ ++(*m_ssa);
+ resetDeclaration();
+ return currentValue();
+}
+
+smt::Expression SymbolicFunctionVariable::operator()(vector<smt::Expression> _arguments) const
+{
+ return m_declaration(_arguments);
+}