SBSourceManager.cpp revision 254721
1//===-- SBSourceManager.cpp -------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#include "lldb/lldb-python.h" 11 12#include "lldb/API/SBDebugger.h" 13#include "lldb/API/SBSourceManager.h" 14#include "lldb/API/SBTarget.h" 15#include "lldb/API/SBStream.h" 16 17#include "lldb/API/SBFileSpec.h" 18#include "lldb/Core/Debugger.h" 19#include "lldb/Core/Stream.h" 20#include "lldb/Core/StreamFile.h" 21#include "lldb/Core/SourceManager.h" 22 23#include "lldb/Target/Target.h" 24 25namespace lldb_private 26{ 27 class SourceManagerImpl 28 { 29 public: 30 SourceManagerImpl (const lldb::DebuggerSP &debugger_sp) : 31 m_debugger_wp (debugger_sp), 32 m_target_wp () 33 { 34 } 35 36 SourceManagerImpl (const lldb::TargetSP &target_sp) : 37 m_debugger_wp (), 38 m_target_wp (target_sp) 39 { 40 } 41 42 SourceManagerImpl (const SourceManagerImpl &rhs) 43 { 44 if (&rhs == this) 45 return; 46 m_debugger_wp = rhs.m_debugger_wp; 47 m_target_wp = rhs.m_target_wp; 48 } 49 50 size_t 51 DisplaySourceLinesWithLineNumbers (const lldb_private::FileSpec &file, 52 uint32_t line, 53 uint32_t context_before, 54 uint32_t context_after, 55 const char *current_line_cstr, 56 lldb_private::Stream *s) 57 { 58 if (!file) 59 return 0; 60 61 lldb::TargetSP target_sp (m_target_wp.lock()); 62 if (target_sp) 63 { 64 return target_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers (file, 65 line, 66 context_before, 67 context_after, 68 current_line_cstr, 69 s); 70 } 71 else 72 { 73 lldb::DebuggerSP debugger_sp (m_debugger_wp.lock()); 74 if (debugger_sp) 75 { 76 return debugger_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers (file, 77 line, 78 context_before, 79 context_after, 80 current_line_cstr, 81 s); 82 } 83 } 84 return 0; 85 } 86 87 private: 88 lldb::DebuggerWP m_debugger_wp; 89 lldb::TargetWP m_target_wp; 90 91 }; 92} 93 94using namespace lldb; 95using namespace lldb_private; 96 97SBSourceManager::SBSourceManager (const SBDebugger &debugger) 98{ 99 m_opaque_ap.reset(new SourceManagerImpl (debugger.get_sp())); 100} 101 102SBSourceManager::SBSourceManager (const SBTarget &target) 103{ 104 m_opaque_ap.reset(new SourceManagerImpl (target.GetSP())); 105} 106 107SBSourceManager::SBSourceManager (const SBSourceManager &rhs) 108{ 109 if (&rhs == this) 110 return; 111 112 m_opaque_ap.reset(new SourceManagerImpl (*(rhs.m_opaque_ap.get()))); 113} 114 115const lldb::SBSourceManager & 116SBSourceManager::operator = (const lldb::SBSourceManager &rhs) 117{ 118 m_opaque_ap.reset (new SourceManagerImpl (*(rhs.m_opaque_ap.get()))); 119 return *this; 120} 121 122SBSourceManager::~SBSourceManager() 123{ 124} 125 126size_t 127SBSourceManager::DisplaySourceLinesWithLineNumbers 128( 129 const SBFileSpec &file, 130 uint32_t line, 131 uint32_t context_before, 132 uint32_t context_after, 133 const char *current_line_cstr, 134 SBStream &s 135) 136{ 137 if (m_opaque_ap.get() == NULL) 138 return 0; 139 140 return m_opaque_ap->DisplaySourceLinesWithLineNumbers (file.ref(), 141 line, 142 context_before, 143 context_after, 144 current_line_cstr, 145 s.get()); 146} 147