aboutsummaryrefslogtreecommitdiffstats
path: root/Scanner.cpp
diff options
context:
space:
mode:
authorLefteris Karapetsas <lefteris@refu.co>2014-12-19 00:30:10 +0800
committerLefteris Karapetsas <lefteris@refu.co>2014-12-19 00:30:10 +0800
commit1da53d1681cbccbb18d08659787042d53438b5c3 (patch)
treebd5cdba18ca2cdce3fb4be5ace595aa60c7bd39e /Scanner.cpp
parent0cdacde3b9bc8209c910c0d0df4744390714dffc (diff)
downloaddexon-solidity-1da53d1681cbccbb18d08659787042d53438b5c3.tar.gz
dexon-solidity-1da53d1681cbccbb18d08659787042d53438b5c3.tar.zst
dexon-solidity-1da53d1681cbccbb18d08659787042d53438b5c3.zip
Factoring forward slash scanning out to its own function
Diffstat (limited to 'Scanner.cpp')
-rw-r--r--Scanner.cpp85
1 files changed, 45 insertions, 40 deletions
diff --git a/Scanner.cpp b/Scanner.cpp
index 124c88d9..f22e69bc 100644
--- a/Scanner.cpp
+++ b/Scanner.cpp
@@ -326,9 +326,52 @@ Token::Value Scanner::scanMultiLineDocComment()
return Token::COMMENT_LITERAL;
}
+Token::Value Scanner::scanSlash()
+{
+ int firstSlashPosition = getSourcePos();
+ advance();
+ if (m_char == '/')
+ {
+ if (!advance()) /* double slash comment directly before EOS */
+ return Token::WHITESPACE;
+ else if (m_char == '/')
+ {
+ // doxygen style /// comment
+ Token::Value comment;
+ m_nextSkippedComment.location.start = firstSlashPosition;
+ comment = scanSingleLineDocComment();
+ m_nextSkippedComment.location.end = getSourcePos();
+ m_nextSkippedComment.token = comment;
+ return Token::WHITESPACE;
+ }
+ else
+ return skipSingleLineComment();
+ }
+ else if (m_char == '*')
+ {
+ // doxygen style /** natspec comment
+ if (!advance()) /* slash star comment before EOS */
+ return Token::WHITESPACE;
+ else if (m_char == '*')
+ {
+ Token::Value comment;
+ m_nextSkippedComment.location.start = firstSlashPosition;
+ comment = scanMultiLineDocComment();
+ m_nextSkippedComment.location.end = getSourcePos();
+ m_nextSkippedComment.token = comment;
+ return Token::WHITESPACE;
+ }
+ else
+ return skipMultiLineComment();
+ }
+ else if (m_char == '=')
+ return selectToken(Token::ASSIGN_DIV);
+ else
+ return Token::DIV;
+}
+
void Scanner::scanToken()
{
- int savedPosition;
m_nextToken.literal.clear();
m_nextSkippedComment.literal.clear();
Token::Value token;
@@ -429,45 +472,7 @@ void Scanner::scanToken()
break;
case '/':
// / // /* /=
- savedPosition = getSourcePos();
- advance();
- if (m_char == '/')
- {
- if (!advance()) /* double slash comment directly before EOS */
- token = Token::WHITESPACE;
- else if (m_char == '/')
- {
- Token::Value comment;
- m_nextSkippedComment.location.start = savedPosition;
- comment = scanSingleLineDocComment();
- m_nextSkippedComment.location.end = getSourcePos();
- m_nextSkippedComment.token = comment;
- token = Token::WHITESPACE;
- }
- else
- token = skipSingleLineComment();
- }
- else if (m_char == '*')
- {
- // /** doxygent style natspec comment
- if (!advance()) /* slash star comment before EOS */
- token = Token::WHITESPACE;
- else if (m_char == '*')
- {
- Token::Value comment;
- m_nextSkippedComment.location.start = savedPosition;
- comment = scanMultiLineDocComment();
- m_nextSkippedComment.location.end = getSourcePos();
- m_nextSkippedComment.token = comment;
- token = Token::WHITESPACE;
- }
- else
- token = skipMultiLineComment();
- }
- else if (m_char == '=')
- token = selectToken(Token::ASSIGN_DIV);
- else
- token = Token::DIV;
+ token = scanSlash();
break;
case '&':
// & && &=