aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/parsing
diff options
context:
space:
mode:
authorchriseth <c@ethdev.com>2016-01-25 04:43:48 +0800
committerchriseth <c@ethdev.com>2016-01-25 04:43:48 +0800
commit194679f77ada30b04f483e96197e890e41a0c22c (patch)
tree82ed4cec81cb9dd81cbdc3b8134b80fb7e3de780 /libsolidity/parsing
parent67c855c583042ddee6261a9921239a3afd086c14 (diff)
parent51caa04238ce78420e6efc2ce15842effddf3856 (diff)
downloaddexon-solidity-194679f77ada30b04f483e96197e890e41a0c22c.tar
dexon-solidity-194679f77ada30b04f483e96197e890e41a0c22c.tar.gz
dexon-solidity-194679f77ada30b04f483e96197e890e41a0c22c.tar.bz2
dexon-solidity-194679f77ada30b04f483e96197e890e41a0c22c.tar.lz
dexon-solidity-194679f77ada30b04f483e96197e890e41a0c22c.tar.xz
dexon-solidity-194679f77ada30b04f483e96197e890e41a0c22c.tar.zst
dexon-solidity-194679f77ada30b04f483e96197e890e41a0c22c.zip
Merge pull request #326 from guanqun/cond-expr
support conditional expression _ ? _ : _
Diffstat (limited to 'libsolidity/parsing')
-rw-r--r--libsolidity/parsing/Parser.cpp25
1 files changed, 19 insertions, 6 deletions
diff --git a/libsolidity/parsing/Parser.cpp b/libsolidity/parsing/Parser.cpp
index 4ac3381c..d9ec1a49 100644
--- a/libsolidity/parsing/Parser.cpp
+++ b/libsolidity/parsing/Parser.cpp
@@ -932,13 +932,26 @@ ASTPointer<Expression> Parser::parseExpression(
)
{
ASTPointer<Expression> expression = parseBinaryExpression(4, _lookAheadIndexAccessStructure);
- if (!Token::isAssignmentOp(m_scanner->currentToken()))
+ if (Token::isAssignmentOp(m_scanner->currentToken()))
+ {
+ Token::Value assignmentOperator = expectAssignmentOperator();
+ ASTPointer<Expression> rightHandSide = parseExpression();
+ ASTNodeFactory nodeFactory(*this, expression);
+ nodeFactory.setEndPositionFromNode(rightHandSide);
+ return nodeFactory.createNode<Assignment>(expression, assignmentOperator, rightHandSide);
+ }
+ else if (m_scanner->currentToken() == Token::Value::Conditional)
+ {
+ m_scanner->next();
+ ASTPointer<Expression> trueExpression = parseExpression();
+ expectToken(Token::Colon);
+ ASTPointer<Expression> falseExpression = parseExpression();
+ ASTNodeFactory nodeFactory(*this, expression);
+ nodeFactory.setEndPositionFromNode(falseExpression);
+ return nodeFactory.createNode<Conditional>(expression, trueExpression, falseExpression);
+ }
+ else
return expression;
- Token::Value assignmentOperator = expectAssignmentOperator();
- ASTPointer<Expression> rightHandSide = parseExpression();
- ASTNodeFactory nodeFactory(*this, expression);
- nodeFactory.setEndPositionFromNode(rightHandSide);
- return nodeFactory.createNode<Assignment>(expression, assignmentOperator, rightHandSide);
}
ASTPointer<Expression> Parser::parseBinaryExpression(