diff options
Diffstat (limited to 'libsolidity/ast')
| -rw-r--r-- | libsolidity/ast/Types.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index 9fdfe632..14b30df8 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -1783,6 +1783,8 @@ TypePointer StructType::interfaceType(bool _inLibrary) const if (_inLibrary && location() == DataLocation::Storage) return shared_from_this(); else if (!recursive()) + // TODO this might not be enough, we have to convert all members to + // their interfaceType return copyForLocation(DataLocation::Memory, true); else return TypePointer(); @@ -1805,7 +1807,9 @@ string StructType::signatureInExternalFunction(bool _structsByName) const auto memberTypeStrings = memberTypes | boost::adaptors::transformed([&](TypePointer _t) -> string { solAssert(_t, "Parameter should have external type."); - return _t->signatureInExternalFunction(_structsByName); + auto t = _t->interfaceType(_structsByName); + solAssert(t, ""); + return t->signatureInExternalFunction(_structsByName); }); return "(" + boost::algorithm::join(memberTypeStrings, ",") + ")"; } |
