aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/parsing/Parser.cpp
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2016-11-11 00:13:45 +0800
committerGitHub <noreply@github.com>2016-11-11 00:13:45 +0800
commita40dcfef1257c4b159eb8248ecb0f837b42d8ead (patch)
tree0d50154179583e9f2e6d7588c22f88cade14717c /libsolidity/parsing/Parser.cpp
parent81118de51273a5aef711b321f20ee02da9e55533 (diff)
parent4524ad08701939cc22d28494c57dda1cdfba9e10 (diff)
downloaddexon-solidity-a40dcfef1257c4b159eb8248ecb0f837b42d8ead.tar
dexon-solidity-a40dcfef1257c4b159eb8248ecb0f837b42d8ead.tar.gz
dexon-solidity-a40dcfef1257c4b159eb8248ecb0f837b42d8ead.tar.bz2
dexon-solidity-a40dcfef1257c4b159eb8248ecb0f837b42d8ead.tar.lz
dexon-solidity-a40dcfef1257c4b159eb8248ecb0f837b42d8ead.tar.xz
dexon-solidity-a40dcfef1257c4b159eb8248ecb0f837b42d8ead.tar.zst
dexon-solidity-a40dcfef1257c4b159eb8248ecb0f837b42d8ead.zip
Merge pull request #768 from roadriverrail/do_while_loops
Add support for do/while loops
Diffstat (limited to 'libsolidity/parsing/Parser.cpp')
-rw-r--r--libsolidity/parsing/Parser.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/libsolidity/parsing/Parser.cpp b/libsolidity/parsing/Parser.cpp
index 0e99d1e7..52b53619 100644
--- a/libsolidity/parsing/Parser.cpp
+++ b/libsolidity/parsing/Parser.cpp
@@ -722,6 +722,8 @@ ASTPointer<Statement> Parser::parseStatement()
return parseIfStatement(docString);
case Token::While:
return parseWhileStatement(docString);
+ case Token::Do:
+ return parseDoWhileStatement(docString);
case Token::For:
return parseForStatement(docString);
case Token::LBrace:
@@ -816,9 +818,24 @@ ASTPointer<WhileStatement> Parser::parseWhileStatement(ASTPointer<ASTString> con
expectToken(Token::RParen);
ASTPointer<Statement> body = parseStatement();
nodeFactory.setEndPositionFromNode(body);
- return nodeFactory.createNode<WhileStatement>(_docString, condition, body);
+ return nodeFactory.createNode<WhileStatement>(_docString, condition, body, false);
}
+ASTPointer<WhileStatement> Parser::parseDoWhileStatement(ASTPointer<ASTString> const& _docString)
+{
+ ASTNodeFactory nodeFactory(*this);
+ expectToken(Token::Do);
+ ASTPointer<Statement> body = parseStatement();
+ expectToken(Token::While);
+ expectToken(Token::LParen);
+ ASTPointer<Expression> condition = parseExpression();
+ expectToken(Token::RParen);
+ nodeFactory.markEndPosition();
+ expectToken(Token::Semicolon);
+ return nodeFactory.createNode<WhileStatement>(_docString, condition, body, true);
+}
+
+
ASTPointer<ForStatement> Parser::parseForStatement(ASTPointer<ASTString> const& _docString)
{
ASTNodeFactory nodeFactory(*this);