This commit is contained in:
chriseth 2015-04-20 14:57:56 +02:00
parent 7a467bbf07
commit 8cd5eed17d
2 changed files with 17 additions and 15 deletions

View File

@ -24,10 +24,9 @@
#include <libsolidity/AST.h> #include <libsolidity/AST.h>
#include <libsolidity/Types.h> #include <libsolidity/Types.h>
namespace dev using namespace std;
{ using namespace dev;
namespace solidity using namespace dev::solidity;
{
bool DeclarationContainer::registerDeclaration(Declaration const& _declaration, bool _invisible, bool _update) bool DeclarationContainer::registerDeclaration(Declaration const& _declaration, bool _invisible, bool _update)
{ {
@ -62,7 +61,7 @@ bool DeclarationContainer::registerDeclaration(Declaration const& _declaration,
return true; return true;
} }
std::set<Declaration const*> DeclarationContainer::resolveName(ASTString const& _name, bool _recursive) const set<Declaration const*> DeclarationContainer::resolveName(ASTString const& _name, bool _recursive) const
{ {
solAssert(!_name.empty(), "Attempt to resolve empty name."); solAssert(!_name.empty(), "Attempt to resolve empty name.");
auto result = m_declarations.find(_name); auto result = m_declarations.find(_name);
@ -70,8 +69,5 @@ std::set<Declaration const*> DeclarationContainer::resolveName(ASTString const&
return result->second; return result->second;
if (_recursive && m_enclosingContainer) if (_recursive && m_enclosingContainer)
return m_enclosingContainer->resolveName(_name, true); return m_enclosingContainer->resolveName(_name, true);
return std::set<Declaration const*>({}); return set<Declaration const*>({});
}
}
} }

View File

@ -31,7 +31,7 @@ namespace dev
namespace solidity namespace solidity
{ {
NameAndTypeResolver::NameAndTypeResolver(std::vector<Declaration const*> const& _globals) NameAndTypeResolver::NameAndTypeResolver(vector<Declaration const*> const& _globals)
{ {
for (Declaration const* declaration: _globals) for (Declaration const* declaration: _globals)
m_scopes[nullptr].registerDeclaration(*declaration); m_scopes[nullptr].registerDeclaration(*declaration);
@ -119,7 +119,7 @@ set<Declaration const*> NameAndTypeResolver::resolveName(ASTString const& _name,
{ {
auto iterator = m_scopes.find(_scope); auto iterator = m_scopes.find(_scope);
if (iterator == end(m_scopes)) if (iterator == end(m_scopes))
return std::set<Declaration const*>({}); return set<Declaration const*>({});
return iterator->second.resolveName(_name, false); return iterator->second.resolveName(_name, false);
} }
@ -415,11 +415,17 @@ bool ReferencesResolver::visit(UserDefinedTypeName& _typeName)
{ {
auto declarations = m_resolver.getNameFromCurrentScope(_typeName.getName()); auto declarations = m_resolver.getNameFromCurrentScope(_typeName.getName());
if (declarations.empty()) if (declarations.empty())
BOOST_THROW_EXCEPTION(DeclarationError() << errinfo_sourceLocation(_typeName.getLocation()) BOOST_THROW_EXCEPTION(
<< errinfo_comment("Undeclared identifier.")); DeclarationError() <<
errinfo_sourceLocation(_typeName.getLocation()) <<
errinfo_comment("Undeclared identifier.")
);
else if (declarations.size() > 1) else if (declarations.size() > 1)
BOOST_THROW_EXCEPTION(DeclarationError() << errinfo_sourceLocation(_typeName.getLocation()) BOOST_THROW_EXCEPTION(
<< errinfo_comment("Duplicate identifier.")); DeclarationError() <<
errinfo_sourceLocation(_typeName.getLocation()) <<
errinfo_comment("Duplicate identifier.")
);
else else
_typeName.setReferencedDeclaration(**declarations.begin()); _typeName.setReferencedDeclaration(**declarations.begin());
return false; return false;