diff options
-rw-r--r-- | libsolidity/parsing/ParserBase.cpp | 15 | ||||
-rw-r--r-- | libsolidity/parsing/Scanner.h | 7 | ||||
-rw-r--r-- | libsolidity/parsing/Token.cpp | 3 |
3 files changed, 13 insertions, 12 deletions
diff --git a/libsolidity/parsing/ParserBase.cpp b/libsolidity/parsing/ParserBase.cpp index 9148946c..71085a4d 100644 --- a/libsolidity/parsing/ParserBase.cpp +++ b/libsolidity/parsing/ParserBase.cpp @@ -49,10 +49,7 @@ void ParserBase::expectToken(Token::Value _value) { if (Token::isElementaryTypeName(tok)) //for the sake of accuracy in reporting { - unsigned firstSize; - unsigned secondSize; - tie(firstSize, secondSize) = m_scanner->currentTokenInfo(); - ElementaryTypeNameToken elemTypeName(tok, firstSize, secondSize); + ElementaryTypeNameToken elemTypeName = m_scanner->currentElementaryTypeNameToken(); fatalParserError( string("Expected token ") + string(Token::name(_value)) + @@ -80,10 +77,7 @@ Token::Value ParserBase::expectAssignmentOperator() { if (Token::isElementaryTypeName(op)) //for the sake of accuracy in reporting { - unsigned firstSize; - unsigned secondSize; - tie(firstSize, secondSize) = m_scanner->currentTokenInfo(); - ElementaryTypeNameToken elemTypeName(op, firstSize, secondSize); + ElementaryTypeNameToken elemTypeName = m_scanner->currentElementaryTypeNameToken(); fatalParserError( string("Expected assignment operator, got '") + elemTypeName.toString() + @@ -108,10 +102,7 @@ ASTPointer<ASTString> ParserBase::expectIdentifierToken() { if (Token::isElementaryTypeName(id)) //for the sake of accuracy in reporting { - unsigned firstSize; - unsigned secondSize; - tie(firstSize, secondSize) = m_scanner->currentTokenInfo(); - ElementaryTypeNameToken elemTypeName(id, firstSize, secondSize); + ElementaryTypeNameToken elemTypeName = m_scanner->currentElementaryTypeNameToken(); fatalParserError( string("Expected identifier, got '") + elemTypeName.toString() + diff --git a/libsolidity/parsing/Scanner.h b/libsolidity/parsing/Scanner.h index cffcec8e..ac9f18e8 100644 --- a/libsolidity/parsing/Scanner.h +++ b/libsolidity/parsing/Scanner.h @@ -119,6 +119,13 @@ public: { return m_currentToken.token; } + ElementaryTypeNameToken currentElementaryTypeNameToken() + { + unsigned firstSize; + unsigned secondSize; + std::tie(firstSize, secondSize) = m_currentToken.extendedTokenInfo; + return ElementaryTypeNameToken(m_currentToken.token, firstSize, secondSize); + } SourceLocation currentLocation() const { return m_currentToken.location; } std::string const& currentLiteral() const { return m_currentToken.literal; } diff --git a/libsolidity/parsing/Token.cpp b/libsolidity/parsing/Token.cpp index 24877c70..097a6f54 100644 --- a/libsolidity/parsing/Token.cpp +++ b/libsolidity/parsing/Token.cpp @@ -132,6 +132,7 @@ tuple<Token::Value, unsigned int, unsigned int> Token::fromIdentifierOrKeyword(s Token::Value keyword = keywordByName(baseType); if (keyword == Token::Bytes) { + solAssert(m != -1, "Invalid type M in fixed command. Should not reach here."); if (0 < m && m <= 32 && positionX == _literal.end()) return make_tuple(Token::BytesM, m, 0); } @@ -139,6 +140,7 @@ tuple<Token::Value, unsigned int, unsigned int> Token::fromIdentifierOrKeyword(s { if (0 < m && m <= 256 && m % 8 == 0 && positionX == _literal.end()) { + solAssert(m != -1, "Invalid type M in fixed command. Should not reach here."); if (keyword == Token::UInt) return make_tuple(Token::UIntM, m, 0); else @@ -160,6 +162,7 @@ tuple<Token::Value, unsigned int, unsigned int> Token::fromIdentifierOrKeyword(s m % 8 == 0 && n % 8 == 0 ) { + solAssert(n != -1, "Invalid type N in fixed command. Should not reach here."); if (keyword == Token::UFixed) return make_tuple(Token::UFixedMxN, m, n); else |