mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Code generator for function types.
This commit is contained in:
@@ -2065,6 +2065,16 @@ MemberList::MemberMap FunctionType::nativeMembers(ContractDefinition const*) con
|
||||
}
|
||||
}
|
||||
|
||||
TypePointer FunctionType::encodingType() const
|
||||
{
|
||||
// Only external functions can be encoded, internal functions cannot leave code boundaries.
|
||||
if (m_location == Location::External)
|
||||
// This looks like bytes24, but bytes24 is stored differently on the stack.
|
||||
return shared_from_this();
|
||||
else
|
||||
return TypePointer();
|
||||
}
|
||||
|
||||
TypePointer FunctionType::interfaceType(bool _inLibrary) const
|
||||
{
|
||||
if (m_location != Location::External && m_location != Location::Internal)
|
||||
@@ -2072,7 +2082,7 @@ TypePointer FunctionType::interfaceType(bool _inLibrary) const
|
||||
if (_inLibrary)
|
||||
return shared_from_this();
|
||||
else
|
||||
return make_shared<FixedBytesType>(storageBytes());
|
||||
return make_shared<IntegerType>(8 * storageBytes());
|
||||
}
|
||||
|
||||
bool FunctionType::canTakeArguments(TypePointers const& _argumentTypes, TypePointer const& _selfType) const
|
||||
|
||||
@@ -901,6 +901,7 @@ public:
|
||||
virtual bool canLiveOutsideStorage() const override { return m_location == Location::Internal || m_location == Location::External; }
|
||||
virtual unsigned sizeOnStack() const override;
|
||||
virtual MemberList::MemberMap nativeMembers(ContractDefinition const* _currentScope) const override;
|
||||
virtual TypePointer encodingType() const override;
|
||||
virtual TypePointer interfaceType(bool _inLibrary) const override;
|
||||
|
||||
/// @returns TypePointer of a new FunctionType object. All input/return parameters are an
|
||||
|
||||
Reference in New Issue
Block a user