aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity
diff options
context:
space:
mode:
Diffstat (limited to 'libsolidity')
-rw-r--r--libsolidity/ast/Types.cpp6
-rw-r--r--libsolidity/interface/ABI.cpp4
2 files changed, 8 insertions, 2 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, ",") + ")";
}
diff --git a/libsolidity/interface/ABI.cpp b/libsolidity/interface/ABI.cpp
index c04de57e..0e28d010 100644
--- a/libsolidity/interface/ABI.cpp
+++ b/libsolidity/interface/ABI.cpp
@@ -152,7 +152,9 @@ Json::Value ABI::formatType(string const& _name, Type const& _type, bool _forLib
for (auto const& member: structType->members(nullptr))
{
solAssert(member.type, "");
- ret["type"].append(formatType(member.name, *member.type, _forLibrary));
+ auto t = member.type->interfaceType(_forLibrary);
+ solAssert(t, "");
+ ret["type"].append(formatType(member.name, *t, _forLibrary));
}
}
else