forked from OSchip/llvm-project
[DeclPrinter] Extract function PrintConstructorInitializers, NFC
Patch by Nikolai Kosjar! Differential Revision: https://reviews.llvm.org/D40066 llvm-svn: 318367
This commit is contained in:
parent
9994581395
commit
dc616faa44
|
@ -37,6 +37,8 @@ namespace {
|
||||||
void ProcessDeclGroup(SmallVectorImpl<Decl*>& Decls);
|
void ProcessDeclGroup(SmallVectorImpl<Decl*>& Decls);
|
||||||
|
|
||||||
void Print(AccessSpecifier AS);
|
void Print(AccessSpecifier AS);
|
||||||
|
void PrintConstructorInitializers(CXXConstructorDecl *CDecl,
|
||||||
|
std::string &Proto);
|
||||||
|
|
||||||
/// Print an Objective-C method type in parentheses.
|
/// Print an Objective-C method type in parentheses.
|
||||||
///
|
///
|
||||||
|
@ -274,6 +276,71 @@ void DeclPrinter::Print(AccessSpecifier AS) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DeclPrinter::PrintConstructorInitializers(CXXConstructorDecl *CDecl,
|
||||||
|
std::string &Proto) {
|
||||||
|
bool HasInitializerList = false;
|
||||||
|
for (const auto *BMInitializer : CDecl->inits()) {
|
||||||
|
if (BMInitializer->isInClassMemberInitializer())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!HasInitializerList) {
|
||||||
|
Proto += " : ";
|
||||||
|
Out << Proto;
|
||||||
|
Proto.clear();
|
||||||
|
HasInitializerList = true;
|
||||||
|
} else
|
||||||
|
Out << ", ";
|
||||||
|
|
||||||
|
if (BMInitializer->isAnyMemberInitializer()) {
|
||||||
|
FieldDecl *FD = BMInitializer->getAnyMember();
|
||||||
|
Out << *FD;
|
||||||
|
} else {
|
||||||
|
Out << QualType(BMInitializer->getBaseClass(), 0).getAsString(Policy);
|
||||||
|
}
|
||||||
|
|
||||||
|
Out << "(";
|
||||||
|
if (!BMInitializer->getInit()) {
|
||||||
|
// Nothing to print
|
||||||
|
} else {
|
||||||
|
Expr *Init = BMInitializer->getInit();
|
||||||
|
if (ExprWithCleanups *Tmp = dyn_cast<ExprWithCleanups>(Init))
|
||||||
|
Init = Tmp->getSubExpr();
|
||||||
|
|
||||||
|
Init = Init->IgnoreParens();
|
||||||
|
|
||||||
|
Expr *SimpleInit = nullptr;
|
||||||
|
Expr **Args = nullptr;
|
||||||
|
unsigned NumArgs = 0;
|
||||||
|
if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
|
||||||
|
Args = ParenList->getExprs();
|
||||||
|
NumArgs = ParenList->getNumExprs();
|
||||||
|
} else if (CXXConstructExpr *Construct =
|
||||||
|
dyn_cast<CXXConstructExpr>(Init)) {
|
||||||
|
Args = Construct->getArgs();
|
||||||
|
NumArgs = Construct->getNumArgs();
|
||||||
|
} else
|
||||||
|
SimpleInit = Init;
|
||||||
|
|
||||||
|
if (SimpleInit)
|
||||||
|
SimpleInit->printPretty(Out, nullptr, Policy, Indentation);
|
||||||
|
else {
|
||||||
|
for (unsigned I = 0; I != NumArgs; ++I) {
|
||||||
|
assert(Args[I] != nullptr && "Expected non-null Expr");
|
||||||
|
if (isa<CXXDefaultArgExpr>(Args[I]))
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (I)
|
||||||
|
Out << ", ";
|
||||||
|
Args[I]->printPretty(Out, nullptr, Policy, Indentation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Out << ")";
|
||||||
|
if (BMInitializer->isPackExpansion())
|
||||||
|
Out << "...";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
// Common C declarations
|
// Common C declarations
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@ -608,70 +675,8 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CDecl) {
|
if (CDecl) {
|
||||||
if (!Policy.TerseOutput) {
|
if (!Policy.TerseOutput)
|
||||||
bool HasInitializerList = false;
|
PrintConstructorInitializers(CDecl, Proto);
|
||||||
for (const auto *BMInitializer : CDecl->inits()) {
|
|
||||||
if (BMInitializer->isInClassMemberInitializer())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!HasInitializerList) {
|
|
||||||
Proto += " : ";
|
|
||||||
Out << Proto;
|
|
||||||
Proto.clear();
|
|
||||||
HasInitializerList = true;
|
|
||||||
} else
|
|
||||||
Out << ", ";
|
|
||||||
|
|
||||||
if (BMInitializer->isAnyMemberInitializer()) {
|
|
||||||
FieldDecl *FD = BMInitializer->getAnyMember();
|
|
||||||
Out << *FD;
|
|
||||||
} else {
|
|
||||||
Out << QualType(BMInitializer->getBaseClass(), 0)
|
|
||||||
.getAsString(Policy);
|
|
||||||
}
|
|
||||||
|
|
||||||
Out << "(";
|
|
||||||
if (!BMInitializer->getInit()) {
|
|
||||||
// Nothing to print
|
|
||||||
} else {
|
|
||||||
Expr *Init = BMInitializer->getInit();
|
|
||||||
if (ExprWithCleanups *Tmp = dyn_cast<ExprWithCleanups>(Init))
|
|
||||||
Init = Tmp->getSubExpr();
|
|
||||||
|
|
||||||
Init = Init->IgnoreParens();
|
|
||||||
|
|
||||||
Expr *SimpleInit = nullptr;
|
|
||||||
Expr **Args = nullptr;
|
|
||||||
unsigned NumArgs = 0;
|
|
||||||
if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
|
|
||||||
Args = ParenList->getExprs();
|
|
||||||
NumArgs = ParenList->getNumExprs();
|
|
||||||
} else if (CXXConstructExpr *Construct =
|
|
||||||
dyn_cast<CXXConstructExpr>(Init)) {
|
|
||||||
Args = Construct->getArgs();
|
|
||||||
NumArgs = Construct->getNumArgs();
|
|
||||||
} else
|
|
||||||
SimpleInit = Init;
|
|
||||||
|
|
||||||
if (SimpleInit)
|
|
||||||
SimpleInit->printPretty(Out, nullptr, Policy, Indentation);
|
|
||||||
else {
|
|
||||||
for (unsigned I = 0; I != NumArgs; ++I) {
|
|
||||||
assert(Args[I] != nullptr && "Expected non-null Expr");
|
|
||||||
if (isa<CXXDefaultArgExpr>(Args[I]))
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (I)
|
|
||||||
Out << ", ";
|
|
||||||
Args[I]->printPretty(Out, nullptr, Policy, Indentation);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Out << ")";
|
|
||||||
if (BMInitializer->isPackExpansion())
|
|
||||||
Out << "...";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (!ConversionDecl && !isa<CXXDestructorDecl>(D)) {
|
} else if (!ConversionDecl && !isa<CXXDestructorDecl>(D)) {
|
||||||
if (FT && FT->hasTrailingReturn()) {
|
if (FT && FT->hasTrailingReturn()) {
|
||||||
if (!GuideDecl)
|
if (!GuideDecl)
|
||||||
|
|
Loading…
Reference in New Issue