Merge pull request #2815 from ethereum/parser-fallthrough

Remove fallthrough from literal parsing
This commit is contained in:
Alex Beregszaszi 2017-08-25 15:54:46 +01:00 committed by GitHub
commit ec6d8007db
2 changed files with 14 additions and 9 deletions

View File

@ -903,11 +903,13 @@ ASTPointer<Statement> Parser::parseStatement()
{ {
statement = ASTNodeFactory(*this).createNode<PlaceholderStatement>(docString); statement = ASTNodeFactory(*this).createNode<PlaceholderStatement>(docString);
m_scanner->next(); m_scanner->next();
break;
} }
// fall-through else
statement = parseSimpleStatement(docString);
break;
default: default:
statement = parseSimpleStatement(docString); statement = parseSimpleStatement(docString);
break;
} }
expectToken(Token::Semicolon); expectToken(Token::Semicolon);
return statement; return statement;
@ -1309,18 +1311,21 @@ ASTPointer<Expression> Parser::parsePrimaryExpression()
Literal::SubDenomination subdenomination = static_cast<Literal::SubDenomination>(m_scanner->currentToken()); Literal::SubDenomination subdenomination = static_cast<Literal::SubDenomination>(m_scanner->currentToken());
m_scanner->next(); m_scanner->next();
expression = nodeFactory.createNode<Literal>(token, literal, subdenomination); expression = nodeFactory.createNode<Literal>(token, literal, subdenomination);
break;
} }
if (Token::isTimeSubdenomination(m_scanner->peekNextToken())) else if (Token::isTimeSubdenomination(m_scanner->peekNextToken()))
{ {
ASTPointer<ASTString> literal = getLiteralAndAdvance(); ASTPointer<ASTString> literal = getLiteralAndAdvance();
nodeFactory.markEndPosition(); nodeFactory.markEndPosition();
Literal::SubDenomination subdenomination = static_cast<Literal::SubDenomination>(m_scanner->currentToken()); Literal::SubDenomination subdenomination = static_cast<Literal::SubDenomination>(m_scanner->currentToken());
m_scanner->next(); m_scanner->next();
expression = nodeFactory.createNode<Literal>(token, literal, subdenomination); expression = nodeFactory.createNode<Literal>(token, literal, subdenomination);
break;
} }
// fall-through else
{
nodeFactory.markEndPosition();
expression = nodeFactory.createNode<Literal>(token, getLiteralAndAdvance());
}
break;
case Token::StringLiteral: case Token::StringLiteral:
nodeFactory.markEndPosition(); nodeFactory.markEndPosition();
expression = nodeFactory.createNode<Literal>(token, getLiteralAndAdvance()); expression = nodeFactory.createNode<Literal>(token, getLiteralAndAdvance());
@ -1357,9 +1362,9 @@ ASTPointer<Expression> Parser::parsePrimaryExpression()
} }
nodeFactory.markEndPosition(); nodeFactory.markEndPosition();
expectToken(oppositeToken); expectToken(oppositeToken);
return nodeFactory.createNode<TupleExpression>(components, isArray); expression = nodeFactory.createNode<TupleExpression>(components, isArray);
break;
} }
default: default:
if (Token::isElementaryTypeName(token)) if (Token::isElementaryTypeName(token))
{ {

View File

@ -435,7 +435,7 @@ void Scanner::scanToken()
m_nextToken.location.start = sourcePos(); m_nextToken.location.start = sourcePos();
switch (m_char) switch (m_char)
{ {
case '\n': // fall-through case '\n':
case ' ': case ' ':
case '\t': case '\t':
token = selectToken(Token::Whitespace); token = selectToken(Token::Whitespace);