|
|
|
@ -263,6 +263,10 @@ public:
|
|
|
|
|
/// Returns true if the type can be stored as a value (as opposed to a reference) on the stack,
|
|
|
|
|
/// i.e. it behaves differently in lvalue context and in value context.
|
|
|
|
|
virtual bool isValueType() const { return false; }
|
|
|
|
|
/// @returns true if this type can be used for variables. It returns false for
|
|
|
|
|
/// types like magic types, literals and function types with a kind that is not
|
|
|
|
|
/// internal or external.
|
|
|
|
|
virtual bool nameable() const { return false; }
|
|
|
|
|
/// @returns a list of named and typed stack items that determine the layout of this type on the stack.
|
|
|
|
|
/// A stack item either has an empty name and type ``nullptr`` referring to a single stack slot, or
|
|
|
|
|
/// has a non-empty name and a valid type referring to the stack layout of that type.
|
|
|
|
@ -402,6 +406,7 @@ public:
|
|
|
|
|
unsigned storageBytes() const override { return 160 / 8; }
|
|
|
|
|
bool leftAligned() const override { return false; }
|
|
|
|
|
bool isValueType() const override { return true; }
|
|
|
|
|
bool nameable() const override { return true; }
|
|
|
|
|
|
|
|
|
|
MemberList::MemberMap nativeMembers(ContractDefinition const*) const override;
|
|
|
|
|
|
|
|
|
@ -446,6 +451,7 @@ public:
|
|
|
|
|
unsigned storageBytes() const override { return m_bits / 8; }
|
|
|
|
|
bool leftAligned() const override { return false; }
|
|
|
|
|
bool isValueType() const override { return true; }
|
|
|
|
|
bool nameable() const override { return true; }
|
|
|
|
|
|
|
|
|
|
std::string toString(bool _short) const override;
|
|
|
|
|
|
|
|
|
@ -492,6 +498,7 @@ public:
|
|
|
|
|
unsigned storageBytes() const override { return m_totalBits / 8; }
|
|
|
|
|
bool leftAligned() const override { return false; }
|
|
|
|
|
bool isValueType() const override { return true; }
|
|
|
|
|
bool nameable() const override { return true; }
|
|
|
|
|
|
|
|
|
|
std::string toString(bool _short) const override;
|
|
|
|
|
|
|
|
|
@ -639,6 +646,7 @@ public:
|
|
|
|
|
unsigned storageBytes() const override { return m_bytes; }
|
|
|
|
|
bool leftAligned() const override { return true; }
|
|
|
|
|
bool isValueType() const override { return true; }
|
|
|
|
|
bool nameable() const override { return true; }
|
|
|
|
|
|
|
|
|
|
std::string toString(bool) const override { return "bytes" + util::toString(m_bytes); }
|
|
|
|
|
MemberList::MemberMap nativeMembers(ContractDefinition const*) const override;
|
|
|
|
@ -666,6 +674,7 @@ public:
|
|
|
|
|
unsigned storageBytes() const override { return 1; }
|
|
|
|
|
bool leftAligned() const override { return false; }
|
|
|
|
|
bool isValueType() const override { return true; }
|
|
|
|
|
bool nameable() const override { return true; }
|
|
|
|
|
|
|
|
|
|
std::string toString(bool) const override { return "bool"; }
|
|
|
|
|
u256 literalValue(Literal const* _literal) const override;
|
|
|
|
@ -773,6 +782,7 @@ public:
|
|
|
|
|
bool isDynamicallyEncoded() const override;
|
|
|
|
|
u256 storageSize() const override;
|
|
|
|
|
bool canLiveOutsideStorage() const override { return m_baseType->canLiveOutsideStorage(); }
|
|
|
|
|
bool nameable() const override { return true; }
|
|
|
|
|
std::string toString(bool _short) const override;
|
|
|
|
|
std::string canonicalName() const override;
|
|
|
|
|
std::string signatureInExternalFunction(bool _structsByName) const override;
|
|
|
|
@ -875,6 +885,7 @@ public:
|
|
|
|
|
bool leftAligned() const override { solAssert(!isSuper(), ""); return false; }
|
|
|
|
|
bool canLiveOutsideStorage() const override { return !isSuper(); }
|
|
|
|
|
bool isValueType() const override { return !isSuper(); }
|
|
|
|
|
bool nameable() const override { return !isSuper(); }
|
|
|
|
|
std::string toString(bool _short) const override;
|
|
|
|
|
std::string canonicalName() const override;
|
|
|
|
|
|
|
|
|
@ -935,6 +946,7 @@ public:
|
|
|
|
|
u256 memoryDataSize() const override;
|
|
|
|
|
u256 storageSize() const override;
|
|
|
|
|
bool canLiveOutsideStorage() const override { return true; }
|
|
|
|
|
bool nameable() const override { return true; }
|
|
|
|
|
std::string toString(bool _short) const override;
|
|
|
|
|
|
|
|
|
|
MemberList::MemberMap nativeMembers(ContractDefinition const* _currentScope) const override;
|
|
|
|
@ -997,6 +1009,7 @@ public:
|
|
|
|
|
std::string toString(bool _short) const override;
|
|
|
|
|
std::string canonicalName() const override;
|
|
|
|
|
bool isValueType() const override { return true; }
|
|
|
|
|
bool nameable() const override { return true; }
|
|
|
|
|
|
|
|
|
|
BoolResult isExplicitlyConvertibleTo(Type const& _convertTo) const override;
|
|
|
|
|
TypePointer encodingType() const override;
|
|
|
|
@ -1202,6 +1215,7 @@ public:
|
|
|
|
|
bool leftAligned() const override;
|
|
|
|
|
unsigned storageBytes() const override;
|
|
|
|
|
bool isValueType() const override { return true; }
|
|
|
|
|
bool nameable() const override;
|
|
|
|
|
bool canLiveOutsideStorage() const override { return m_kind == Kind::Internal || m_kind == Kind::External; }
|
|
|
|
|
bool hasSimpleZeroValueInMemory() const override { return false; }
|
|
|
|
|
MemberList::MemberMap nativeMembers(ContractDefinition const* _currentScope) const override;
|
|
|
|
@ -1339,6 +1353,7 @@ public:
|
|
|
|
|
bool dataStoredIn(DataLocation _location) const override { return _location == DataLocation::Storage; }
|
|
|
|
|
/// Cannot be stored in memory, but just in case.
|
|
|
|
|
bool hasSimpleZeroValueInMemory() const override { solAssert(false, ""); }
|
|
|
|
|
bool nameable() const override { return true; }
|
|
|
|
|
|
|
|
|
|
Type const* keyType() const { return m_keyType; }
|
|
|
|
|
Type const* valueType() const { return m_valueType; }
|
|
|
|
|