summaryrefslogtreecommitdiffstats
path: root/lldb/source/Core/SourceManager.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2015-07-29 18:37:25 +0000
committerGreg Clayton <gclayton@apple.com>2015-07-29 18:37:25 +0000
commit0d5b0a8a786e3d656d76a679be5ec8ca31125155 (patch)
tree080d7ea75218ea4b666e331de3e442c4ac6af8d1 /lldb/source/Core/SourceManager.cpp
parent1e33bbecb94854ea1d648ad54c9a31a9d353f266 (diff)
downloadbcm5719-llvm-0d5b0a8a786e3d656d76a679be5ec8ca31125155.tar.gz
bcm5719-llvm-0d5b0a8a786e3d656d76a679be5ec8ca31125155.zip
Centralize where we update the source file contents in SourceManager::GetFile() in case APIs are called that don't update the source.
The following functions were the only functions that updates the source file: SourceManager::File::DisplaySourceLines() SourceManager::File::FindLinesMatchingRegex() But there we API calls that were using the SourceManager::File and asking it questions, like "is line 12 valid" and that might respond incorrectly if the source file had been updated. <rdar://problem/21269402> llvm-svn: 243551
Diffstat (limited to 'lldb/source/Core/SourceManager.cpp')
-rw-r--r--lldb/source/Core/SourceManager.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/lldb/source/Core/SourceManager.cpp b/lldb/source/Core/SourceManager.cpp
index 324ed34bfaa..b93c9d8cd46 100644
--- a/lldb/source/Core/SourceManager.cpp
+++ b/lldb/source/Core/SourceManager.cpp
@@ -83,6 +83,10 @@ SourceManager::GetFile (const FileSpec &file_spec)
if (target_sp && file_sp && file_sp->GetSourceMapModificationID() != target_sp->GetSourcePathMap().GetModificationID())
file_sp.reset();
+ // Update the file contents if needed if we found a file
+ if (file_sp)
+ file_sp->UpdateIfNeeded();
+
// If file_sp is no good or it points to a non-existent file, reset it.
if (!file_sp || !file_sp->GetFileSpec().Exists())
{
@@ -492,8 +496,8 @@ SourceManager::File::LineIsValid (uint32_t line)
return false;
}
-size_t
-SourceManager::File::DisplaySourceLines (uint32_t line, uint32_t context_before, uint32_t context_after, Stream *s)
+void
+SourceManager::File::UpdateIfNeeded ()
{
// TODO: use host API to sign up for file modifications to anything in our
// source cache and only update when we determine a file has been updated.
@@ -506,7 +510,11 @@ SourceManager::File::DisplaySourceLines (uint32_t line, uint32_t context_before,
m_data_sp = m_file_spec.ReadFileContents ();
m_offsets.clear();
}
+}
+size_t
+SourceManager::File::DisplaySourceLines (uint32_t line, uint32_t context_before, uint32_t context_after, Stream *s)
+{
// Sanity check m_data_sp before proceeding.
if (!m_data_sp)
return 0;
@@ -538,14 +546,6 @@ SourceManager::File::DisplaySourceLines (uint32_t line, uint32_t context_before,
void
SourceManager::File::FindLinesMatchingRegex (RegularExpression& regex, uint32_t start_line, uint32_t end_line, std::vector<uint32_t> &match_lines)
{
- TimeValue curr_mod_time (m_file_spec.GetModificationTime());
- if (m_mod_time != curr_mod_time)
- {
- m_mod_time = curr_mod_time;
- m_data_sp = m_file_spec.ReadFileContents ();
- m_offsets.clear();
- }
-
match_lines.clear();
if (!LineIsValid(start_line) || (end_line != UINT32_MAX && !LineIsValid(end_line)))
OpenPOWER on IntegriCloud