Browse Source

Factoring forward slash scanning out to its own function

cl-refactor
Lefteris Karapetsas 10 years ago
parent
commit
49f60a1d6d
  1. 85
      libsolidity/Scanner.cpp
  2. 2
      libsolidity/Scanner.h

85
libsolidity/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 '&':
// & && &=

2
libsolidity/Scanner.h

@ -194,6 +194,8 @@ private:
Token::Value scanString();
Token::Value scanSingleLineDocComment();
Token::Value scanMultiLineDocComment();
/// Scans a slash '/' and depending on the characters returns the appropriate token
Token::Value scanSlash();
/// Scans an escape-sequence which is part of a string and adds the
/// decoded character to the current literal. Returns true if a pattern

Loading…
Cancel
Save