diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2014-10-18 06:19:36 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2014-10-18 06:19:36 +0000 |
commit | e62d682a27ce9addf40223430fe8228a793e889f (patch) | |
tree | 7b0f577907bfc9432e84159ec5b49bbce7c56bbb /clang/lib/Lex/Preprocessor.cpp | |
parent | 2b67fca0337b46ea650f890df6e8508d1a821ae7 (diff) | |
download | llvm-e62d682a27ce9addf40223430fe8228a793e889f.zip llvm-e62d682a27ce9addf40223430fe8228a793e889f.tar.gz llvm-e62d682a27ce9addf40223430fe8228a793e889f.tar.bz2 |
[libclang] Allow code-completion when pointing at the end-of-file.
llvm-svn: 220135
Diffstat (limited to 'clang/lib/Lex/Preprocessor.cpp')
-rw-r--r-- | clang/lib/Lex/Preprocessor.cpp | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp index 400cdb4..c15a6ab 100644 --- a/clang/lib/Lex/Preprocessor.cpp +++ b/clang/lib/Lex/Preprocessor.cpp @@ -384,21 +384,20 @@ bool Preprocessor::SetCodeCompletionPoint(const FileEntry *File, } Position += CompleteColumn - 1; - - // Insert '\0' at the code-completion point. - if (Position < Buffer->getBufferEnd()) { - CodeCompletionFile = File; - CodeCompletionOffset = Position - Buffer->getBufferStart(); - - std::unique_ptr<MemoryBuffer> NewBuffer = - MemoryBuffer::getNewUninitMemBuffer(Buffer->getBufferSize() + 1, - Buffer->getBufferIdentifier()); - char *NewBuf = const_cast<char*>(NewBuffer->getBufferStart()); - char *NewPos = std::copy(Buffer->getBufferStart(), Position, NewBuf); - *NewPos = '\0'; - std::copy(Position, Buffer->getBufferEnd(), NewPos+1); - SourceMgr.overrideFileContents(File, std::move(NewBuffer)); - } + if (Position > Buffer->getBufferEnd()) + Position = Buffer->getBufferEnd(); + + CodeCompletionFile = File; + CodeCompletionOffset = Position - Buffer->getBufferStart(); + + std::unique_ptr<MemoryBuffer> NewBuffer = + MemoryBuffer::getNewUninitMemBuffer(Buffer->getBufferSize() + 1, + Buffer->getBufferIdentifier()); + char *NewBuf = const_cast<char*>(NewBuffer->getBufferStart()); + char *NewPos = std::copy(Buffer->getBufferStart(), Position, NewBuf); + *NewPos = '\0'; + std::copy(Position, Buffer->getBufferEnd(), NewPos+1); + SourceMgr.overrideFileContents(File, std::move(NewBuffer)); return false; } |