aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/NameAndTypeResolver.cpp
diff options
context:
space:
mode:
authorchriseth <c@ethdev.com>2015-10-05 23:19:23 +0800
committerchriseth <c@ethdev.com>2015-10-06 20:20:06 +0800
commitbc609c55c0fa622a68fa9718c55046416c201b1d (patch)
tree0757a485f2e6c0e0c70bb924c4b4acfac53aec5c /libsolidity/NameAndTypeResolver.cpp
parentce25ddfa6a9b8cfff08b4a05591dcc3b4a8b63cc (diff)
downloaddexon-solidity-bc609c55c0fa622a68fa9718c55046416c201b1d.tar.gz
dexon-solidity-bc609c55c0fa622a68fa9718c55046416c201b1d.tar.zst
dexon-solidity-bc609c55c0fa622a68fa9718c55046416c201b1d.zip
Compute canonical names of types for function signatures.
Diffstat (limited to 'libsolidity/NameAndTypeResolver.cpp')
-rw-r--r--libsolidity/NameAndTypeResolver.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/libsolidity/NameAndTypeResolver.cpp b/libsolidity/NameAndTypeResolver.cpp
index c3e31728..6b9b9584 100644
--- a/libsolidity/NameAndTypeResolver.cpp
+++ b/libsolidity/NameAndTypeResolver.cpp
@@ -263,6 +263,7 @@ DeclarationRegistrationHelper::DeclarationRegistrationHelper(map<ASTNode const*,
bool DeclarationRegistrationHelper::visit(ContractDefinition& _contract)
{
registerDeclaration(_contract, true);
+ _contract.annotation().canonicalName = currentCanonicalName();
return true;
}
@@ -274,6 +275,7 @@ void DeclarationRegistrationHelper::endVisit(ContractDefinition&)
bool DeclarationRegistrationHelper::visit(StructDefinition& _struct)
{
registerDeclaration(_struct, true);
+ _struct.annotation().canonicalName = currentCanonicalName();
return true;
}
@@ -285,6 +287,7 @@ void DeclarationRegistrationHelper::endVisit(StructDefinition&)
bool DeclarationRegistrationHelper::visit(EnumDefinition& _enum)
{
registerDeclaration(_enum, true);
+ _enum.annotation().canonicalName = currentCanonicalName();
return true;
}
@@ -400,5 +403,21 @@ void DeclarationRegistrationHelper::registerDeclaration(Declaration& _declaratio
enterNewSubScope(_declaration);
}
+string DeclarationRegistrationHelper::currentCanonicalName() const
+{
+ string ret;
+ for (
+ Declaration const* scope = m_currentScope;
+ scope != nullptr;
+ scope = m_scopes[scope].enclosingDeclaration()
+ )
+ {
+ if (!ret.empty())
+ ret = "." + ret;
+ ret = scope->name() + ret;
+ }
+ return ret;
+}
+
}
}