aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AST.cpp17
-rw-r--r--AST.h6
2 files changed, 23 insertions, 0 deletions
diff --git a/AST.cpp b/AST.cpp
index 1fa6d8f6..62952521 100644
--- a/AST.cpp
+++ b/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<VariableDeclaration> const& member: parameters)
+ {
+ ret += member->getType()->toString();
+ if (i != parameters.size()) {
+ ret += ",";
+ }
+ }
+ ret += ")";
+ return ret;
+}
+
void Block::checkTypeRequirements()
{
for (shared_ptr<Statement> const& statement: m_statements)
diff --git a/AST.h b/AST.h
index b7c3dc6c..32cc23a5 100644
--- a/AST.h
+++ b/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<ParameterList> m_parameters;