diff options
author | chriseth <c@ethdev.com> | 2016-09-29 01:22:23 +0800 |
---|---|---|
committer | chriseth <c@ethdev.com> | 2016-11-16 21:37:17 +0800 |
commit | dd173f83e3a6a9046d1aa7e64cb171598a73b272 (patch) | |
tree | 7c5b47b6a4b15a151284d6503af27667993a782b /libsolidity/ast | |
parent | cc8583ec7d6fd86ca7e129475fde32b76d102e79 (diff) | |
download | dexon-solidity-dd173f83e3a6a9046d1aa7e64cb171598a73b272.tar.gz dexon-solidity-dd173f83e3a6a9046d1aa7e64cb171598a73b272.tar.zst dexon-solidity-dd173f83e3a6a9046d1aa7e64cb171598a73b272.zip |
Code generator for function types.
Diffstat (limited to 'libsolidity/ast')
-rw-r--r-- | libsolidity/ast/Types.cpp | 12 | ||||
-rw-r--r-- | libsolidity/ast/Types.h | 1 |
2 files changed, 12 insertions, 1 deletions
diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index 808b0c55..19a1b9d1 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -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 diff --git a/libsolidity/ast/Types.h b/libsolidity/ast/Types.h index 358c7efc..691ddf29 100644 --- a/libsolidity/ast/Types.h +++ b/libsolidity/ast/Types.h @@ -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 |