diff options
author | Yoichi Hirai <i@yoichihirai.com> | 2016-12-01 00:28:07 +0800 |
---|---|---|
committer | Yoichi Hirai <i@yoichihirai.com> | 2016-12-01 00:28:07 +0800 |
commit | eaab71294476f46513678be2e8cad02589d141dc (patch) | |
tree | 5ee25f39ba1fe5d2424a7969d546f3a0304ec863 | |
parent | ac357d12252ceb113a823a400418a59a94521c71 (diff) | |
download | dexon-solidity-eaab71294476f46513678be2e8cad02589d141dc.tar.gz dexon-solidity-eaab71294476f46513678be2e8cad02589d141dc.tar.zst dexon-solidity-eaab71294476f46513678be2e8cad02589d141dc.zip |
parser: recognize an end of comment of the form `**/` at the end of a multi-line doc comment
This fixes #1433
-rw-r--r-- | libsolidity/parsing/Scanner.cpp | 7 | ||||
-rw-r--r-- | test/libsolidity/SolidityParser.cpp | 13 |
2 files changed, 19 insertions, 1 deletions
diff --git a/libsolidity/parsing/Scanner.cpp b/libsolidity/parsing/Scanner.cpp index 6115101e..3623f23f 100644 --- a/libsolidity/parsing/Scanner.cpp +++ b/libsolidity/parsing/Scanner.cpp @@ -327,7 +327,12 @@ Token::Value Scanner::scanMultiLineDocComment() if (isLineTerminator(m_char)) { skipWhitespace(); - if (!m_source.isPastEndOfInput(1) && m_source.get(0) == '*' && m_source.get(1) != '/') + if (!m_source.isPastEndOfInput(1) && m_source.get(0) == '*' && m_source.get(1) == '*') + { // it is unknown if this leads to the end of the comment + addCommentLiteralChar('*'); + advance(); + } + else if (!m_source.isPastEndOfInput(1) && m_source.get(0) == '*' && m_source.get(1) != '/') { // skip first '*' in subsequent lines if (charsAdded) addCommentLiteralChar('\n'); diff --git a/test/libsolidity/SolidityParser.cpp b/test/libsolidity/SolidityParser.cpp index a3217f08..1c616ef6 100644 --- a/test/libsolidity/SolidityParser.cpp +++ b/test/libsolidity/SolidityParser.cpp @@ -962,6 +962,19 @@ BOOST_AUTO_TEST_CASE(empty_comment) BOOST_CHECK(successParse(text)); } +BOOST_AUTO_TEST_CASE(comment_end_with_double_star) +{ + char const* text = R"( + contract C1 { + /** + **/ + } + contract C2 {} + )"; + BOOST_CHECK(successParse(text)); +} + + BOOST_AUTO_TEST_CASE(library_simple) { char const* text = R"( |