SBSourceManager now gets the real source manager either from the Debugger or Target. Also, move the SourceManager file cache into the debugger
so it can be shared amongst the targets.
git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@139564 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/API/SBCommandInterpreter.cpp b/source/API/SBCommandInterpreter.cpp
index 95e1cbc..61d0a99 100644
--- a/source/API/SBCommandInterpreter.cpp
+++ b/source/API/SBCommandInterpreter.cpp
@@ -18,7 +18,6 @@
#include "lldb/API/SBBroadcaster.h"
#include "lldb/API/SBDebugger.h"
#include "lldb/API/SBCommandReturnObject.h"
-#include "lldb/API/SBSourceManager.h"
#include "lldb/API/SBCommandInterpreter.h"
#include "lldb/API/SBProcess.h"
#include "lldb/API/SBTarget.h"
diff --git a/source/API/SBDebugger.cpp b/source/API/SBDebugger.cpp
index be6873b..d068726 100644
--- a/source/API/SBDebugger.cpp
+++ b/source/API/SBDebugger.cpp
@@ -357,12 +357,11 @@
}
}
-SBSourceManager &
+SBSourceManager
SBDebugger::GetSourceManager ()
{
- static SourceManager g_lldb_source_manager(NULL);
- static SBSourceManager g_sb_source_manager (&g_lldb_source_manager);
- return g_sb_source_manager;
+ SBSourceManager sb_source_manager (*this);
+ return sb_source_manager;
}
diff --git a/source/API/SBSourceManager.cpp b/source/API/SBSourceManager.cpp
index 0fa98e3..7bdeabc 100644
--- a/source/API/SBSourceManager.cpp
+++ b/source/API/SBSourceManager.cpp
@@ -7,41 +7,110 @@
//
//===----------------------------------------------------------------------===//
-
+#include "lldb/API/SBDebugger.h"
#include "lldb/API/SBSourceManager.h"
+#include "lldb/API/SBTarget.h"
#include "lldb/API/SBStream.h"
#include "lldb/API/SBFileSpec.h"
+#include "lldb/Core/Debugger.h"
#include "lldb/Core/Stream.h"
#include "lldb/Core/StreamFile.h"
#include "lldb/Core/SourceManager.h"
+#include "lldb/Target/Target.h"
using namespace lldb;
using namespace lldb_private;
-
-SBSourceManager::SBSourceManager (SourceManager* source_manager) :
- m_opaque_ptr (source_manager)
+class lldb::SBSourceManager_impl
{
+public:
+ SBSourceManager_impl (const SBDebugger &debugger)
+ {
+ m_debugger_sp = debugger.m_opaque_sp;
+ }
+
+ SBSourceManager_impl (const SBTarget &target)
+ {
+ m_target_sp = target.m_opaque_sp;
+ }
+
+ SBSourceManager_impl (const SBSourceManager_impl &rhs)
+ {
+ if (&rhs == this)
+ return;
+ m_debugger_sp = rhs.m_debugger_sp;
+ m_target_sp = rhs.m_target_sp;
+ }
+
+ size_t
+ DisplaySourceLinesWithLineNumbers
+ (
+ const SBFileSpec &file,
+ uint32_t line,
+ uint32_t context_before,
+ uint32_t context_after,
+ const char* current_line_cstr,
+ SBStream &s
+ )
+ {
+ if (!file.IsValid())
+ return 0;
+
+ if (m_debugger_sp)
+ return m_debugger_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers (*file,
+ line,
+ context_before,
+ context_after,
+ current_line_cstr,
+ s.m_opaque_ap.get());
+ else if (m_target_sp)
+ return m_target_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers (*file,
+ line,
+ context_before,
+ context_after,
+ current_line_cstr,
+ s.m_opaque_ap.get());
+ else
+ return 0;
+ }
+
+private:
+ lldb::DebuggerSP m_debugger_sp;
+ lldb::TargetSP m_target_sp;
+
+};
+
+SBSourceManager::SBSourceManager (const SBDebugger &debugger)
+{
+ m_opaque_ap.reset(new SBSourceManager_impl (debugger));
+}
+
+SBSourceManager::SBSourceManager (const SBTarget &target)
+{
+ m_opaque_ap.reset(new SBSourceManager_impl (target));
+}
+
+SBSourceManager::SBSourceManager (const SBSourceManager &rhs)
+{
+ if (&rhs == this)
+ return;
+
+ m_opaque_ap.reset(new SBSourceManager_impl (*(rhs.m_opaque_ap.get())));
+}
+
+const lldb::SBSourceManager &
+SBSourceManager::operator = (const lldb::SBSourceManager &rhs)
+{
+ m_opaque_ap.reset (new SBSourceManager_impl (*(rhs.m_opaque_ap.get())));
+ return *this;
}
SBSourceManager::~SBSourceManager()
{
}
-SBSourceManager::SBSourceManager(const SBSourceManager &rhs) :
- m_opaque_ptr (rhs.m_opaque_ptr)
-{
-}
-
-const SBSourceManager &
-SBSourceManager::operator = (const SBSourceManager &rhs)
-{
- m_opaque_ptr = rhs.m_opaque_ptr;
- return *this;
-}
-
size_t
SBSourceManager::DisplaySourceLinesWithLineNumbers
(
@@ -53,20 +122,13 @@
SBStream &s
)
{
- if (m_opaque_ptr == NULL)
+ if (m_opaque_ap.get() == NULL)
return 0;
- if (s.m_opaque_ap.get() == NULL)
- return 0;
-
- if (file.IsValid())
- {
- return m_opaque_ptr->DisplaySourceLinesWithLineNumbers (*file,
- line,
- context_before,
- context_after,
- current_line_cstr,
- s.m_opaque_ap.get());
- }
- return 0;
+ return m_opaque_ap->DisplaySourceLinesWithLineNumbers (file,
+ line,
+ context_before,
+ context_after,
+ current_line_cstr,
+ s);
}
diff --git a/source/API/SBTarget.cpp b/source/API/SBTarget.cpp
index 93d3cf1..3343b48 100644
--- a/source/API/SBTarget.cpp
+++ b/source/API/SBTarget.cpp
@@ -16,6 +16,7 @@
#include "lldb/API/SBFileSpec.h"
#include "lldb/API/SBListener.h"
#include "lldb/API/SBModule.h"
+#include "lldb/API/SBSourceManager.h"
#include "lldb/API/SBProcess.h"
#include "lldb/API/SBStream.h"
#include "lldb/API/SBSymbolContextList.h"
@@ -958,3 +959,9 @@
return sb_value_list;
}
+SBSourceManager
+SBTarget::GetSourceManager()
+{
+ SBSourceManager source_manager (*this);
+ return source_manager;
+}