diff options
| author | Douglas Gregor <dgregor@apple.com> | 2011-04-27 16:48:40 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2011-04-27 16:48:40 +0000 |
| commit | 90ebf258c6557d41d6107dc1fbac8c9e31cfa4b2 (patch) | |
| tree | f00d94cebfa8a42c46903069014a135c4c722d2a /clang/lib | |
| parent | 6825eebcd6e420e6d6415efefd6bfe75836ebe1e (diff) | |
| download | bcm5719-llvm-90ebf258c6557d41d6107dc1fbac8c9e31cfa4b2.tar.gz bcm5719-llvm-90ebf258c6557d41d6107dc1fbac8c9e31cfa4b2.zip | |
ASTImporter support for NestedNameSpecifier, from Olaf Krzikalla
llvm-svn: 130307
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/AST/ASTImporter.cpp | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp index 7c45543f66a..3907b1a3191 100644 --- a/clang/lib/AST/ASTImporter.cpp +++ b/clang/lib/AST/ASTImporter.cpp @@ -4077,7 +4077,46 @@ NestedNameSpecifier *ASTImporter::Import(NestedNameSpecifier *FromNNS) { if (!FromNNS) return 0; - // FIXME: Implement! + NestedNameSpecifier *prefix = Import(FromNNS->getPrefix()); + + switch (FromNNS->getKind()) { + case NestedNameSpecifier::Identifier: + if (IdentifierInfo *II = Import(FromNNS->getAsIdentifier())) { + return NestedNameSpecifier::Create(ToContext, prefix, II); + } + return 0; + + case NestedNameSpecifier::Namespace: + if (NamespaceDecl *NS = + cast<NamespaceDecl>(Import(FromNNS->getAsNamespace()))) { + return NestedNameSpecifier::Create(ToContext, prefix, NS); + } + return 0; + + case NestedNameSpecifier::NamespaceAlias: + if (NamespaceAliasDecl *NSAD = + cast<NamespaceAliasDecl>(Import(FromNNS->getAsNamespaceAlias()))) { + return NestedNameSpecifier::Create(ToContext, prefix, NSAD); + } + return 0; + + case NestedNameSpecifier::Global: + return NestedNameSpecifier::GlobalSpecifier(ToContext); + + case NestedNameSpecifier::TypeSpec: + case NestedNameSpecifier::TypeSpecWithTemplate: { + QualType T = Import(QualType(FromNNS->getAsType(), 0u)); + if (!T.isNull()) { + bool bTemplate = FromNNS->getKind() == + NestedNameSpecifier::TypeSpecWithTemplate; + return NestedNameSpecifier::Create(ToContext, prefix, + bTemplate, T.getTypePtr()); + } + } + return 0; + } + + llvm_unreachable("Invalid nested name specifier kind"); return 0; } |

