]> granicus.if.org Git - clang/commitdiff
CIndex:
authorTed Kremenek <kremenek@apple.com>
Mon, 11 Jan 2010 23:56:39 +0000 (23:56 +0000)
committerTed Kremenek <kremenek@apple.com>
Mon, 11 Jan 2010 23:56:39 +0000 (23:56 +0000)
- 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

include/clang-c/Index.h
tools/CIndex/CIndex.cpp
tools/CIndex/CIndex.exports
tools/CIndex/CIndexUSRs.cpp

index 96c1b2f087ad8cb74b52065e371ede2a4b664ca2..b853d74bf53971efdd1b223c63b39b1b464f1c32 100644 (file)
@@ -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);
index 19e82fc36f9f36b5396dadcbaa3084c8fca9b756..53b4ed6f30902ef5b82e7aea4e76191992d1d990 100644 (file)
@@ -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<NamedDecl *>(AnonDecl);
index 3326087f9efc3c1bcf4df86558f60f1beb755d42..006fc06a96a7be18f2d20bdd9569f69b6ca785f0 100644 (file)
@@ -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
index 40f93cd323aa6f425e885d013d16b99259f10cca..e53c0c66f1797ea96b09a1463cb144a75adf945e 100644 (file)
@@ -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"