mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	[SMTChecker] Introduce SymbolicFunctionVariable
This commit is contained in:
		
							parent
							
								
									6240d9e72a
								
							
						
					
					
						commit
						de46bb2c42
					
				| @ -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); | ||||
| } | ||||
|  | ||||
| @ -49,7 +49,11 @@ public: | ||||
| 	smt::Expression currentValue() const; | ||||
| 	std::string currentName() const; | ||||
| 	virtual smt::Expression valueAtIndex(int _index) const; | ||||
| 	smt::Expression increaseIndex(); | ||||
| 	virtual smt::Expression increaseIndex(); | ||||
| 	virtual smt::Expression operator()(std::vector<smt::Expression> /*_arguments*/) const | ||||
| 	{ | ||||
| 		solAssert(false, "Function application to non-function."); | ||||
| 	} | ||||
| 
 | ||||
| 	unsigned index() const { return m_ssa->index(); } | ||||
| 	unsigned& index() { return m_ssa->index(); } | ||||
| @ -116,5 +120,28 @@ public: | ||||
| 	); | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  * Specialization of SymbolicVariable for FunctionType | ||||
|  */ | ||||
| class SymbolicFunctionVariable: public SymbolicVariable | ||||
| { | ||||
| public: | ||||
| 	SymbolicFunctionVariable( | ||||
| 		TypePointer _type, | ||||
| 		std::string const& _uniqueName, | ||||
| 		smt::SolverInterface& _interface | ||||
| 	); | ||||
| 
 | ||||
| 	smt::Expression increaseIndex(); | ||||
| 	smt::Expression operator()(std::vector<smt::Expression> _arguments) const; | ||||
| 
 | ||||
| private: | ||||
| 	/// Creates a new function declaration.
 | ||||
| 	void resetDeclaration(); | ||||
| 
 | ||||
| 	/// Stores the current function declaration.
 | ||||
| 	smt::Expression m_declaration; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user