diff options
author | Lefteris Karapetsas <lefteris@refu.co> | 2015-08-19 20:57:25 +0800 |
---|---|---|
committer | Lefteris Karapetsas <lefteris@refu.co> | 2015-08-19 20:57:25 +0800 |
commit | 1690f1c947b1b1bfaf84d0a586d2a56ffed11f37 (patch) | |
tree | cbf27ebb57b629ae7a4a10cc1342a359481de7d3 /src/DeclarationContainer.cpp | |
parent | 2f41438715137e7f123481b2ca8e163a4d35bd78 (diff) | |
download | dexon-solidity-1690f1c947b1b1bfaf84d0a586d2a56ffed11f37.tar dexon-solidity-1690f1c947b1b1bfaf84d0a586d2a56ffed11f37.tar.gz dexon-solidity-1690f1c947b1b1bfaf84d0a586d2a56ffed11f37.tar.bz2 dexon-solidity-1690f1c947b1b1bfaf84d0a586d2a56ffed11f37.tar.lz dexon-solidity-1690f1c947b1b1bfaf84d0a586d2a56ffed11f37.tar.xz dexon-solidity-1690f1c947b1b1bfaf84d0a586d2a56ffed11f37.tar.zst dexon-solidity-1690f1c947b1b1bfaf84d0a586d2a56ffed11f37.zip |
Add CMakeLists.txt for libsolidity
Diffstat (limited to 'src/DeclarationContainer.cpp')
-rw-r--r-- | src/DeclarationContainer.cpp | 85 |
1 files changed, 0 insertions, 85 deletions
diff --git a/src/DeclarationContainer.cpp b/src/DeclarationContainer.cpp deleted file mode 100644 index 3e23d93b..00000000 --- a/src/DeclarationContainer.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* - This file is part of cpp-ethereum. - - cpp-ethereum is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - cpp-ethereum is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>. -*/ -/** - * @author Christian <c@ethdev.com> - * @date 2014 - * Scope - object that holds declaration of names. - */ - -#include <libsolidity/DeclarationContainer.h> -#include <libsolidity/AST.h> -#include <libsolidity/Types.h> - -using namespace std; -using namespace dev; -using namespace dev::solidity; - -Declaration const* DeclarationContainer::conflictingDeclaration(Declaration const& _declaration) const -{ - ASTString const& name(_declaration.getName()); - solAssert(!name.empty(), ""); - vector<Declaration const*> declarations; - if (m_declarations.count(name)) - declarations += m_declarations.at(name); - if (m_invisibleDeclarations.count(name)) - declarations += m_invisibleDeclarations.at(name); - - if (dynamic_cast<FunctionDefinition const*>(&_declaration)) - { - // check that all other declarations with the same name are functions - for (Declaration const* declaration: declarations) - if (!dynamic_cast<FunctionDefinition const*>(declaration)) - return declaration; - } - else if (!declarations.empty()) - return declarations.front(); - - return nullptr; -} - -bool DeclarationContainer::registerDeclaration(Declaration const& _declaration, bool _invisible, bool _update) -{ - ASTString const& name(_declaration.getName()); - if (name.empty()) - return true; - - if (_update) - { - solAssert(!dynamic_cast<FunctionDefinition const*>(&_declaration), "Attempt to update function definition."); - m_declarations.erase(name); - m_invisibleDeclarations.erase(name); - } - else if (conflictingDeclaration(_declaration)) - return false; - - if (_invisible) - m_invisibleDeclarations[name].push_back(&_declaration); - else - m_declarations[name].push_back(&_declaration); - return true; -} - -std::vector<Declaration const*> DeclarationContainer::resolveName(ASTString const& _name, bool _recursive) const -{ - solAssert(!_name.empty(), "Attempt to resolve empty name."); - auto result = m_declarations.find(_name); - if (result != m_declarations.end()) - return result->second; - if (_recursive && m_enclosingContainer) - return m_enclosingContainer->resolveName(_name, true); - return vector<Declaration const*>({}); -} |