diff --git a/libsolidity/AST.cpp b/libsolidity/AST.cpp index 1fa6d8f6f..629525210 100644 --- a/libsolidity/AST.cpp +++ b/libsolidity/AST.cpp @@ -110,6 +110,23 @@ void FunctionDefinition::checkTypeRequirements() m_body->checkTypeRequirements(); } +std::string FunctionDefinition::getCanonicalSignature() +{ + auto parameters = getParameters(); + std::string ret = getName() + "("; + unsigned int i = 1; + + for (ASTPointer const& member: parameters) + { + ret += member->getType()->toString(); + if (i != parameters.size()) { + ret += ","; + } + } + ret += ")"; + return ret; +} + void Block::checkTypeRequirements() { for (shared_ptr const& statement: m_statements) diff --git a/libsolidity/AST.h b/libsolidity/AST.h index b7c3dc6c0..32cc23a5b 100644 --- a/libsolidity/AST.h +++ b/libsolidity/AST.h @@ -277,6 +277,12 @@ 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(); + private: bool m_isPublic; ASTPointer m_parameters;