aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/formal/SolverInterface.h
diff options
context:
space:
mode:
authorLeonardo Alt <leonardoaltt@gmail.com>2018-01-21 20:58:56 +0800
committerLeonardo Alt <leonardoaltt@gmail.com>2018-03-13 03:16:47 +0800
commit6a940f0a99e941c48e5deb695e89ac52784c4f3c (patch)
tree547d592bca858c48dbdce61aafb2b71ac7369338 /libsolidity/formal/SolverInterface.h
parent886dc0512cba2c6bd6198eca88f1e84c55d392e5 (diff)
downloaddexon-solidity-6a940f0a99e941c48e5deb695e89ac52784c4f3c.tar
dexon-solidity-6a940f0a99e941c48e5deb695e89ac52784c4f3c.tar.gz
dexon-solidity-6a940f0a99e941c48e5deb695e89ac52784c4f3c.tar.bz2
dexon-solidity-6a940f0a99e941c48e5deb695e89ac52784c4f3c.tar.lz
dexon-solidity-6a940f0a99e941c48e5deb695e89ac52784c4f3c.tar.xz
dexon-solidity-6a940f0a99e941c48e5deb695e89ac52784c4f3c.tar.zst
dexon-solidity-6a940f0a99e941c48e5deb695e89ac52784c4f3c.zip
[SMTChecker] Support to Bool variables
Diffstat (limited to 'libsolidity/formal/SolverInterface.h')
-rw-r--r--libsolidity/formal/SolverInterface.h15
1 files changed, 10 insertions, 5 deletions
diff --git a/libsolidity/formal/SolverInterface.h b/libsolidity/formal/SolverInterface.h
index 88487310..38d3236e 100644
--- a/libsolidity/formal/SolverInterface.h
+++ b/libsolidity/formal/SolverInterface.h
@@ -46,7 +46,8 @@ enum class Sort
{
Int,
Bool,
- IntIntFun // Function of one Int returning a single Int
+ IntIntFun, // Function of one Int returning a single Int
+ IntBoolFun // Function of one Int returning a single Bool
};
/// C++ representation of an SMTLIB2 expression.
@@ -132,10 +133,12 @@ public:
Expression operator()(Expression _a) const
{
solAssert(
- sort == Sort::IntIntFun && arguments.empty(),
+ (sort == Sort::IntIntFun || sort == Sort::IntBoolFun) && arguments.empty(),
"Attempted function application to non-function."
);
- return Expression(name, _a, Sort::Int);
+ if (sort == Sort::IntIntFun)
+ return Expression(name, _a, Sort::Int);
+ return Expression(name, _a, Sort::Bool);
}
std::string const name;
@@ -167,9 +170,11 @@ public:
virtual Expression newFunction(std::string _name, Sort _domain, Sort _codomain)
{
- solAssert(_domain == Sort::Int && _codomain == Sort::Int, "Function sort not supported.");
+ solAssert(_domain == Sort::Int && (_codomain == Sort::Int || _codomain == Sort::Bool), "Function sort not supported.");
// Subclasses should do something here
- return Expression(std::move(_name), {}, Sort::IntIntFun);
+ if (_codomain == Sort::Int)
+ return Expression(std::move(_name), {}, Sort::IntIntFun);
+ return Expression(std::move(_name), {}, Sort::IntBoolFun);
}
virtual Expression newInteger(std::string _name)
{