aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian <c@ethdev.com>2015-02-20 22:52:30 +0800
committerChristian <c@ethdev.com>2015-02-21 22:10:01 +0800
commitc8cec8d0b3d8f6b25d485ca3b187a85fd71191cc (patch)
treecdc5bd811d8aa68513a18073f96bb5a57d4cdd10
parent4144c63d9f1b7b25c4aaee29c21f412590aefe29 (diff)
downloaddexon-solidity-c8cec8d0b3d8f6b25d485ca3b187a85fd71191cc.tar
dexon-solidity-c8cec8d0b3d8f6b25d485ca3b187a85fd71191cc.tar.gz
dexon-solidity-c8cec8d0b3d8f6b25d485ca3b187a85fd71191cc.tar.bz2
dexon-solidity-c8cec8d0b3d8f6b25d485ca3b187a85fd71191cc.tar.lz
dexon-solidity-c8cec8d0b3d8f6b25d485ca3b187a85fd71191cc.tar.xz
dexon-solidity-c8cec8d0b3d8f6b25d485ca3b187a85fd71191cc.tar.zst
dexon-solidity-c8cec8d0b3d8f6b25d485ca3b187a85fd71191cc.zip
Parsing of array types and basic implementation.
-rw-r--r--SolidityNameAndTypeResolution.cpp9
-rw-r--r--SolidityParser.cpp40
2 files changed, 49 insertions, 0 deletions
diff --git a/SolidityNameAndTypeResolution.cpp b/SolidityNameAndTypeResolution.cpp
index da6c2a88..d7267970 100644
--- a/SolidityNameAndTypeResolution.cpp
+++ b/SolidityNameAndTypeResolution.cpp
@@ -1176,6 +1176,15 @@ BOOST_AUTO_TEST_CASE(test_for_bug_override_function_with_bytearray_type)
BOOST_CHECK_NO_THROW(parseTextAndResolveNamesWithChecks(sourceCode));
}
+BOOST_AUTO_TEST_CASE(array_with_nonconstant_length)
+{
+ char const* text = R"(
+ contract c {
+ function f(uint a) { uint8[a] x; }
+ })";
+ BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError);
+}
+
BOOST_AUTO_TEST_SUITE_END()
}
diff --git a/SolidityParser.cpp b/SolidityParser.cpp
index ddb58244..6c53887a 100644
--- a/SolidityParser.cpp
+++ b/SolidityParser.cpp
@@ -480,6 +480,7 @@ BOOST_AUTO_TEST_CASE(statement_starting_with_type_conversion)
char const* text = "contract test {\n"
" function fun() {\n"
" uint64(2);\n"
+ " uint64[7](3);\n"
" }\n"
"}\n";
BOOST_CHECK_NO_THROW(parseText(text));
@@ -753,6 +754,45 @@ BOOST_AUTO_TEST_CASE(external_variable)
BOOST_CHECK_THROW(parseText(text), ParserError);
}
+BOOST_AUTO_TEST_CASE(arrays_in_storage)
+{
+ char const* text = R"(
+ contract c {
+ uint[10] a;
+ uint[] a2;
+ struct x { uint[2**20] b; y[0] c; }
+ struct y { uint d; mapping(uint=>x)[] e; }
+ })";
+ BOOST_CHECK_NO_THROW(parseText(text));
+}
+
+BOOST_AUTO_TEST_CASE(arrays_in_events)
+{
+ char const* text = R"(
+ contract c {
+ event e(uint[10] a, string7[8] indexed b, c[3] x);
+ })";
+ BOOST_CHECK_NO_THROW(parseText(text));
+}
+
+BOOST_AUTO_TEST_CASE(arrays_in_expressions)
+{
+ char const* text = R"(
+ contract c {
+ function f() { c[10] a = 7; uint8[10 * 2] x; }
+ })";
+ BOOST_CHECK_NO_THROW(parseText(text));
+}
+
+BOOST_AUTO_TEST_CASE(multi_arrays)
+{
+ char const* text = R"(
+ contract c {
+ mapping(uint => mapping(uint => int8)[8][][9])[] x;
+ })";
+ BOOST_CHECK_NO_THROW(parseText(text));
+}
+
BOOST_AUTO_TEST_SUITE_END()
}