mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #7041 from ethereum/smt_function_sort
[SMTChecker] Allow symbolic functions to be created via Sort
This commit is contained in:
commit
aac226f7c1
@ -68,6 +68,11 @@ Expression SymbolicVariable::valueAtIndex(int _index) const
|
|||||||
return m_context.newVariable(uniqueSymbol(_index), m_sort);
|
return m_context.newVariable(uniqueSymbol(_index), m_sort);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string SymbolicVariable::nameAtIndex(int _index) const
|
||||||
|
{
|
||||||
|
return uniqueSymbol(_index);
|
||||||
|
}
|
||||||
|
|
||||||
string SymbolicVariable::uniqueSymbol(unsigned _index) const
|
string SymbolicVariable::uniqueSymbol(unsigned _index) const
|
||||||
{
|
{
|
||||||
return m_uniqueName + "_" + to_string(_index);
|
return m_uniqueName + "_" + to_string(_index);
|
||||||
@ -127,6 +132,17 @@ SymbolicFunctionVariable::SymbolicFunctionVariable(
|
|||||||
solAssert(m_type->category() == solidity::Type::Category::Function, "");
|
solAssert(m_type->category() == solidity::Type::Category::Function, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SymbolicFunctionVariable::SymbolicFunctionVariable(
|
||||||
|
SortPointer _sort,
|
||||||
|
string _uniqueName,
|
||||||
|
EncodingContext& _context
|
||||||
|
):
|
||||||
|
SymbolicVariable(move(_sort), move(_uniqueName), _context),
|
||||||
|
m_declaration(m_context.newVariable(currentName(), m_sort))
|
||||||
|
{
|
||||||
|
solAssert(m_sort->kind == Kind::Function, "");
|
||||||
|
}
|
||||||
|
|
||||||
void SymbolicFunctionVariable::resetDeclaration()
|
void SymbolicFunctionVariable::resetDeclaration()
|
||||||
{
|
{
|
||||||
m_declaration = m_context.newVariable(currentName(), m_sort);
|
m_declaration = m_context.newVariable(currentName(), m_sort);
|
||||||
|
@ -54,6 +54,7 @@ public:
|
|||||||
Expression currentValue() const;
|
Expression currentValue() const;
|
||||||
std::string currentName() const;
|
std::string currentName() const;
|
||||||
virtual Expression valueAtIndex(int _index) const;
|
virtual Expression valueAtIndex(int _index) const;
|
||||||
|
virtual std::string nameAtIndex(int _index) const;
|
||||||
virtual Expression increaseIndex();
|
virtual Expression increaseIndex();
|
||||||
virtual Expression operator()(std::vector<Expression> /*_arguments*/) const
|
virtual Expression operator()(std::vector<Expression> /*_arguments*/) const
|
||||||
{
|
{
|
||||||
@ -63,6 +64,7 @@ public:
|
|||||||
unsigned index() const { return m_ssa->index(); }
|
unsigned index() const { return m_ssa->index(); }
|
||||||
unsigned& index() { return m_ssa->index(); }
|
unsigned& index() { return m_ssa->index(); }
|
||||||
|
|
||||||
|
SortPointer const& sort() const { return m_sort; }
|
||||||
solidity::TypePointer const& type() const { return m_type; }
|
solidity::TypePointer const& type() const { return m_type; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -139,6 +141,11 @@ public:
|
|||||||
std::string _uniqueName,
|
std::string _uniqueName,
|
||||||
EncodingContext& _context
|
EncodingContext& _context
|
||||||
);
|
);
|
||||||
|
SymbolicFunctionVariable(
|
||||||
|
SortPointer _sort,
|
||||||
|
std::string _uniqueName,
|
||||||
|
EncodingContext& _context
|
||||||
|
);
|
||||||
|
|
||||||
Expression increaseIndex();
|
Expression increaseIndex();
|
||||||
Expression operator()(std::vector<Expression> _arguments) const;
|
Expression operator()(std::vector<Expression> _arguments) const;
|
||||||
|
Loading…
Reference in New Issue
Block a user