diff options
author | Gav Wood <i@gavwood.com> | 2015-02-04 04:25:08 +0800 |
---|---|---|
committer | Gav Wood <i@gavwood.com> | 2015-02-04 04:25:08 +0800 |
commit | 2ff4a80b6266a6bcd22ef6cbb654f90fc84f9276 (patch) | |
tree | 5a69a85a19d619453fa4283a78a47e64051ed0c9 /Parser.cpp | |
parent | 04164b612c61ea2ea5c18f56600f95f03ded7235 (diff) | |
download | dexon-solidity-2ff4a80b6266a6bcd22ef6cbb654f90fc84f9276.tar dexon-solidity-2ff4a80b6266a6bcd22ef6cbb654f90fc84f9276.tar.gz dexon-solidity-2ff4a80b6266a6bcd22ef6cbb654f90fc84f9276.tar.bz2 dexon-solidity-2ff4a80b6266a6bcd22ef6cbb654f90fc84f9276.tar.lz dexon-solidity-2ff4a80b6266a6bcd22ef6cbb654f90fc84f9276.tar.xz dexon-solidity-2ff4a80b6266a6bcd22ef6cbb654f90fc84f9276.tar.zst dexon-solidity-2ff4a80b6266a6bcd22ef6cbb654f90fc84f9276.zip |
Fixes for named-args.
Diffstat (limited to 'Parser.cpp')
-rw-r--r-- | Parser.cpp | 24 |
1 files changed, 8 insertions, 16 deletions
@@ -592,7 +592,6 @@ ASTPointer<Expression> Parser::parseBinaryExpression(int _minPrecedence) ASTPointer<Expression> expression = parseUnaryExpression(); int precedence = Token::precedence(m_scanner->getCurrentToken()); for (; precedence >= _minPrecedence; --precedence) - { while (Token::precedence(m_scanner->getCurrentToken()) == precedence) { Token::Value op = m_scanner->getCurrentToken(); @@ -601,7 +600,6 @@ ASTPointer<Expression> Parser::parseBinaryExpression(int _minPrecedence) nodeFactory.setEndPositionFromNode(right); expression = nodeFactory.createNode<BinaryOperation>(expression, op, right); } - } return expression; } @@ -668,8 +666,8 @@ ASTPointer<Expression> Parser::parseLeftHandSideExpression() { m_scanner->next(); vector<ASTPointer<Expression>> arguments; - vector<string> names; - parseFunctionCallArguments(arguments, names); + vector<ASTPointer<ASTString>> names; + std::tie(arguments, names) = parseFunctionCallArguments(); nodeFactory.markEndPosition(); expectToken(Token::RPAREN); expression = nodeFactory.createNode<FunctionCall>(expression, arguments, names); @@ -740,8 +738,9 @@ vector<ASTPointer<Expression>> Parser::parseFunctionCallListArguments() return arguments; } -void Parser::parseFunctionCallArguments(vector<ASTPointer<Expression>>& _arguments, vector<string>& _names) +pair<vector<ASTPointer<Expression>>, vector<ASTPointer<ASTString>>> Parser::parseFunctionCallArguments() { + pair<vector<ASTPointer<Expression>>, vector<ASTPointer<ASTString>>> ret; Token::Value token = m_scanner->getCurrentToken(); if (token == Token::LBRACE) { @@ -749,28 +748,21 @@ void Parser::parseFunctionCallArguments(vector<ASTPointer<Expression>>& _argumen expectToken(Token::LBRACE); while (m_scanner->getCurrentToken() != Token::RBRACE) { - string identifier = *expectIdentifierToken(); expectToken(Token::COLON); - ASTPointer<Expression> expression = parseExpression(); - _arguments.push_back(expression); - _names.push_back(identifier); + ret.first.push_back(parseExpression()); + ret.second.push_back(expectIdentifierToken()); if (m_scanner->getCurrentToken() == Token::COMMA) - { expectToken(Token::COMMA); - } else - { break; - } } expectToken(Token::RBRACE); } else - { - _arguments = parseFunctionCallListArguments(); - } + ret.first = parseFunctionCallListArguments(); + return ret; } |