diff options
author | chriseth <chris@ethereum.org> | 2018-01-17 19:05:43 +0800 |
---|---|---|
committer | chriseth <chris@ethereum.org> | 2018-10-17 20:12:10 +0800 |
commit | 5e01d767d02d064a064a67dcf95ee299c46f741f (patch) | |
tree | 055a2533fa92111b85203eff0f1f1e8c63e38492 /libsolidity/codegen/ABIFunctions.cpp | |
parent | ba1588828f45b242bc09899e4f307f7fda9c5ab6 (diff) | |
download | dexon-solidity-5e01d767d02d064a064a67dcf95ee299c46f741f.tar dexon-solidity-5e01d767d02d064a064a67dcf95ee299c46f741f.tar.gz dexon-solidity-5e01d767d02d064a064a67dcf95ee299c46f741f.tar.bz2 dexon-solidity-5e01d767d02d064a064a67dcf95ee299c46f741f.tar.lz dexon-solidity-5e01d767d02d064a064a67dcf95ee299c46f741f.tar.xz dexon-solidity-5e01d767d02d064a064a67dcf95ee299c46f741f.tar.zst dexon-solidity-5e01d767d02d064a064a67dcf95ee299c46f741f.zip |
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; |