From ab31c28ed90aba6e444308ffbc63638d386bbada Mon Sep 17 00:00:00 2001 From: Erik Kundt Date: Wed, 6 Mar 2019 16:47:00 +0100 Subject: [PATCH] Adds support for arrays in function signatures. --- Changelog.md | 2 +- test/libsolidity/util/TestFileParser.cpp | 15 +++++++++++++++ test/libsolidity/util/TestFileParserTests.cpp | 14 ++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/Changelog.md b/Changelog.md index 3ff3c2cd0..52fb55928 100644 --- a/Changelog.md +++ b/Changelog.md @@ -11,7 +11,7 @@ Bugfixes: Build System: - + * Soltest: Add support for arrays in function signatures. ### 0.5.5 (2019-03-05) diff --git a/test/libsolidity/util/TestFileParser.cpp b/test/libsolidity/util/TestFileParser.cpp index 1541828cb..36db0a20b 100644 --- a/test/libsolidity/util/TestFileParser.cpp +++ b/test/libsolidity/util/TestFileParser.cpp @@ -252,6 +252,15 @@ string TestFileParser::parseIdentifierOrTuple() { identOrTuple = m_scanner.currentLiteral(); expect(Token::Identifier); + while (accept(Token::LBrack)) + { + identOrTuple += formatToken(Token::LBrack); + expect(Token::LBrack); + if (accept(Token::Number)) + identOrTuple += parseDecimalNumber(); + identOrTuple += formatToken(Token::RBrack); + expect(Token::RBrack); + } return identOrTuple; } expect(Token::LParen); @@ -402,6 +411,12 @@ void TestFileParser::Scanner::scanNextToken() case ')': token = selectToken(Token::RParen); break; + case '[': + token = selectToken(Token::LBrack); + break; + case ']': + token = selectToken(Token::RBrack); + break; default: if (langutil::isIdentifierStart(current())) { diff --git a/test/libsolidity/util/TestFileParserTests.cpp b/test/libsolidity/util/TestFileParserTests.cpp index 66dbb3b85..469788278 100644 --- a/test/libsolidity/util/TestFileParserTests.cpp +++ b/test/libsolidity/util/TestFileParserTests.cpp @@ -460,6 +460,20 @@ BOOST_AUTO_TEST_CASE(call_multiple_arguments_mixed_format) ); } +BOOST_AUTO_TEST_CASE(call_signature_array) +{ + char const* source = R"( + // f(uint256[]) -> + // f(uint256[3]) -> + // f(uint256[3][][], uint8[9]) -> + )"; + auto const calls = parse(source); + BOOST_REQUIRE_EQUAL(calls.size(), 3); + testFunctionCall(calls.at(0), Mode::SingleLine, "f(uint256[])", false); + testFunctionCall(calls.at(1), Mode::SingleLine, "f(uint256[3])", false); + testFunctionCall(calls.at(2), Mode::SingleLine, "f(uint256[3][][],uint8[9])", false); +} + BOOST_AUTO_TEST_CASE(call_signature_valid) { char const* source = R"(