mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Minor issues, grammar update, new ForStatement test
This commit is contained in:
parent
062b51e7bd
commit
adbea47596
7
AST.h
7
AST.h
@ -509,6 +509,9 @@ private:
|
||||
ASTPointer<Statement> m_body;
|
||||
};
|
||||
|
||||
/**
|
||||
* For loop statement
|
||||
*/
|
||||
class ForStatement: public BreakableStatement
|
||||
{
|
||||
public:
|
||||
@ -527,9 +530,13 @@ public:
|
||||
virtual void checkTypeRequirements() override;
|
||||
|
||||
private:
|
||||
/// For statement's initialization expresion. for(XXX; ; ). Can be empty
|
||||
ASTPointer<Statement> m_initExpression;
|
||||
/// For statement's condition expresion. for(; XXX ; ). Can be empty
|
||||
ASTPointer<Expression> m_condExpression;
|
||||
/// For statement's loop expresion. for(;;XXX). Can be empty
|
||||
ASTPointer<ExpressionStatement> m_loopExpression;
|
||||
/// The body of the loop
|
||||
ASTPointer<Statement> m_body;
|
||||
};
|
||||
|
||||
|
@ -330,10 +330,7 @@ ASTPointer<Statement> Parser::parseStatement()
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (peekVariableDefinition())
|
||||
statement = parseVariableDefinition();
|
||||
else // "ordinary" expression statement
|
||||
statement = parseExpressionStatement();
|
||||
statement = parseVarDefOrExprStmt();
|
||||
}
|
||||
expectToken(Token::SEMICOLON);
|
||||
return statement;
|
||||
@ -382,7 +379,7 @@ ASTPointer<ForStatement> Parser::parseForStatement()
|
||||
|
||||
// LTODO: Maybe here have some predicate like peekExpression() instead of checking for semicolon and RPAREN?
|
||||
if (m_scanner->getCurrentToken() != Token::SEMICOLON)
|
||||
initExpression = parseVardefOrExprstatement();
|
||||
initExpression = parseVarDefOrExprStmt();
|
||||
expectToken(Token::SEMICOLON);
|
||||
|
||||
if (m_scanner->getCurrentToken() != Token::SEMICOLON)
|
||||
@ -401,7 +398,7 @@ ASTPointer<ForStatement> Parser::parseForStatement()
|
||||
body);
|
||||
}
|
||||
|
||||
ASTPointer<Statement> Parser::parseVardefOrExprstatement()
|
||||
ASTPointer<Statement> Parser::parseVarDefOrExprStmt()
|
||||
{
|
||||
if (peekVariableDefinition())
|
||||
return parseVariableDefinition();
|
||||
|
5
Parser.h
5
Parser.h
@ -60,7 +60,7 @@ private:
|
||||
ASTPointer<IfStatement> parseIfStatement();
|
||||
ASTPointer<WhileStatement> parseWhileStatement();
|
||||
ASTPointer<ForStatement> parseForStatement();
|
||||
ASTPointer<Statement> parseVardefOrExprstatement();
|
||||
ASTPointer<Statement> parseVarDefOrExprStmt();
|
||||
ASTPointer<VariableDefinition> parseVariableDefinition();
|
||||
ASTPointer<ExpressionStatement> parseExpressionStatement();
|
||||
ASTPointer<Expression> parseExpression();
|
||||
@ -74,8 +74,7 @@ private:
|
||||
///@{
|
||||
///@name Helper functions
|
||||
|
||||
/// Peeks ahead in the scanner to determine if an expression statement
|
||||
/// could be a variable definition
|
||||
/// Peeks ahead in the scanner to determine if a variable definition is going to follow
|
||||
bool peekVariableDefinition();
|
||||
|
||||
/// If current token value is not _value, throw exception otherwise advance token.
|
||||
|
@ -16,11 +16,13 @@ Mapping = 'mapping' '(' ElementaryTypeName '=>' TypeName ')'
|
||||
|
||||
Block = '{' Statement* '}'
|
||||
Statement = IfStatement | WhileStatement | Block |
|
||||
( Continue | Break | Return | VariableDefinition | Expression ) ';'
|
||||
( Continue | Break | Return | VariableDefinition | ExpressionStatement ) ';'
|
||||
|
||||
ExpressionStatement = Expression
|
||||
IfStatement = 'if' '(' Expression ')' Statement ( 'else' Statement )?
|
||||
WhileStatement = 'while' '(' Expression ')' Statement
|
||||
ForStatement = 'for' '(' (VardefOrExpressionstatement)? ';' (Expression)? ';' (Expressionstatement)? ')' Statement
|
||||
VardefOrExprStmt = Variabledefinition | ExpressionStatement
|
||||
ForStatement = 'for' '(' (VardefOrExprStmt)? ';' (Expression)? ';' (ExpressionStatement)? ')' Statement
|
||||
Continue = 'continue' ';'
|
||||
Break = 'break' ';'
|
||||
Return = 'return' Expression? ';'
|
||||
|
Loading…
Reference in New Issue
Block a user