From 5d92eaeb17f9b3b384a9d62036ee9d81134d2762 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Thu, 12 Nov 2015 03:57:16 +0000 Subject: [PATCH] libclang: add new StringSet type This allows the return of a set of CXStrings from libclang. This is setup work for an upcoming change to permit returning multiple mangled symbols. llvm-svn: 252852 --- clang/include/clang-c/CXString.h | 10 ++++++++++ clang/tools/libclang/CXString.cpp | 15 +++++++++++++++ clang/tools/libclang/CXString.h | 2 ++ clang/tools/libclang/libclang.exports | 1 + 4 files changed, 28 insertions(+) diff --git a/clang/include/clang-c/CXString.h b/clang/include/clang-c/CXString.h index a649cdf82fc7..68ab7bc5244c 100644 --- a/clang/include/clang-c/CXString.h +++ b/clang/include/clang-c/CXString.h @@ -40,6 +40,11 @@ typedef struct { unsigned private_flags; } CXString; +typedef struct { + CXString *Strings; + unsigned Count; +} CXStringSet; + /** * \brief Retrieve the character data associated with the given string. */ @@ -50,6 +55,11 @@ CINDEX_LINKAGE const char *clang_getCString(CXString string); */ CINDEX_LINKAGE void clang_disposeString(CXString string); +/** + * \brief Free the given string set. + */ +CINDEX_LINKAGE void clang_disposeStringSet(CXStringSet *set); + /** * @} */ diff --git a/clang/tools/libclang/CXString.cpp b/clang/tools/libclang/CXString.cpp index dec8ebcd98e1..ca9989bc21c8 100644 --- a/clang/tools/libclang/CXString.cpp +++ b/clang/tools/libclang/CXString.cpp @@ -112,6 +112,15 @@ CXString createCXString(CXStringBuf *buf) { return Str; } +CXStringSet *createSet(const std::vector &Strings) { + CXStringSet *Set = new CXStringSet; + Set->Count = Strings.size(); + Set->Strings = new CXString[Set->Count]; + for (unsigned SI = 0, SE = Set->Count; SI < SE; ++SI) + Set->Strings[SI] = createDup(Strings[SI]); + return Set; +} + //===----------------------------------------------------------------------===// // String pools. @@ -175,5 +184,11 @@ void clang_disposeString(CXString string) { break; } } + +void clang_disposeStringSet(CXStringSet *set) { + delete[] set->Strings; + delete set; +} + } // end: extern "C" diff --git a/clang/tools/libclang/CXString.h b/clang/tools/libclang/CXString.h index 72ac0cf46914..6473eb2d7103 100644 --- a/clang/tools/libclang/CXString.h +++ b/clang/tools/libclang/CXString.h @@ -68,6 +68,8 @@ CXString createRef(std::string String) = delete; /// \brief Create a CXString object that is backed by a string buffer. CXString createCXString(CXStringBuf *buf); +CXStringSet *createSet(const std::vector &Strings); + /// \brief A string pool used for fast allocation/deallocation of strings. class CXStringPool { public: diff --git a/clang/tools/libclang/libclang.exports b/clang/tools/libclang/libclang.exports index fd157bc4951e..352ba5766ae2 100644 --- a/clang/tools/libclang/libclang.exports +++ b/clang/tools/libclang/libclang.exports @@ -120,6 +120,7 @@ clang_disposeOverriddenCursors clang_disposeCXPlatformAvailability clang_disposeSourceRangeList clang_disposeString +clang_disposeStringSet clang_disposeTokens clang_disposeTranslationUnit clang_enableStackTraces