Merge pull request #738 from LefterisJP/sol_abiFunctionHash

Canonical Function signature creation in solidity
This commit is contained in:
Gav Wood 2015-01-07 16:32:13 +01:00
commit 53e38b3ac9
4 changed files with 21 additions and 0 deletions

View File

@ -110,6 +110,11 @@ void FunctionDefinition::checkTypeRequirements()
m_body->checkTypeRequirements();
}
string FunctionDefinition::getCanonicalSignature() const
{
return getName() + FunctionType(*this).getCanonicalSignature();
}
void Block::checkTypeRequirements()
{
for (shared_ptr<Statement> const& statement: m_statements)

5
AST.h
View File

@ -277,6 +277,11 @@ public:
/// Checks that all parameters have allowed types and calls checkTypeRequirements on the body.
void checkTypeRequirements();
/// @returns the canonical signature of the function
/// That consists of the name of the function followed by the types of the
/// arguments separated by commas all enclosed in parentheses without any spaces.
std::string getCanonicalSignature() const;
private:
bool m_isPublic;
ASTPointer<ParameterList> m_parameters;

View File

@ -484,6 +484,16 @@ unsigned FunctionType::getSizeOnStack() const
}
}
string FunctionType::getCanonicalSignature() const
{
string ret = "(";
for (auto it = m_parameterTypes.cbegin(); it != m_parameterTypes.cend(); ++it)
ret += (*it)->toString() + (it + 1 == m_parameterTypes.cend() ? "" : ",");
return ret + ")";
}
bool MappingType::operator==(Type const& _other) const
{
if (_other.getCategory() != getCategory())

View File

@ -338,6 +338,7 @@ public:
virtual unsigned getSizeOnStack() const override;
Location const& getLocation() const { return m_location; }
std::string getCanonicalSignature() const;
private:
TypePointers m_parameterTypes;