summaryrefslogtreecommitdiffstats
path: root/tools/libclang/CIndexCodeCompletion.cpp
diff options
context:
space:
mode:
authorAlp Toker <alp@nuanti.com>2014-07-07 01:23:14 +0000
committerAlp Toker <alp@nuanti.com>2014-07-07 01:23:14 +0000
commit3d44bd8e89a63f4dc707acd4f4322fde8919de8d (patch)
tree606299a2cd981b0f7fb8ea3373093463cd56e8b8 /tools/libclang/CIndexCodeCompletion.cpp
parentd044b4fcaa7558afdf097f3a227918313463812c (diff)
libclang: refactor handling of unsaved_files
Consolidate CXUnsavedFile argument handling in API functions to support a wider cleanup of various file remapping schemes in the frontend. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212427 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/libclang/CIndexCodeCompletion.cpp')
-rw-r--r--tools/libclang/CIndexCodeCompletion.cpp27
1 files changed, 13 insertions, 14 deletions
diff --git a/tools/libclang/CIndexCodeCompletion.cpp b/tools/libclang/CIndexCodeCompletion.cpp
index 9dd2dfec7a..0d88003a1f 100644
--- a/tools/libclang/CIndexCodeCompletion.cpp
+++ b/tools/libclang/CIndexCodeCompletion.cpp
@@ -651,8 +651,7 @@ struct CodeCompleteAtInfo {
const char *complete_filename;
unsigned complete_line;
unsigned complete_column;
- struct CXUnsavedFile *unsaved_files;
- unsigned num_unsaved_files;
+ ArrayRef<CXUnsavedFile> unsaved_files;
unsigned options;
CXCodeCompleteResults *result;
};
@@ -662,8 +661,6 @@ void clang_codeCompleteAt_Impl(void *UserData) {
const char *complete_filename = CCAI->complete_filename;
unsigned complete_line = CCAI->complete_line;
unsigned complete_column = CCAI->complete_column;
- struct CXUnsavedFile *unsaved_files = CCAI->unsaved_files;
- unsigned num_unsaved_files = CCAI->num_unsaved_files;
unsigned options = CCAI->options;
bool IncludeBriefComments = options & CXCodeComplete_IncludeBriefComments;
CCAI->result = nullptr;
@@ -693,14 +690,13 @@ void clang_codeCompleteAt_Impl(void *UserData) {
// Perform the remapping of source files.
SmallVector<ASTUnit::RemappedFile, 4> RemappedFiles;
- for (unsigned I = 0; I != num_unsaved_files; ++I) {
- StringRef Data(unsaved_files[I].Contents, unsaved_files[I].Length);
- llvm::MemoryBuffer *Buffer =
- llvm::MemoryBuffer::getMemBufferCopy(Data, unsaved_files[I].Filename);
- RemappedFiles.push_back(std::make_pair(unsaved_files[I].Filename,
- Buffer));
+
+ for (auto &UF : CCAI->unsaved_files) {
+ llvm::MemoryBuffer *MB =
+ llvm::MemoryBuffer::getMemBufferCopy(getContents(UF), UF.Filename);
+ RemappedFiles.push_back(std::make_pair(UF.Filename, MB));
}
-
+
if (EnableLogging) {
// FIXME: Add logging.
}
@@ -823,9 +819,12 @@ CXCodeCompleteResults *clang_codeCompleteAt(CXTranslationUnit TU,
<< complete_filename << ':' << complete_line << ':' << complete_column;
}
- CodeCompleteAtInfo CCAI = { TU, complete_filename, complete_line,
- complete_column, unsaved_files, num_unsaved_files,
- options, nullptr };
+ if (num_unsaved_files && !unsaved_files)
+ return nullptr;
+
+ CodeCompleteAtInfo CCAI = {TU, complete_filename, complete_line,
+ complete_column, llvm::makeArrayRef(unsaved_files, num_unsaved_files),
+ options, nullptr};
if (getenv("LIBCLANG_NOTHREADS")) {
clang_codeCompleteAt_Impl(&CCAI);