diff options
author | chriseth <chris@ethereum.org> | 2018-08-02 21:01:38 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-02 21:01:38 +0800 |
commit | 90a5928b883dc9bbc889269a4e86d3d32c79d8ca (patch) | |
tree | c5f1c13acbd203ae5cf3ef5f97717c72d6a80e9e /libsolidity/codegen/CompilerUtils.cpp | |
parent | f7c96c8dee43652e5c9c52078db524c27bc29aec (diff) | |
parent | 7a8a243eef5551189c51c753463683097cf92f94 (diff) | |
download | dexon-solidity-90a5928b883dc9bbc889269a4e86d3d32c79d8ca.tar dexon-solidity-90a5928b883dc9bbc889269a4e86d3d32c79d8ca.tar.gz dexon-solidity-90a5928b883dc9bbc889269a4e86d3d32c79d8ca.tar.bz2 dexon-solidity-90a5928b883dc9bbc889269a4e86d3d32c79d8ca.tar.lz dexon-solidity-90a5928b883dc9bbc889269a4e86d3d32c79d8ca.tar.xz dexon-solidity-90a5928b883dc9bbc889269a4e86d3d32c79d8ca.tar.zst dexon-solidity-90a5928b883dc9bbc889269a4e86d3d32c79d8ca.zip |
Merge pull request #4522 from ethereum/fullEncodingType
Isolate determining the encoding type into its own function.
Diffstat (limited to 'libsolidity/codegen/CompilerUtils.cpp')
-rw-r--r-- | libsolidity/codegen/CompilerUtils.cpp | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/libsolidity/codegen/CompilerUtils.cpp b/libsolidity/codegen/CompilerUtils.cpp index 2d81a106..bd3ec8f5 100644 --- a/libsolidity/codegen/CompilerUtils.cpp +++ b/libsolidity/codegen/CompilerUtils.cpp @@ -333,26 +333,19 @@ void CompilerUtils::encodeToMemory( ) { // stack: <v1> <v2> ... <vn> <mem> + bool const encoderV2 = m_context.experimentalFeatureActive(ExperimentalFeature::ABIEncoderV2); TypePointers targetTypes = _targetTypes.empty() ? _givenTypes : _targetTypes; solAssert(targetTypes.size() == _givenTypes.size(), ""); for (TypePointer& t: targetTypes) { - solUnimplementedAssert( - t->mobileType() && - t->mobileType()->interfaceType(_encodeAsLibraryTypes) && - t->mobileType()->interfaceType(_encodeAsLibraryTypes)->encodingType(), - "Encoding type \"" + t->toString() + "\" not yet implemented." - ); - t = t->mobileType()->interfaceType(_encodeAsLibraryTypes)->encodingType(); + TypePointer tEncoding = t->fullEncodingType(_encodeAsLibraryTypes, encoderV2, !_padToWordBoundaries); + solUnimplementedAssert(tEncoding, "Encoding type \"" + t->toString() + "\" not yet implemented."); + t = std::move(tEncoding); } if (_givenTypes.empty()) return; - else if ( - _padToWordBoundaries && - !_copyDynamicDataInPlace && - m_context.experimentalFeatureActive(ExperimentalFeature::ABIEncoderV2) - ) + else if (_padToWordBoundaries && !_copyDynamicDataInPlace && encoderV2) { // Use the new Yul-based encoding function auto stackHeightBefore = m_context.stackHeight(); |