aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/codegen/CompilerUtils.cpp
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-08-02 21:01:38 +0800
committerGitHub <noreply@github.com>2018-08-02 21:01:38 +0800
commit90a5928b883dc9bbc889269a4e86d3d32c79d8ca (patch)
treec5f1c13acbd203ae5cf3ef5f97717c72d6a80e9e /libsolidity/codegen/CompilerUtils.cpp
parentf7c96c8dee43652e5c9c52078db524c27bc29aec (diff)
parent7a8a243eef5551189c51c753463683097cf92f94 (diff)
downloaddexon-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.cpp17
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();