Small issues with Canonical Function Signature

- Also added an extra test
This commit is contained in:
Lefteris Karapetsas 2015-01-07 10:45:59 +01:00
parent 24d7bdd3a9
commit df0dce584d
3 changed files with 10 additions and 17 deletions

View File

@ -110,14 +110,9 @@ void FunctionDefinition::checkTypeRequirements()
m_body->checkTypeRequirements();
}
std::string FunctionDefinition::getCanonicalSignature()
string FunctionDefinition::getCanonicalSignature() const
{
auto parameters = getParameters();
std::string ret = getName() + "(";
for (auto it = parameters.cbegin(); it != parameters.cend(); ++it)
ret += (*it)->getType()->toString() + (it + 1 == parameters.end() ? "" : ",");
return ret + ")";
return getName() + FunctionType(*this).getCanonicalSignature();
}
void Block::checkTypeRequirements()

9
AST.h
View File

@ -277,11 +277,10 @@ 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();
/// @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;

View File

@ -452,13 +452,12 @@ unsigned FunctionType::getSizeOnStack() const
}
}
std::string FunctionType::getCanonicalSignature() const
string FunctionType::getCanonicalSignature() const
{
auto parameters = getParameterTypes();
std::string ret = "NAME("; //TODO: how to get function name from FunctionType
string ret = "(";
for (auto it = parameters.cbegin(); it != parameters.cend(); ++it)
ret += (*it)->toString() + (it + 1 == m_parameterTypes.end() ? "" : ",");
for (auto it = m_parameterTypes.cbegin(); it != m_parameterTypes.cend(); ++it)
ret += (*it)->toString() + (it + 1 == m_parameterTypes.cend() ? "" : ",");
return ret + ")";
}