aboutsummaryrefslogtreecommitdiffstats
path: root/AST.cpp
diff options
context:
space:
mode:
authorGav Wood <i@gavwood.com>2015-01-09 22:19:01 +0800
committerGav Wood <i@gavwood.com>2015-01-09 22:19:01 +0800
commit43d79cc7305524bb8503e660cfd43c121706e1ed (patch)
treef25900a00a0a1b20998ec91d5da9730b3b78deab /AST.cpp
parent875ec9d47178637bc8608204a8520c1487c064e4 (diff)
parenta60d82d12ce84c87ae28e16dcd5002643f49637b (diff)
downloaddexon-solidity-43d79cc7305524bb8503e660cfd43c121706e1ed.tar
dexon-solidity-43d79cc7305524bb8503e660cfd43c121706e1ed.tar.gz
dexon-solidity-43d79cc7305524bb8503e660cfd43c121706e1ed.tar.bz2
dexon-solidity-43d79cc7305524bb8503e660cfd43c121706e1ed.tar.lz
dexon-solidity-43d79cc7305524bb8503e660cfd43c121706e1ed.tar.xz
dexon-solidity-43d79cc7305524bb8503e660cfd43c121706e1ed.tar.zst
dexon-solidity-43d79cc7305524bb8503e660cfd43c121706e1ed.zip
Merge branch 'develop' of github.com:ethereum/cpp-ethereum into develop
Conflicts: test/SolidityOptimizer.cpp
Diffstat (limited to 'AST.cpp')
-rw-r--r--AST.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/AST.cpp b/AST.cpp
index 79ac314c..d171006a 100644
--- a/AST.cpp
+++ b/AST.cpp
@@ -27,6 +27,8 @@
#include <libsolidity/Exceptions.h>
#include <libsolidity/AST_accept.h>
+#include <libdevcrypto/SHA3.h>
+
using namespace std;
namespace dev
@@ -50,18 +52,17 @@ void ContractDefinition::checkTypeRequirements()
function->checkTypeRequirements();
}
-vector<FunctionDefinition const*> ContractDefinition::getInterfaceFunctions() const
+map<FixedHash<4>, FunctionDefinition const*> ContractDefinition::getInterfaceFunctions() const
{
- vector<FunctionDefinition const*> exportedFunctions;
+ map<FixedHash<4>, FunctionDefinition const*> exportedFunctions;
for (ASTPointer<FunctionDefinition> const& f: m_definedFunctions)
if (f->isPublic() && f->getName() != getName())
- exportedFunctions.push_back(f.get());
- auto compareNames = [](FunctionDefinition const* _a, FunctionDefinition const* _b)
- {
- return _a->getName().compare(_b->getName()) < 0;
- };
+ {
+ FixedHash<4> hash(dev::sha3(f->getCanonicalSignature()));
+ auto res = exportedFunctions.insert(std::make_pair(hash,f.get()));
+ solAssert(res.second, "Hash collision at Function Definition Hash calculation");
+ }
- sort(exportedFunctions.begin(), exportedFunctions.end(), compareNames);
return exportedFunctions;
}