summaryrefslogtreecommitdiffstats
path: root/lldb/source/API/SBSourceManager.cpp
diff options
context:
space:
mode:
authorJim Ingham <jingham@apple.com>2011-09-13 00:29:56 +0000
committerJim Ingham <jingham@apple.com>2011-09-13 00:29:56 +0000
commite37d605e7d3ff1b684962a006000dec601b7a1f6 (patch)
tree21b641dcb82cba66b8dbf55caf7ac09661e651d4 /lldb/source/API/SBSourceManager.cpp
parentd68a727bd04a0e6b8be1894ce01ee1aa93304411 (diff)
downloadbcm5719-llvm-e37d605e7d3ff1b684962a006000dec601b7a1f6.tar.gz
bcm5719-llvm-e37d605e7d3ff1b684962a006000dec601b7a1f6.zip
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. llvm-svn: 139564
Diffstat (limited to 'lldb/source/API/SBSourceManager.cpp')
-rw-r--r--lldb/source/API/SBSourceManager.cpp108
1 files changed, 85 insertions, 23 deletions
diff --git a/lldb/source/API/SBSourceManager.cpp b/lldb/source/API/SBSourceManager.cpp
index 0fa98e35dea..7bdeabcee72 100644
--- a/lldb/source/API/SBSourceManager.cpp
+++ b/lldb/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;
+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 (SourceManager* source_manager) :
- m_opaque_ptr (source_manager)
+SBSourceManager::SBSourceManager (const SBDebugger &debugger)
{
+ m_opaque_ap.reset(new SBSourceManager_impl (debugger));
}
-SBSourceManager::~SBSourceManager()
+SBSourceManager::SBSourceManager (const SBTarget &target)
{
+ m_opaque_ap.reset(new SBSourceManager_impl (target));
}
-SBSourceManager::SBSourceManager(const SBSourceManager &rhs) :
- m_opaque_ptr (rhs.m_opaque_ptr)
+SBSourceManager::SBSourceManager (const SBSourceManager &rhs)
{
+ if (&rhs == this)
+ return;
+
+ m_opaque_ap.reset(new SBSourceManager_impl (*(rhs.m_opaque_ap.get())));
}
-const SBSourceManager &
-SBSourceManager::operator = (const SBSourceManager &rhs)
+const lldb::SBSourceManager &
+SBSourceManager::operator = (const lldb::SBSourceManager &rhs)
{
- m_opaque_ptr = rhs.m_opaque_ptr;
+ m_opaque_ap.reset (new SBSourceManager_impl (*(rhs.m_opaque_ap.get())));
return *this;
}
+SBSourceManager::~SBSourceManager()
+{
+}
+
size_t
SBSourceManager::DisplaySourceLinesWithLineNumbers
(
@@ -53,20 +122,13 @@ SBSourceManager::DisplaySourceLinesWithLineNumbers
SBStream &s
)
{
- if (m_opaque_ptr == NULL)
- return 0;
-
- if (s.m_opaque_ap.get() == NULL)
+ if (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);
}
OpenPOWER on IntegriCloud