diff options
| author | Alex Lorenz <arphaman@gmail.com> | 2017-03-10 15:04:58 +0000 |
|---|---|---|
| committer | Alex Lorenz <arphaman@gmail.com> | 2017-03-10 15:04:58 +0000 |
| commit | 76377dcf99ddf628cdcd45833c839596e29e17f2 (patch) | |
| tree | 8c27bd4089c9e5ce532d95ae2e06c2571942e52d /clang/lib | |
| parent | 3cc57fa1e7a3a8e25322a5fbe061dea5a17c945b (diff) | |
| download | bcm5719-llvm-76377dcf99ddf628cdcd45833c839596e29e17f2.tar.gz bcm5719-llvm-76377dcf99ddf628cdcd45833c839596e29e17f2.zip | |
Print nested name specifiers for typedefs and type aliases
Printing typedefs or type aliases using clang_getTypeSpelling() is missing the
namespace they are defined in. This is in contrast to other types that always
yield the full typename including namespaces.
Patch by Michael Reiher!
Differential Revision: https://reviews.llvm.org/D29944
llvm-svn: 297465
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/AST/TypePrinter.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/clang/lib/AST/TypePrinter.cpp b/clang/lib/AST/TypePrinter.cpp index c4bc6a4ab54..84aa7dc8455 100644 --- a/clang/lib/AST/TypePrinter.cpp +++ b/clang/lib/AST/TypePrinter.cpp @@ -96,7 +96,7 @@ namespace { static bool canPrefixQualifiers(const Type *T, bool &NeedARCStrongQualifier); void spaceBeforePlaceHolder(raw_ostream &OS); - void printTypeSpec(const NamedDecl *D, raw_ostream &OS); + void printTypeSpec(NamedDecl *D, raw_ostream &OS); void printBefore(const Type *ty, Qualifiers qs, raw_ostream &OS); void printBefore(QualType T, raw_ostream &OS); @@ -798,7 +798,14 @@ void TypePrinter::printFunctionNoProtoAfter(const FunctionNoProtoType *T, printAfter(T->getReturnType(), OS); } -void TypePrinter::printTypeSpec(const NamedDecl *D, raw_ostream &OS) { +void TypePrinter::printTypeSpec(NamedDecl *D, raw_ostream &OS) { + + // Compute the full nested-name-specifier for this type. + // In C, this will always be empty except when the type + // being printed is anonymous within other Record. + if (!Policy.SuppressScope) + AppendScope(D->getDeclContext(), OS); + IdentifierInfo *II = D->getIdentifier(); OS << II->getName(); spaceBeforePlaceHolder(OS); |

