From: Ted Kremenek Date: Mon, 11 Jan 2010 23:56:39 +0000 (+0000) Subject: CIndex: X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=317238334161d2c72d2432a79827d9a7ee1fc123;p=clang CIndex: - Remove unused (and unimplemented) clang_getDeclarationName(). - Remove unused (and unimplemented) clang_getEntity(). - Add clang_getEntityFromDecl(): maps from a CXDecl to a CXEntity) - Add clang_getDeclaration(): maps from a (CXEntity, CXTranslationUnit) to a CXDecl). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93209 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h index 96c1b2f087..b853d74bf5 100644 --- a/include/clang-c/Index.h +++ b/include/clang-c/Index.h @@ -142,7 +142,10 @@ typedef struct { } CXCursor; /* A unique token for looking up "visible" CXDecls from a CXTranslationUnit. */ -typedef void *CXEntity; +typedef struct { + CXIndex index; + void *data; +} CXEntity; /** * For functions returning a string that might or might not need @@ -321,14 +324,17 @@ CINDEX_LINKAGE time_t clang_getFileTime(CXFile SFile); /* * CXEntity Operations. */ -CINDEX_LINKAGE const char *clang_getDeclarationName(CXEntity); + +/* clang_getDeclaration() maps from a CXEntity to the matching CXDecl (if any) + * in a specified translation unit. */ +CINDEX_LINKAGE CXDecl clang_getDeclaration(CXEntity, CXTranslationUnit); + CINDEX_LINKAGE const char *clang_getUSR(CXEntity); -CINDEX_LINKAGE CXEntity clang_getEntity(const char *USR); /* * CXDecl Operations. */ CINDEX_LINKAGE CXCursor clang_getCursorFromDecl(CXDecl); -CINDEX_LINKAGE CXEntity clang_getEntityFromDecl(CXDecl); +CINDEX_LINKAGE CXEntity clang_getEntityFromDecl(CXIndex, CXDecl); CINDEX_LINKAGE CXString clang_getDeclSpelling(CXDecl); CINDEX_LINKAGE unsigned clang_getDeclLine(CXDecl); CINDEX_LINKAGE unsigned clang_getDeclColumn(CXDecl); diff --git a/tools/CIndex/CIndex.cpp b/tools/CIndex/CIndex.cpp index 19e82fc36f..53b4ed6f30 100644 --- a/tools/CIndex/CIndex.cpp +++ b/tools/CIndex/CIndex.cpp @@ -628,10 +628,6 @@ void clang_loadDeclaration(CXDecl Dcl, // CXDecl Operations. // -CXEntity clang_getEntityFromDecl(CXDecl) { - return 0; -} - CXString clang_getDeclSpelling(CXDecl AnonDecl) { assert(AnonDecl && "Passed null CXDecl"); NamedDecl *ND = static_cast(AnonDecl); diff --git a/tools/CIndex/CIndex.exports b/tools/CIndex/CIndex.exports index 3326087f9e..006fc06a96 100644 --- a/tools/CIndex/CIndex.exports +++ b/tools/CIndex/CIndex.exports @@ -28,9 +28,8 @@ _clang_getDeclExtent _clang_getDeclSource _clang_getDeclSourceFile _clang_getDeclSpelling -_clang_getDeclarationName +_clang_getDeclaration _clang_getDefinitionSpellingAndExtent -_clang_getEntity _clang_getEntityFromDecl _clang_getFileName _clang_getFileTime diff --git a/tools/CIndex/CIndexUSRs.cpp b/tools/CIndex/CIndexUSRs.cpp index 40f93cd323..e53c0c66f1 100644 --- a/tools/CIndex/CIndexUSRs.cpp +++ b/tools/CIndex/CIndexUSRs.cpp @@ -30,17 +30,52 @@ extern "C" { // // module.m: static void Foo() { } // + +static inline Entity GetEntity(const CXEntity &E) { + return Entity::getFromOpaquePtr(E.data); +} + +static inline ASTUnit *GetTranslationUnit(CXTranslationUnit TU) { + return (ASTUnit*) TU; +} -const char *clang_getDeclarationName(CXEntity) { - return ""; +static inline ASTContext &GetASTContext(CXTranslationUnit TU) { + return GetTranslationUnit(TU)->getASTContext(); } -const char *clang_getUSR(CXEntity) { - return ""; +static inline CXEntity NullCXEntity() { + CXEntity CE; + CE.index = NULL; + CE.data = NULL; + return CE; +} + +static inline CXEntity MakeEntity(CXIndex CIdx, const Entity &E) { + CXEntity CE; + CE.index = CIdx; + CE.data = E.getAsOpaquePtr(); + return CE; } -CXEntity clang_getEntity(const char *URI) { - return 0; +static inline Program &GetProgram(CXIndex CIdx) { + return ((CIndexer*) CIdx)->getProgram(); +} + +/// clang_getDeclaration() maps from a CXEntity to the matching CXDecl (if any) +/// in a specified translation unit. +CXDecl clang_getDeclaration(CXEntity CE, CXTranslationUnit TU) { + return (CXDecl) GetEntity(CE).getDecl(GetASTContext(TU)); +} + + +CXEntity clang_getEntityFromDecl(CXIndex CIdx, CXDecl CE) { + if (Decl *D = (Decl *) CE) + return MakeEntity(CIdx, Entity::get(D, GetProgram(CIdx))); + return NullCXEntity(); +} + +const char *clang_getUSR(CXEntity) { + return ""; } } // end extern "C"