diff options
author | chriseth <c@ethdev.com> | 2015-10-09 00:01:12 +0800 |
---|---|---|
committer | chriseth <c@ethdev.com> | 2015-10-09 00:25:44 +0800 |
commit | b9a166061bc94cd06458c945d66bf52e76e84b70 (patch) | |
tree | 9e317a5de58a050f49187a0318fff0e4981d7c98 /libsolidity/Parser.cpp | |
parent | 23865e39295dd9199769727b037c1d126807b20e (diff) | |
download | dexon-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.cpp | 36 |
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( |