/*
This file is part of solidity.
solidity is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
solidity is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with solidity. If not, see .
*/
#include
#include
#include
#include
#include
using namespace std;
using namespace dev::solidity;
bool dev::solidity::isSupportedType(Type::Category _category)
{
return isInteger(_category) || isBool(_category);
}
bool dev::solidity::isSupportedType(Type const& _type)
{
return isSupportedType(_type.category());
}
bool dev::solidity::isInteger(Type::Category _category)
{
return _category == Type::Category::Integer || _category == Type::Category::Address;
}
bool dev::solidity::isInteger(Type const& _type)
{
return isInteger(_type.category());
}
bool dev::solidity::isBool(Type::Category _category)
{
return _category == Type::Category::Bool;
}
bool dev::solidity::isBool(Type const& _type)
{
return isBool(_type.category());
}
shared_ptr dev::solidity::newSymbolicVariable(Type const& _type, std::string const& _uniqueName, smt::SolverInterface& _solver)
{
if (!isSupportedType(_type))
return nullptr;
if (isBool(_type.category()))
return make_shared(_type, _uniqueName, _solver);
else if (isInteger(_type.category()))
return make_shared(_type, _uniqueName, _solver);
else
solAssert(false, "");
}