aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLefteris Karapetsas <lefteris@refu.co>2014-12-18 23:27:17 +0800
committerLefteris Karapetsas <lefteris@refu.co>2014-12-18 23:27:17 +0800
commitd97bdba471cf3da5bc292c0252a062bc7e273b72 (patch)
treeaa79dd9069b99f60f50860bfa7310f01d388f5d7
parenta6b0fba22748ffa8a73d505f31bec8630f434f39 (diff)
downloaddexon-solidity-d97bdba471cf3da5bc292c0252a062bc7e273b72.tar
dexon-solidity-d97bdba471cf3da5bc292c0252a062bc7e273b72.tar.gz
dexon-solidity-d97bdba471cf3da5bc292c0252a062bc7e273b72.tar.bz2
dexon-solidity-d97bdba471cf3da5bc292c0252a062bc7e273b72.tar.lz
dexon-solidity-d97bdba471cf3da5bc292c0252a062bc7e273b72.tar.xz
dexon-solidity-d97bdba471cf3da5bc292c0252a062bc7e273b72.tar.zst
dexon-solidity-d97bdba471cf3da5bc292c0252a062bc7e273b72.zip
Adressing some natspec issues
-rw-r--r--InterfaceHandler.cpp4
-rw-r--r--Scanner.cpp7
2 files changed, 7 insertions, 4 deletions
diff --git a/InterfaceHandler.cpp b/InterfaceHandler.cpp
index 9ae284b4..5b5682ff 100644
--- a/InterfaceHandler.cpp
+++ b/InterfaceHandler.cpp
@@ -170,7 +170,7 @@ std::string::const_iterator InterfaceHandler::parseDocTagLine(std::string::const
bool _appending)
{
auto nlPos = std::find(_pos, _end, '\n');
- if (_appending && *_pos != ' ')
+ if (_appending && _pos < _end && *_pos != ' ')
_tagString += " ";
std::copy(_pos, nlPos, back_inserter(_tagString));
m_lastTag = _tagType;
@@ -204,7 +204,7 @@ std::string::const_iterator InterfaceHandler::appendDocTagParam(std::string::con
solAssert(!m_params.empty(), "Internal: Tried to append to empty parameter");
auto pair = m_params.back();
- if (*_pos != ' ')
+ if (_pos < _end && *_pos != ' ')
pair.second += " ";
auto nlPos = std::find(_pos, _end, '\n');
std::copy(_pos, nlPos, back_inserter(pair.second));
diff --git a/Scanner.cpp b/Scanner.cpp
index 69b61ce4..90a3b454 100644
--- a/Scanner.cpp
+++ b/Scanner.cpp
@@ -328,6 +328,7 @@ Token::Value Scanner::scanMultiLineDocComment()
void Scanner::scanToken()
{
+ int savedPosition;
m_nextToken.literal.clear();
m_nextSkippedComment.literal.clear();
Token::Value token;
@@ -428,6 +429,7 @@ void Scanner::scanToken()
break;
case '/':
// / // /* /=
+ savedPosition = getSourcePos();
advance();
if (m_char == '/')
{
@@ -436,7 +438,7 @@ void Scanner::scanToken()
else if (m_char == '/')
{
Token::Value comment;
- m_nextSkippedComment.location.start = getSourcePos();
+ m_nextSkippedComment.location.start = savedPosition;
comment = scanSingleLineDocComment();
m_nextSkippedComment.location.end = getSourcePos();
m_nextSkippedComment.token = comment;
@@ -447,12 +449,13 @@ void Scanner::scanToken()
}
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 = getSourcePos();
+ m_nextSkippedComment.location.start = savedPosition;
comment = scanMultiLineDocComment();
m_nextSkippedComment.location.end = getSourcePos();
m_nextSkippedComment.token = comment;