helper function in scanner and corresponding edits to parserBase

This commit is contained in:
VoR0220 2016-03-30 13:09:38 -05:00
parent 427b9557d6
commit 9404600b3f
3 changed files with 13 additions and 12 deletions

View File

@ -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() +

View File

@ -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; }

View File

@ -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