aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/Parser.cpp
diff options
context:
space:
mode:
authorchriseth <c@ethdev.com>2015-10-09 00:01:12 +0800
committerchriseth <c@ethdev.com>2015-10-09 00:25:44 +0800
commitb9a166061bc94cd06458c945d66bf52e76e84b70 (patch)
tree9e317a5de58a050f49187a0318fff0e4981d7c98 /libsolidity/Parser.cpp
parent23865e39295dd9199769727b037c1d126807b20e (diff)
downloaddexon-solidity-b9a166061bc94cd06458c945d66bf52e76e84b70.tar
dexon-solidity-b9a166061bc94cd06458c945d66bf52e76e84b70.tar.gz
dexon-solidity-b9a166061bc94cd06458c945d66bf52e76e84b70.tar.bz2
dexon-solidity-b9a166061bc94cd06458c945d66bf52e76e84b70.tar.lz
dexon-solidity-b9a166061bc94cd06458c945d66bf52e76e84b70.tar.xz
dexon-solidity-b9a166061bc94cd06458c945d66bf52e76e84b70.tar.zst
dexon-solidity-b9a166061bc94cd06458c945d66bf52e76e84b70.zip
Refactoring to allow multi-variable declarations.
Diffstat (limited to 'libsolidity/Parser.cpp')
-rw-r--r--libsolidity/Parser.cpp36
1 files changed, 29 insertions, 7 deletions
diff --git a/libsolidity/Parser.cpp b/libsolidity/Parser.cpp
index 94e9c0ea..c6b74e1c 100644
--- a/libsolidity/Parser.cpp
+++ b/libsolidity/Parser.cpp
@@ -771,13 +771,35 @@ ASTPointer<VariableDeclarationStatement> Parser::parseVariableDeclarationStateme
ASTPointer<TypeName> const& _lookAheadArrayType
)
{
- VarDeclParserOptions options;
- options.allowVar = true;
- options.allowInitialValue = true;
- options.allowLocationSpecifier = true;
- ASTPointer<VariableDeclaration> variable = parseVariableDeclaration(options, _lookAheadArrayType);
- ASTNodeFactory nodeFactory(*this, variable);
- return nodeFactory.createNode<VariableDeclarationStatement>(variable);
+ ASTNodeFactory nodeFactory(*this);
+ if (_lookAheadArrayType)
+ nodeFactory.setLocation(_lookAheadArrayType->location());
+ vector<ASTPointer<VariableDeclaration>> variables;
+ ASTPointer<Expression> value;
+ if (
+ !_lookAheadArrayType &&
+ m_scanner->currentToken() == Token::Var &&
+ m_scanner->peekNextToken() == Token::LParen
+ )
+ {
+ // Parse `var (a, b, ,, c) = ...` into a single VariableDeclarationStatement with multiple variables.
+ solAssert(false, "To be implemented.");
+ }
+ else
+ {
+ VarDeclParserOptions options;
+ options.allowVar = true;
+ options.allowLocationSpecifier = true;
+ options.allowInitialValue = false;
+ variables.push_back(parseVariableDeclaration(options, _lookAheadArrayType));
+ }
+ if (m_scanner->currentToken() == Token::Assign)
+ {
+ m_scanner->next();
+ value = parseExpression();
+ nodeFactory.setEndPositionFromNode(value);
+ }
+ return nodeFactory.createNode<VariableDeclarationStatement>(variables, value);
}
ASTPointer<ExpressionStatement> Parser::parseExpressionStatement(