Skip to content

Commit d2476ed

Browse files
committed
code review
1 parent 639da07 commit d2476ed

File tree

1 file changed

+43
-43
lines changed

1 file changed

+43
-43
lines changed

clang/lib/Sema/SemaCodeComplete.cpp

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,37 @@ class ResultBuilder {
413413
bool IsImpossibleToSatisfy(const NamedDecl *ND) const;
414414
//@}
415415
};
416+
417+
void AddFunctionTypeQuals(CodeCompletionBuilder &Result,
418+
const Qualifiers Quals) {
419+
// FIXME: Add ref-qualifier!
420+
421+
// Handle single qualifiers without copying
422+
if (Quals.hasOnlyConst()) {
423+
Result.AddInformativeChunk(" const");
424+
return;
425+
}
426+
427+
if (Quals.hasOnlyVolatile()) {
428+
Result.AddInformativeChunk(" volatile");
429+
return;
430+
}
431+
432+
if (Quals.hasOnlyRestrict()) {
433+
Result.AddInformativeChunk(" restrict");
434+
return;
435+
}
436+
437+
// Handle multiple qualifiers.
438+
std::string QualsStr;
439+
if (Quals.hasConst())
440+
QualsStr += " const";
441+
if (Quals.hasVolatile())
442+
QualsStr += " volatile";
443+
if (Quals.hasRestrict())
444+
QualsStr += " restrict";
445+
Result.AddInformativeChunk(Result.getAllocator().CopyString(QualsStr));
446+
}
416447
} // namespace
417448

418449
void PreferredTypeBuilder::enterReturn(Sema &S, SourceLocation Tok) {
@@ -1436,7 +1467,7 @@ void ResultBuilder::AddResult(Result R, DeclContext *CurContext,
14361467
AdjustResultPriorityForDecl(R);
14371468

14381469
// Account for explicit object parameter
1439-
const auto getQualifiers = [&](const CXXMethodDecl *MethodDecl) {
1470+
const auto GetQualifiers = [&](const CXXMethodDecl *MethodDecl) {
14401471
if (MethodDecl->isExplicitObjectMemberFunction())
14411472
return MethodDecl->getFunctionObjectParameterType().getQualifiers();
14421473
else
@@ -1455,7 +1486,7 @@ void ResultBuilder::AddResult(Result R, DeclContext *CurContext,
14551486
if (HasObjectTypeQualifiers)
14561487
if (const auto *Method = dyn_cast<CXXMethodDecl>(R.Declaration))
14571488
if (Method->isInstance()) {
1458-
Qualifiers MethodQuals = getQualifiers(Method);
1489+
Qualifiers MethodQuals = GetQualifiers(Method);
14591490
if (ObjectTypeQualifiers == MethodQuals)
14601491
R.Priority += CCD_ObjectQualifierMatch;
14611492
else if (ObjectTypeQualifiers - MethodQuals) {
@@ -3438,19 +3469,15 @@ static void AddQualifierToCompletionString(CodeCompletionBuilder &Result,
34383469
// object
34393470
static void AddCXXExplicitObjectFunctionTypeQualsToCompletionString(
34403471
CodeCompletionBuilder &Result, const CXXMethodDecl *Function) {
3441-
const auto Quals = Function->getFunctionObjectParameterType();
3472+
assert(isa<CXXMethodDecl>(Function) &&
3473+
Function->hasCXXExplicitFunctionObjectParameter() &&
3474+
"Valid only on CXX explicit object methods");
34423475

3476+
const auto Quals = Function->getFunctionObjectParameterType();
34433477
if (!Quals.hasQualifiers())
34443478
return;
34453479

3446-
std::string QualsStr;
3447-
if (Quals.getQualifiers().hasConst())
3448-
QualsStr += " const";
3449-
if (Quals.getQualifiers().hasVolatile())
3450-
QualsStr += " volatile";
3451-
if (Quals.getQualifiers().hasRestrict())
3452-
QualsStr += " restrict";
3453-
Result.AddInformativeChunk(Result.getAllocator().CopyString(QualsStr));
3480+
AddFunctionTypeQuals(Result, Quals.getQualifiers());
34543481
}
34553482

34563483
static void
@@ -3461,40 +3488,13 @@ AddFunctionTypeQualsToCompletionString(CodeCompletionBuilder &Result,
34613488
// if explicit object method, infer quals from the object parameter
34623489
AddCXXExplicitObjectFunctionTypeQualsToCompletionString(Result,
34633490
CxxMethodDecl);
3464-
return;
3465-
}
3466-
3467-
const auto *Proto = Function->getType()->getAs<FunctionProtoType>();
3468-
if (!Proto || !Proto->getMethodQuals())
3469-
return;
3470-
3471-
// FIXME: Add ref-qualifier!
3472-
3473-
// Handle single qualifiers without copying
3474-
if (Proto->getMethodQuals().hasOnlyConst()) {
3475-
Result.AddInformativeChunk(" const");
3476-
return;
3477-
}
3478-
3479-
if (Proto->getMethodQuals().hasOnlyVolatile()) {
3480-
Result.AddInformativeChunk(" volatile");
3481-
return;
3482-
}
3491+
} else {
3492+
const auto *Proto = Function->getType()->getAs<FunctionProtoType>();
3493+
if (!Proto || !Proto->getMethodQuals())
3494+
return;
34833495

3484-
if (Proto->getMethodQuals().hasOnlyRestrict()) {
3485-
Result.AddInformativeChunk(" restrict");
3486-
return;
3496+
AddFunctionTypeQuals(Result, Proto->getMethodQuals());
34873497
}
3488-
3489-
// Handle multiple qualifiers.
3490-
std::string QualsStr;
3491-
if (Proto->isConst())
3492-
QualsStr += " const";
3493-
if (Proto->isVolatile())
3494-
QualsStr += " volatile";
3495-
if (Proto->isRestrict())
3496-
QualsStr += " restrict";
3497-
Result.AddInformativeChunk(Result.getAllocator().CopyString(QualsStr));
34983498
}
34993499

35003500
static void

0 commit comments

Comments
 (0)