diff options
author | Leonardo Alt <leo@ethereum.org> | 2018-12-10 18:34:29 +0800 |
---|---|---|
committer | Leonardo Alt <leo@ethereum.org> | 2018-12-10 18:34:29 +0800 |
commit | de46bb2c429ac3a3fac2d86417cf4836e294c7bb (patch) | |
tree | dcaeaed69297879d660eae550c653c25c67fd28a /libsolidity/formal/SymbolicVariables.cpp | |
parent | 6240d9e72a6f1696d7c37facf805af6ce2352ab2 (diff) | |
download | dexon-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.cpp | 28 |
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); +} |