mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
clarification on dynamic arrays, switcheroo on typepointer, and a documentation test added
This commit is contained in:
parent
b230fe1905
commit
c45593a444
@ -318,7 +318,7 @@ Can state variables be initialized in-line?
|
|||||||
===========================================
|
===========================================
|
||||||
|
|
||||||
Yes, this is possible for all types (even for structs). However, for arrays it
|
Yes, this is possible for all types (even for structs). However, for arrays it
|
||||||
should be noted that you must declare them as static memory arrays. Futhermore, multi dimensional arrays cannot be declared inline.
|
should be noted that you must declare them as static memory arrays.
|
||||||
|
|
||||||
Examples::
|
Examples::
|
||||||
|
|
||||||
|
@ -784,7 +784,6 @@ bool TypeChecker::visit(TupleExpression const& _tuple)
|
|||||||
{
|
{
|
||||||
vector<ASTPointer<Expression>> const& components = _tuple.components();
|
vector<ASTPointer<Expression>> const& components = _tuple.components();
|
||||||
TypePointers types;
|
TypePointers types;
|
||||||
TypePointer inlineArrayType;
|
|
||||||
|
|
||||||
if (_tuple.annotation().lValueRequested)
|
if (_tuple.annotation().lValueRequested)
|
||||||
{
|
{
|
||||||
@ -807,6 +806,7 @@ bool TypeChecker::visit(TupleExpression const& _tuple)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
TypePointer inlineArrayType;
|
||||||
for (size_t i = 0; i < components.size(); ++i)
|
for (size_t i = 0; i < components.size(); ++i)
|
||||||
{
|
{
|
||||||
// Outside of an lvalue-context, the only situation where a component can be empty is (x,).
|
// Outside of an lvalue-context, the only situation where a component can be empty is (x,).
|
||||||
|
@ -6123,6 +6123,23 @@ BOOST_AUTO_TEST_CASE(inline_array_storage_to_memory_conversion_strings)
|
|||||||
BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0x40), u256(0x80), u256(3), string("ray"), u256(2), string("mi")));
|
BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0x40), u256(0x80), u256(3), string("ray"), u256(2), string("mi")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(inline_array_strings_from_document)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract C {
|
||||||
|
function f(uint i) returns (string) {
|
||||||
|
string[4] memory x = ["This", "is", "an", "array"];
|
||||||
|
return (x[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
compileAndRun(sourceCode);
|
||||||
|
BOOST_CHECK(callContractFunction("f(uint256)", u256(0)) == encodeArgs(u256(0x20), u256(4), string("This")));
|
||||||
|
BOOST_CHECK(callContractFunction("f(uint256)", u256(1)) == encodeArgs(u256(0x20), u256(2), string("is")));
|
||||||
|
BOOST_CHECK(callContractFunction("f(uint256)", u256(2)) == encodeArgs(u256(0x20), u256(2), string("an")));
|
||||||
|
BOOST_CHECK(callContractFunction("f(uint256)", u256(3)) == encodeArgs(u256(0x20), u256(5), string("array")));
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(inline_array_storage_to_memory_conversion_ints)
|
BOOST_AUTO_TEST_CASE(inline_array_storage_to_memory_conversion_ints)
|
||||||
{
|
{
|
||||||
char const* sourceCode = R"(
|
char const* sourceCode = R"(
|
||||||
|
@ -2883,11 +2883,11 @@ BOOST_AUTO_TEST_CASE(dynamic_inline_array)
|
|||||||
char const* text = R"(
|
char const* text = R"(
|
||||||
contract C {
|
contract C {
|
||||||
function f() {
|
function f() {
|
||||||
uint[4][4] memory dyn = [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7]];
|
uint8[4][4] memory dyn = [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
BOOST_CHECK(expectError(text) == Error::Type::TypeError);
|
BOOST_CHECK(success(text));
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(lvalues_as_inline_array)
|
BOOST_AUTO_TEST_CASE(lvalues_as_inline_array)
|
||||||
|
Loading…
Reference in New Issue
Block a user