From 2b9b5bb697d40fe6a348464a6da66e74c81fdbd4 Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Fri, 5 Oct 2012 00:22:37 +0000 Subject: [libclang] Introduce new C functions that provide information about modules: clang_Cursor_getModule clang_Module_getParent clang_Module_getName clang_Module_getFullName clang_Module_getNumTopLevelHeaders clang_Module_getTopLevelHeader llvm-svn: 165280 --- clang/tools/libclang/CIndex.cpp | 48 +++++++++++++++++++++++++++++++++++ clang/tools/libclang/libclang.exports | 6 +++++ 2 files changed, 54 insertions(+) (limited to 'clang/tools/libclang') diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp index abe3eea4afa..3543a39f7a3 100644 --- a/clang/tools/libclang/CIndex.cpp +++ b/clang/tools/libclang/CIndex.cpp @@ -5834,6 +5834,54 @@ CXComment clang_Cursor_getParsedComment(CXCursor C) { return cxcomment::createCXComment(FC, getCursorTU(C)); } +CXModule clang_Cursor_getModule(CXCursor C) { + if (C.kind == CXCursor_ModuleImportDecl) { + if (ImportDecl *ImportD = dyn_cast_or_null(getCursorDecl(C))) + return ImportD->getImportedModule(); + } + + return 0; +} + +CXModule clang_Module_getParent(CXModule CXMod) { + if (!CXMod) + return 0; + Module *Mod = static_cast(CXMod); + return Mod->Parent; +} + +CXString clang_Module_getName(CXModule CXMod) { + if (!CXMod) + return createCXString(""); + Module *Mod = static_cast(CXMod); + return createCXString(Mod->Name); +} + +CXString clang_Module_getFullName(CXModule CXMod) { + if (!CXMod) + return createCXString(""); + Module *Mod = static_cast(CXMod); + return createCXString(Mod->getFullModuleName()); +} + +unsigned clang_Module_getNumTopLevelHeaders(CXModule CXMod) { + if (!CXMod) + return 0; + Module *Mod = static_cast(CXMod); + return Mod->TopHeaders.size(); +} + +CXFile clang_Module_getTopLevelHeader(CXModule CXMod, unsigned Index) { + if (!CXMod) + return 0; + Module *Mod = static_cast(CXMod); + + if (Index < Mod->TopHeaders.size()) + return const_cast(Mod->TopHeaders[Index]); + + return 0; +} + } // end: extern "C" //===----------------------------------------------------------------------===// diff --git a/clang/tools/libclang/libclang.exports b/clang/tools/libclang/libclang.exports index 610bd91c6a5..ec77fafa7b6 100644 --- a/clang/tools/libclang/libclang.exports +++ b/clang/tools/libclang/libclang.exports @@ -15,6 +15,12 @@ clang_Cursor_getSpellingNameRange clang_Cursor_getTranslationUnit clang_Cursor_isDynamicCall clang_Cursor_isNull +clang_Cursor_getModule +clang_Module_getParent +clang_Module_getName +clang_Module_getFullName +clang_Module_getNumTopLevelHeaders +clang_Module_getTopLevelHeader clang_IndexAction_create clang_IndexAction_dispose clang_Range_isNull -- cgit v1.2.3