diff options
author | chriseth <chris@ethereum.org> | 2018-10-17 23:05:49 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-17 23:05:49 +0800 |
commit | f2f72ff7eea9a461ae8c71a13428e499c8b91025 (patch) | |
tree | 02c46d9f13ff85b5a2ad3d124054bdfc71af4791 /libsolidity/codegen/ABIFunctions.cpp | |
parent | 6b7d182658988f22ba23cc3852510864881515e2 (diff) | |
parent | 16c2a775fd532c301eae3abecc8d68c5c421a9a0 (diff) | |
download | dexon-solidity-f2f72ff7eea9a461ae8c71a13428e499c8b91025.tar dexon-solidity-f2f72ff7eea9a461ae8c71a13428e499c8b91025.tar.gz dexon-solidity-f2f72ff7eea9a461ae8c71a13428e499c8b91025.tar.bz2 dexon-solidity-f2f72ff7eea9a461ae8c71a13428e499c8b91025.tar.lz dexon-solidity-f2f72ff7eea9a461ae8c71a13428e499c8b91025.tar.xz dexon-solidity-f2f72ff7eea9a461ae8c71a13428e499c8b91025.tar.zst dexon-solidity-f2f72ff7eea9a461ae8c71a13428e499c8b91025.zip |
Merge pull request #5227 from ethereum/doNotRemoveExternallyUsedFunction
Prevent externally used functions from being removed.
Diffstat (limited to 'libsolidity/codegen/ABIFunctions.cpp')
-rw-r--r-- | libsolidity/codegen/ABIFunctions.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/libsolidity/codegen/ABIFunctions.cpp b/libsolidity/codegen/ABIFunctions.cpp index 6c27533c..bd29b382 100644 --- a/libsolidity/codegen/ABIFunctions.cpp +++ b/libsolidity/codegen/ABIFunctions.cpp @@ -49,7 +49,7 @@ string ABIFunctions::tupleEncoder( if (_encodeAsLibraryTypes) functionName += "_library"; - return createFunction(functionName, [&]() { + return createExternallyUsedFunction(functionName, [&]() { solAssert(!_givenTypes.empty(), ""); // Note that the values are in reverse due to the difference in calling semantics. @@ -113,7 +113,7 @@ string ABIFunctions::tupleDecoder(TypePointers const& _types, bool _fromMemory) solAssert(!_types.empty(), ""); - return createFunction(functionName, [&]() { + return createExternallyUsedFunction(functionName, [&]() { TypePointers decodingTypes; for (auto const& t: _types) decodingTypes.emplace_back(t->decodingType()); @@ -176,13 +176,13 @@ string ABIFunctions::tupleDecoder(TypePointers const& _types, bool _fromMemory) }); } -string ABIFunctions::requestedFunctions() +pair<string, set<string>> ABIFunctions::requestedFunctions() { string result; for (auto const& f: m_requestedFunctions) result += f.second; m_requestedFunctions.clear(); - return result; + return make_pair(result, std::move(m_externallyUsedFunctions)); } string ABIFunctions::cleanupFunction(Type const& _type, bool _revertOnFailure) @@ -1697,6 +1697,13 @@ string ABIFunctions::createFunction(string const& _name, function<string ()> con return _name; } +string ABIFunctions::createExternallyUsedFunction(string const& _name, function<string ()> const& _creator) +{ + string name = createFunction(_name, _creator); + m_externallyUsedFunctions.insert(name); + return name; +} + size_t ABIFunctions::headSize(TypePointers const& _targetTypes) { size_t headSize = 0; |