Skip to content

Commit 575e09d

Browse files
committed
[AST] Let DeclarationNameInfo printing use PrintingPolicy, and fix const-correctness
1 parent 28a5dc7 commit 575e09d

File tree

4 files changed

+21
-20
lines changed

4 files changed

+21
-20
lines changed

clang/include/clang/AST/DeclarationName.h

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ class DeclarationName {
528528

529529
static int compare(DeclarationName LHS, DeclarationName RHS);
530530

531-
void print(raw_ostream &OS, const PrintingPolicy &Policy);
531+
void print(raw_ostream &OS, const PrintingPolicy &Policy) const;
532532

533533
void dump() const;
534534
};
@@ -792,7 +792,7 @@ struct DeclarationNameInfo {
792792
std::string getAsString() const;
793793

794794
/// printName - Print the human-readable name to a stream.
795-
void printName(raw_ostream &OS) const;
795+
void printName(raw_ostream &OS, PrintingPolicy Policy) const;
796796

797797
/// getBeginLoc - Retrieve the location of the first token.
798798
SourceLocation getBeginLoc() const { return NameLoc; }
@@ -829,11 +829,7 @@ inline const PartialDiagnostic &operator<<(const PartialDiagnostic &PD,
829829
return PD;
830830
}
831831

832-
inline raw_ostream &operator<<(raw_ostream &OS,
833-
DeclarationNameInfo DNInfo) {
834-
DNInfo.printName(OS);
835-
return OS;
836-
}
832+
raw_ostream &operator<<(raw_ostream &OS, DeclarationNameInfo DNInfo);
837833

838834
} // namespace clang
839835

clang/lib/AST/DeclPrinter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -625,13 +625,13 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {
625625
if (Policy.FullyQualifiedName) {
626626
Proto += D->getQualifiedNameAsString();
627627
} else {
628+
llvm::raw_string_ostream OS(Proto);
628629
if (!Policy.SuppressScope) {
629630
if (const NestedNameSpecifier *NS = D->getQualifier()) {
630-
llvm::raw_string_ostream OS(Proto);
631631
NS->print(OS, Policy);
632632
}
633633
}
634-
Proto += D->getNameInfo().getAsString();
634+
D->getNameInfo().printName(OS, Policy);
635635
}
636636

637637
if (GuideDecl)

clang/lib/AST/DeclarationName.cpp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,8 @@ static void printCXXConstructorDestructorName(QualType ClassType,
134134
ClassType.print(OS, Policy);
135135
}
136136

137-
void DeclarationName::print(raw_ostream &OS, const PrintingPolicy &Policy) {
137+
void DeclarationName::print(raw_ostream &OS,
138+
const PrintingPolicy &Policy) const {
138139
switch (getNameKind()) {
139140
case DeclarationName::Identifier:
140141
if (const IdentifierInfo *II = getAsIdentifierInfo())
@@ -447,11 +448,17 @@ bool DeclarationNameInfo::isInstantiationDependent() const {
447448
std::string DeclarationNameInfo::getAsString() const {
448449
std::string Result;
449450
llvm::raw_string_ostream OS(Result);
450-
printName(OS);
451+
OS << *this;
451452
return OS.str();
452453
}
453454

454-
void DeclarationNameInfo::printName(raw_ostream &OS) const {
455+
raw_ostream &clang::operator<<(raw_ostream &OS, DeclarationNameInfo DNInfo) {
456+
LangOptions LO;
457+
DNInfo.printName(OS, PrintingPolicy(LangOptions()));
458+
return OS;
459+
}
460+
461+
void DeclarationNameInfo::printName(raw_ostream &OS, PrintingPolicy Policy) const {
455462
switch (Name.getNameKind()) {
456463
case DeclarationName::Identifier:
457464
case DeclarationName::ObjCZeroArgSelector:
@@ -461,7 +468,7 @@ void DeclarationNameInfo::printName(raw_ostream &OS) const {
461468
case DeclarationName::CXXLiteralOperatorName:
462469
case DeclarationName::CXXUsingDirective:
463470
case DeclarationName::CXXDeductionGuideName:
464-
OS << Name;
471+
Name.print(OS, Policy);
465472
return;
466473

467474
case DeclarationName::CXXConstructorName:
@@ -473,13 +480,11 @@ void DeclarationNameInfo::printName(raw_ostream &OS) const {
473480
else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName)
474481
OS << "operator ";
475482
LangOptions LO;
476-
LO.CPlusPlus = true;
477-
LO.Bool = true;
478-
PrintingPolicy PP(LO);
479-
PP.SuppressScope = true;
480-
OS << TInfo->getType().getAsString(PP);
483+
Policy.adjustForCPlusPlus();
484+
Policy.SuppressScope = true;
485+
OS << TInfo->getType().getAsString(Policy);
481486
} else
482-
OS << Name;
487+
Name.print(OS, Policy);
483488
return;
484489
}
485490
llvm_unreachable("Unexpected declaration name kind");

clang/lib/AST/StmtPrinter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -697,7 +697,7 @@ void StmtPrinter::VisitOMPCriticalDirective(OMPCriticalDirective *Node) {
697697
Indent() << "#pragma omp critical";
698698
if (Node->getDirectiveName().getName()) {
699699
OS << " (";
700-
Node->getDirectiveName().printName(OS);
700+
Node->getDirectiveName().printName(OS, Policy);
701701
OS << ")";
702702
}
703703
PrintOMPExecutableDirective(Node);

0 commit comments

Comments
 (0)