Review suggestions

This commit is contained in:
Leonardo Alt 2018-09-04 12:14:04 +02:00
parent 17176871ab
commit ac8892e0e3
3 changed files with 12 additions and 12 deletions

View File

@ -68,7 +68,7 @@ Breaking Changes:
* Syntax Checker: Named return values in function types are an error. * Syntax Checker: Named return values in function types are an error.
* Syntax Checker: Strictly require visibility specifier for functions. This was already the case in the experimental 0.5.0 mode. * Syntax Checker: Strictly require visibility specifier for functions. This was already the case in the experimental 0.5.0 mode.
* Syntax Checker: Disallow unary ``+``. This was already the case in the experimental 0.5.0 mode. * Syntax Checker: Disallow unary ``+``. This was already the case in the experimental 0.5.0 mode.
* Syntax Checker: Disallow single statement variable declaration inside if/while/for without a block. * Syntax Checker: Disallow single statement variable declaration inside if/while/for bodies that are not blocks.
* View Pure Checker: Strictly enfore state mutability. This was already the case in the experimental 0.5.0 mode. * View Pure Checker: Strictly enfore state mutability. This was already the case in the experimental 0.5.0 mode.
Language Features: Language Features:

View File

@ -138,25 +138,25 @@ void SyntaxChecker::endVisit(ModifierDefinition const& _modifier)
m_placeholderFound = false; m_placeholderFound = false;
} }
void SyntaxChecker::checkSingleStatementVariableDeclaration(ASTNode const* _statement) void SyntaxChecker::checkSingleStatementVariableDeclaration(ASTNode const& _statement)
{ {
auto varDecl = dynamic_cast<VariableDeclarationStatement const*>(_statement); auto varDecl = dynamic_cast<VariableDeclarationStatement const*>(&_statement);
if (varDecl) if (varDecl)
m_errorReporter.syntaxError(_statement->location(), "Variable declarations can only be used inside blocks."); m_errorReporter.syntaxError(_statement.location(), "Variable declarations can only be used inside blocks.");
} }
bool SyntaxChecker::visit(IfStatement const& _ifStatement) bool SyntaxChecker::visit(IfStatement const& _ifStatement)
{ {
checkSingleStatementVariableDeclaration(&_ifStatement.trueStatement()); checkSingleStatementVariableDeclaration(_ifStatement.trueStatement());
if (Statement const* _statement = _ifStatement.falseStatement()) if (Statement const* _statement = _ifStatement.falseStatement())
checkSingleStatementVariableDeclaration(_statement); checkSingleStatementVariableDeclaration(*_statement);
return true; return true;
} }
bool SyntaxChecker::visit(WhileStatement const& _whileStatement) bool SyntaxChecker::visit(WhileStatement const& _whileStatement)
{ {
m_inLoopDepth++; m_inLoopDepth++;
checkSingleStatementVariableDeclaration(&_whileStatement.body()); checkSingleStatementVariableDeclaration(_whileStatement.body());
return true; return true;
} }
@ -168,7 +168,7 @@ void SyntaxChecker::endVisit(WhileStatement const&)
bool SyntaxChecker::visit(ForStatement const& _forStatement) bool SyntaxChecker::visit(ForStatement const& _forStatement)
{ {
m_inLoopDepth++; m_inLoopDepth++;
checkSingleStatementVariableDeclaration(&_forStatement.body()); checkSingleStatementVariableDeclaration(_forStatement.body());
return true; return true;
} }

View File

@ -52,10 +52,10 @@ private:
virtual bool visit(ModifierDefinition const& _modifier) override; virtual bool visit(ModifierDefinition const& _modifier) override;
virtual void endVisit(ModifierDefinition const& _modifier) override; virtual void endVisit(ModifierDefinition const& _modifier) override;
// Reports an error if _statement is a VariableDeclarationStatement. /// Reports an error if _statement is a VariableDeclarationStatement.
// Used by if/while/for to check for single statement variable declarations /// Used by if/while/for to check for single statement variable declarations
// without a block. /// without a block.
void checkSingleStatementVariableDeclaration(ASTNode const* _statement); void checkSingleStatementVariableDeclaration(ASTNode const& _statement);
virtual bool visit(IfStatement const& _ifStatement) override; virtual bool visit(IfStatement const& _ifStatement) override;
virtual bool visit(WhileStatement const& _whileStatement) override; virtual bool visit(WhileStatement const& _whileStatement) override;