Mercurial > hg > CbC > CbC_llvm
diff clang/lib/Parse/ParseInit.cpp @ 221:79ff65ed7e25
LLVM12 Original
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 15 Jun 2021 19:15:29 +0900 |
parents | 1d019706d866 |
children | c4bab56944e8 |
line wrap: on
line diff
--- a/clang/lib/Parse/ParseInit.cpp Tue Jun 15 19:13:43 2021 +0900 +++ b/clang/lib/Parse/ParseInit.cpp Tue Jun 15 19:15:29 2021 +0900 @@ -159,8 +159,7 @@ /// /// \p CodeCompleteCB is called with Designation parsed so far. ExprResult Parser::ParseInitializerWithPotentialDesignator( - llvm::function_ref<void(const Designation &)> CodeCompleteCB) { - + DesignatorCompletionInfo DesignatorCompletion) { // If this is the old-style GNU extension: // designation ::= identifier ':' // Handle it as a field designator. Otherwise, this must be the start of a @@ -183,6 +182,8 @@ Designation D; D.AddDesignator(Designator::getField(FieldName, SourceLocation(), NameLoc)); + PreferredType.enterDesignatedInitializer( + Tok.getLocation(), DesignatorCompletion.PreferredBaseType, D); return Actions.ActOnDesignatedInitializer(D, ColonLoc, true, ParseInitializer()); } @@ -199,8 +200,9 @@ SourceLocation DotLoc = ConsumeToken(); if (Tok.is(tok::code_completion)) { - CodeCompleteCB(Desig); cutOffParsing(); + Actions.CodeCompleteDesignator(DesignatorCompletion.PreferredBaseType, + DesignatorCompletion.InitExprs, Desig); return ExprError(); } if (Tok.isNot(tok::identifier)) { @@ -388,6 +390,8 @@ // Handle a normal designator sequence end, which is an equal. if (Tok.is(tok::equal)) { SourceLocation EqualLoc = ConsumeToken(); + PreferredType.enterDesignatedInitializer( + Tok.getLocation(), DesignatorCompletion.PreferredBaseType, Desig); return Actions.ActOnDesignatedInitializer(Desig, EqualLoc, false, ParseInitializer()); } @@ -396,6 +400,8 @@ // direct-list-initialization of the aggregate element. We allow this as an // extension from C++11 onwards (when direct-list-initialization was added). if (Tok.is(tok::l_brace) && getLangOpts().CPlusPlus11) { + PreferredType.enterDesignatedInitializer( + Tok.getLocation(), DesignatorCompletion.PreferredBaseType, Desig); return Actions.ActOnDesignatedInitializer(Desig, SourceLocation(), false, ParseBraceInitializer()); } @@ -453,9 +459,9 @@ Actions, EnterExpressionEvaluationContext::InitList); bool InitExprsOk = true; - auto CodeCompleteDesignation = [&](const Designation &D) { - Actions.CodeCompleteDesignator(PreferredType.get(T.getOpenLocation()), - InitExprs, D); + DesignatorCompletionInfo DesignatorCompletion{ + InitExprs, + PreferredType.get(T.getOpenLocation()), }; while (1) { @@ -476,7 +482,7 @@ // initializer directly. ExprResult SubElt; if (MayBeDesignationStart()) - SubElt = ParseInitializerWithPotentialDesignator(CodeCompleteDesignation); + SubElt = ParseInitializerWithPotentialDesignator(DesignatorCompletion); else SubElt = ParseInitializer(); @@ -556,9 +562,9 @@ return false; } - auto CodeCompleteDesignation = [&](const Designation &D) { - Actions.CodeCompleteDesignator(PreferredType.get(Braces.getOpenLocation()), - InitExprs, D); + DesignatorCompletionInfo DesignatorCompletion{ + InitExprs, + PreferredType.get(Braces.getOpenLocation()), }; while (!isEofOrEom()) { trailingComma = false; @@ -566,7 +572,7 @@ // initializer directly. ExprResult SubElt; if (MayBeDesignationStart()) - SubElt = ParseInitializerWithPotentialDesignator(CodeCompleteDesignation); + SubElt = ParseInitializerWithPotentialDesignator(DesignatorCompletion); else SubElt = ParseInitializer();