diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-10-22 04:46:14 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-10-22 04:46:14 +0000 |
commit | 0e304ea8a1a49f3c4443c335de448f667c43af1b (patch) | |
tree | e7d3e8654ce52c22e32c56236f4d6529be3af635 /clang/lib/Parse/ParseExpr.cpp | |
parent | 629aaaf143743c183babcd2c03227cbbd8b6104b (diff) | |
download | bcm5719-llvm-0e304ea8a1a49f3c4443c335de448f667c43af1b.tar.gz bcm5719-llvm-0e304ea8a1a49f3c4443c335de448f667c43af1b.zip |
[coroutines] Add parsing support for co_await expression, co_yield expression,
co_await modifier on range-based for loop, co_return statement.
llvm-svn: 250985
Diffstat (limited to 'clang/lib/Parse/ParseExpr.cpp')
-rw-r--r-- | clang/lib/Parse/ParseExpr.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 52690470f24..ec1edbcde2f 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -163,6 +163,8 @@ ExprResult Parser::ParseAssignmentExpression(TypeCastState isTypeCast) { if (Tok.is(tok::kw_throw)) return ParseThrowExpression(); + if (Tok.is(tok::kw_co_yield)) + return ParseCoyieldExpression(); ExprResult LHS = ParseCastExpression(/*isUnaryExpression=*/false, /*isAddressOfOperand=*/false, @@ -522,6 +524,7 @@ class CastExpressionIdValidator : public CorrectionCandidateCallback { /// postfix-expression /// '++' unary-expression /// '--' unary-expression +/// [Coro] 'co_await' cast-expression /// unary-operator cast-expression /// 'sizeof' unary-expression /// 'sizeof' '(' type-name ')' @@ -1041,6 +1044,14 @@ ExprResult Parser::ParseCastExpression(bool isUnaryExpression, return Res; } + case tok::kw_co_await: { // unary-expression: 'co_await' cast-expression + SourceLocation SavedLoc = ConsumeToken(); + Res = ParseCastExpression(false); + (void)SavedLoc; + // FIXME: Pass to Sema. + return Res; + } + case tok::kw___extension__:{//unary-expression:'__extension__' cast-expr [GNU] // __extension__ silences extension warnings in the subexpression. ExtensionRAIIObject O(Diags); // Use RAII to do this. |