diff options
author | Lefteris Karapetsas <lefteris@refu.co> | 2014-12-16 20:20:50 +0800 |
---|---|---|
committer | Lefteris Karapetsas <lefteris@refu.co> | 2014-12-17 07:03:30 +0800 |
commit | 062b51e7bdf572abba25a76fc8c3bb6e96da71c9 (patch) | |
tree | 8ea9026902a73500d680dbf8e5dff4e1dba44c05 | |
parent | 90e39c04d6e476491503573719c487744f529514 (diff) | |
download | dexon-solidity-062b51e7bdf572abba25a76fc8c3bb6e96da71c9.tar.gz dexon-solidity-062b51e7bdf572abba25a76fc8c3bb6e96da71c9.tar.zst dexon-solidity-062b51e7bdf572abba25a76fc8c3bb6e96da71c9.zip |
ForStatement typecheck and initExpression is a Statement
-rw-r--r-- | AST.cpp | 8 | ||||
-rw-r--r-- | AST.h | 4 | ||||
-rw-r--r-- | Parser.cpp | 4 | ||||
-rw-r--r-- | Parser.h | 2 |
4 files changed, 11 insertions, 7 deletions
@@ -132,8 +132,12 @@ void WhileStatement::checkTypeRequirements() void ForStatement::checkTypeRequirements() { - // LTODO - m_condExpression->expectType(BoolType()); + if (m_initExpression) + m_initExpression->checkTypeRequirements(); + if (m_condExpression) + m_condExpression->expectType(BoolType()); + if (m_loopExpression) + m_loopExpression->checkTypeRequirements(); m_body->checkTypeRequirements(); } @@ -513,7 +513,7 @@ class ForStatement: public BreakableStatement { public: ForStatement(Location const& _location, - ASTPointer<ASTNode> const& _initExpression, + ASTPointer<Statement> const& _initExpression, ASTPointer<Expression> const& _conditionExpression, ASTPointer<ExpressionStatement> const& _loopExpression, ASTPointer<Statement> const& _body): @@ -527,7 +527,7 @@ public: virtual void checkTypeRequirements() override; private: - ASTPointer<ASTNode> m_initExpression; + ASTPointer<Statement> m_initExpression; ASTPointer<Expression> m_condExpression; ASTPointer<ExpressionStatement> m_loopExpression; ASTPointer<Statement> m_body; @@ -374,7 +374,7 @@ ASTPointer<WhileStatement> Parser::parseWhileStatement() ASTPointer<ForStatement> Parser::parseForStatement() { ASTNodeFactory nodeFactory(*this); - ASTPointer<ASTNode> initExpression; + ASTPointer<Statement> initExpression; ASTPointer<Expression> conditionExpression; ASTPointer<ExpressionStatement> loopExpression; expectToken(Token::FOR); @@ -401,7 +401,7 @@ ASTPointer<ForStatement> Parser::parseForStatement() body); } -ASTPointer<ASTNode> Parser::parseVardefOrExprstatement() +ASTPointer<Statement> Parser::parseVardefOrExprstatement() { if (peekVariableDefinition()) return parseVariableDefinition(); @@ -60,7 +60,7 @@ private: ASTPointer<IfStatement> parseIfStatement(); ASTPointer<WhileStatement> parseWhileStatement(); ASTPointer<ForStatement> parseForStatement(); - ASTPointer<ASTNode> parseVardefOrExprstatement(); + ASTPointer<Statement> parseVardefOrExprstatement(); ASTPointer<VariableDefinition> parseVariableDefinition(); ASTPointer<ExpressionStatement> parseExpressionStatement(); ASTPointer<Expression> parseExpression(); |