diff options
Diffstat (limited to 'libsolidity/NameAndTypeResolver.cpp')
-rw-r--r-- | libsolidity/NameAndTypeResolver.cpp | 19 |
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; +} + } } |