diff options
| author | Douglas Gregor <dgregor@apple.com> | 2010-08-31 23:48:11 +0000 | 
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2010-08-31 23:48:11 +0000 | 
| commit | a89314e396bda8b7c0f9b3e7a9d9a014b7beef0c (patch) | |
| tree | 4cc7ea5e8e28aa730b5b46dbf8b73593e39684f7 /clang/tools/libclang/CXCursor.cpp | |
| parent | 52bd0dc3bb7d3e1a30c38d3ec7e5c33e49ff3080 (diff) | |
| download | bcm5719-llvm-a89314e396bda8b7c0f9b3e7a9d9a014b7beef0c.tar.gz bcm5719-llvm-a89314e396bda8b7c0f9b3e7a9d9a014b7beef0c.zip | |
Add libclang support for namespace aliases (visitation + USRs) along
with a new cursor kind for a reference to a namespace. 
There's still some oddities in the source location information for
NamespaceAliasDecl that I'll address with a separate commit, so the
source locations displayed in the load-namespaces.cpp test will
change.
llvm-svn: 112676
Diffstat (limited to 'clang/tools/libclang/CXCursor.cpp')
| -rw-r--r-- | clang/tools/libclang/CXCursor.cpp | 28 | 
1 files changed, 24 insertions, 4 deletions
| diff --git a/clang/tools/libclang/CXCursor.cpp b/clang/tools/libclang/CXCursor.cpp index 0fa201a146c..3edbc4d1ef9 100644 --- a/clang/tools/libclang/CXCursor.cpp +++ b/clang/tools/libclang/CXCursor.cpp @@ -16,6 +16,7 @@  #include "CXCursor.h"  #include "clang/Frontend/ASTUnit.h"  #include "clang/AST/Decl.h" +#include "clang/AST/DeclCXX.h"  #include "clang/AST/DeclObjC.h"  #include "clang/AST/Expr.h"  #include "llvm/Support/ErrorHandling.h" @@ -60,6 +61,7 @@ static CXCursorKind GetCursorKind(Decl *D) {      case Decl::Typedef:            return CXCursor_TypedefDecl;      case Decl::Var:                return CXCursor_VarDecl;      case Decl::Namespace:          return CXCursor_Namespace; +    case Decl::NamespaceAlias:     return CXCursor_NamespaceAlias;      case Decl::TemplateTypeParm:   return CXCursor_TemplateTypeParameter;      case Decl::NonTypeTemplateParm:return CXCursor_NonTypeTemplateParameter;      case Decl::TemplateTemplateParm:return CXCursor_TemplateTemplateParameter; @@ -71,10 +73,10 @@ static CXCursorKind GetCursorKind(Decl *D) {      default:        if (TagDecl *TD = dyn_cast<TagDecl>(D)) {          switch (TD->getTagKind()) { -          case TTK_Struct: return CXCursor_StructDecl; -          case TTK_Class:  return CXCursor_ClassDecl; -          case TTK_Union:  return CXCursor_UnionDecl; -          case TTK_Enum:   return CXCursor_EnumDecl; +        case TTK_Struct: return CXCursor_StructDecl; +        case TTK_Class:  return CXCursor_ClassDecl; +        case TTK_Union:  return CXCursor_UnionDecl; +        case TTK_Enum:   return CXCursor_EnumDecl;          }        } @@ -329,6 +331,24 @@ cxcursor::getCursorTemplateRef(CXCursor C) {                                         reinterpret_cast<uintptr_t>(C.data[1])));    } +CXCursor cxcursor::MakeCursorNamespaceRef(NamedDecl *NS, SourceLocation Loc,  +                                          ASTUnit *TU) { +   +  assert(NS && (isa<NamespaceDecl>(NS) || isa<NamespaceAliasDecl>(NS)) && TU && +         "Invalid arguments!"); +  void *RawLoc = reinterpret_cast<void *>(Loc.getRawEncoding()); +  CXCursor C = { CXCursor_NamespaceRef, { NS, RawLoc, TU } }; +  return C;     +} + +std::pair<NamedDecl *, SourceLocation>  +cxcursor::getCursorNamespaceRef(CXCursor C) { +  assert(C.kind == CXCursor_NamespaceRef); +  return std::make_pair(static_cast<NamedDecl *>(C.data[0]), +                        SourceLocation::getFromRawEncoding( +                                       reinterpret_cast<uintptr_t>(C.data[1])));   +} +  CXCursor cxcursor::MakeCursorCXXBaseSpecifier(CXXBaseSpecifier *B, ASTUnit *TU){    CXCursor C = { CXCursor_CXXBaseSpecifier, { B, 0, TU } };    return C;   | 

