mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Tests and some code for msg.data.
This commit is contained in:
parent
1369337808
commit
20b4c69009
3
AST.cpp
3
AST.cpp
@ -403,7 +403,8 @@ void Assignment::checkTypeRequirements()
|
|||||||
m_leftHandSide->checkTypeRequirements();
|
m_leftHandSide->checkTypeRequirements();
|
||||||
m_leftHandSide->requireLValue();
|
m_leftHandSide->requireLValue();
|
||||||
//@todo later, assignments to structs might be possible, but not to mappings
|
//@todo later, assignments to structs might be possible, but not to mappings
|
||||||
if (!m_leftHandSide->getType()->isValueType() && !m_leftHandSide->isLocalLValue())
|
if (m_leftHandSide->getType()->getCategory() != Type::Category::ByteArray &&
|
||||||
|
!m_leftHandSide->getType()->isValueType() && !m_leftHandSide->isLocalLValue())
|
||||||
BOOST_THROW_EXCEPTION(createTypeError("Assignment to non-local non-value lvalue."));
|
BOOST_THROW_EXCEPTION(createTypeError("Assignment to non-local non-value lvalue."));
|
||||||
m_type = m_leftHandSide->getType();
|
m_type = m_leftHandSide->getType();
|
||||||
if (m_assigmentOperator == Token::Assign)
|
if (m_assigmentOperator == Token::Assign)
|
||||||
|
14
Types.cpp
14
Types.cpp
@ -508,6 +508,16 @@ TypePointer ContractType::unaryOperatorResult(Token::Value _operator) const
|
|||||||
return _operator == Token::Delete ? make_shared<VoidType>() : TypePointer();
|
return _operator == Token::Delete ? make_shared<VoidType>() : TypePointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ByteArrayType::isImplicitlyConvertibleTo(const Type& _convertTo) const
|
||||||
|
{
|
||||||
|
if (*this == _convertTo)
|
||||||
|
return true;
|
||||||
|
if (_convertTo.getCategory() != Category::ByteArray)
|
||||||
|
return false;
|
||||||
|
auto const& other = dynamic_cast<ByteArrayType const&>(_convertTo);
|
||||||
|
return (m_dynamicLength == other.m_dynamicLength || m_length == other.m_length);
|
||||||
|
}
|
||||||
|
|
||||||
bool ByteArrayType::operator==(Type const& _other) const
|
bool ByteArrayType::operator==(Type const& _other) const
|
||||||
{
|
{
|
||||||
if (_other.getCategory() != getCategory())
|
if (_other.getCategory() != getCategory())
|
||||||
@ -952,7 +962,9 @@ MagicType::MagicType(MagicType::Kind _kind):
|
|||||||
case Kind::Message:
|
case Kind::Message:
|
||||||
m_members = MemberList({{"sender", make_shared<IntegerType>(0, IntegerType::Modifier::Address)},
|
m_members = MemberList({{"sender", make_shared<IntegerType>(0, IntegerType::Modifier::Address)},
|
||||||
{"gas", make_shared<IntegerType>(256)},
|
{"gas", make_shared<IntegerType>(256)},
|
||||||
{"value", make_shared<IntegerType>(256)}});
|
{"value", make_shared<IntegerType>(256)},
|
||||||
|
{"data", make_shared<ByteArrayType>(ByteArrayType::Location::CallData,
|
||||||
|
0, 0, true)}});
|
||||||
break;
|
break;
|
||||||
case Kind::Transaction:
|
case Kind::Transaction:
|
||||||
m_members = MemberList({{"origin", make_shared<IntegerType>(0, IntegerType::Modifier::Address)},
|
m_members = MemberList({{"origin", make_shared<IntegerType>(0, IntegerType::Modifier::Address)},
|
||||||
|
2
Types.h
2
Types.h
@ -287,11 +287,11 @@ public:
|
|||||||
virtual Category getCategory() const override { return Category::ByteArray; }
|
virtual Category getCategory() const override { return Category::ByteArray; }
|
||||||
ByteArrayType(Location _location, u256 const& _offset, u256 const& _length, bool _dynamicLength):
|
ByteArrayType(Location _location, u256 const& _offset, u256 const& _length, bool _dynamicLength):
|
||||||
m_location(_location), m_offset(_offset), m_length(_length), m_dynamicLength(_dynamicLength) {}
|
m_location(_location), m_offset(_offset), m_length(_length), m_dynamicLength(_dynamicLength) {}
|
||||||
|
virtual bool isImplicitlyConvertibleTo(Type const& _convertTo) const override;
|
||||||
virtual bool operator==(const Type& _other) const override;
|
virtual bool operator==(const Type& _other) const override;
|
||||||
virtual unsigned getSizeOnStack() const override { return 1; /* TODO */ }
|
virtual unsigned getSizeOnStack() const override { return 1; /* TODO */ }
|
||||||
virtual std::string toString() const override { return "bytes"; }
|
virtual std::string toString() const override { return "bytes"; }
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Location m_location;
|
Location m_location;
|
||||||
u256 m_offset;
|
u256 m_offset;
|
||||||
|
Loading…
Reference in New Issue
Block a user