130fdc8d8SChris Lattner //===-- SBSourceManager.cpp -------------------------------------*- C++ -*-===// 230fdc8d8SChris Lattner // 330fdc8d8SChris Lattner // The LLVM Compiler Infrastructure 430fdc8d8SChris Lattner // 530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source 630fdc8d8SChris Lattner // License. See LICENSE.TXT for details. 730fdc8d8SChris Lattner // 830fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 930fdc8d8SChris Lattner 10*e37d605eSJim Ingham #include "lldb/API/SBDebugger.h" 114c5de699SEli Friedman #include "lldb/API/SBSourceManager.h" 12*e37d605eSJim Ingham #include "lldb/API/SBTarget.h" 13f6eaba85SJohnny Chen #include "lldb/API/SBStream.h" 1430fdc8d8SChris Lattner 1530fdc8d8SChris Lattner #include "lldb/API/SBFileSpec.h" 16*e37d605eSJim Ingham #include "lldb/Core/Debugger.h" 1730fdc8d8SChris Lattner #include "lldb/Core/Stream.h" 1830fdc8d8SChris Lattner #include "lldb/Core/StreamFile.h" 1930fdc8d8SChris Lattner #include "lldb/Core/SourceManager.h" 2030fdc8d8SChris Lattner 21*e37d605eSJim Ingham #include "lldb/Target/Target.h" 2230fdc8d8SChris Lattner 2330fdc8d8SChris Lattner using namespace lldb; 2430fdc8d8SChris Lattner using namespace lldb_private; 2530fdc8d8SChris Lattner 26*e37d605eSJim Ingham class lldb::SBSourceManager_impl 2730fdc8d8SChris Lattner { 28*e37d605eSJim Ingham public: 29*e37d605eSJim Ingham SBSourceManager_impl (const SBDebugger &debugger) 30*e37d605eSJim Ingham { 31*e37d605eSJim Ingham m_debugger_sp = debugger.m_opaque_sp; 32*e37d605eSJim Ingham } 33*e37d605eSJim Ingham 34*e37d605eSJim Ingham SBSourceManager_impl (const SBTarget &target) 35*e37d605eSJim Ingham { 36*e37d605eSJim Ingham m_target_sp = target.m_opaque_sp; 37*e37d605eSJim Ingham } 38*e37d605eSJim Ingham 39*e37d605eSJim Ingham SBSourceManager_impl (const SBSourceManager_impl &rhs) 40*e37d605eSJim Ingham { 41*e37d605eSJim Ingham if (&rhs == this) 42*e37d605eSJim Ingham return; 43*e37d605eSJim Ingham m_debugger_sp = rhs.m_debugger_sp; 44*e37d605eSJim Ingham m_target_sp = rhs.m_target_sp; 45*e37d605eSJim Ingham } 46*e37d605eSJim Ingham 47*e37d605eSJim Ingham size_t 48*e37d605eSJim Ingham DisplaySourceLinesWithLineNumbers 49*e37d605eSJim Ingham ( 50*e37d605eSJim Ingham const SBFileSpec &file, 51*e37d605eSJim Ingham uint32_t line, 52*e37d605eSJim Ingham uint32_t context_before, 53*e37d605eSJim Ingham uint32_t context_after, 54*e37d605eSJim Ingham const char* current_line_cstr, 55*e37d605eSJim Ingham SBStream &s 56*e37d605eSJim Ingham ) 57*e37d605eSJim Ingham { 58*e37d605eSJim Ingham if (!file.IsValid()) 59*e37d605eSJim Ingham return 0; 60*e37d605eSJim Ingham 61*e37d605eSJim Ingham if (m_debugger_sp) 62*e37d605eSJim Ingham return m_debugger_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers (*file, 63*e37d605eSJim Ingham line, 64*e37d605eSJim Ingham context_before, 65*e37d605eSJim Ingham context_after, 66*e37d605eSJim Ingham current_line_cstr, 67*e37d605eSJim Ingham s.m_opaque_ap.get()); 68*e37d605eSJim Ingham else if (m_target_sp) 69*e37d605eSJim Ingham return m_target_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers (*file, 70*e37d605eSJim Ingham line, 71*e37d605eSJim Ingham context_before, 72*e37d605eSJim Ingham context_after, 73*e37d605eSJim Ingham current_line_cstr, 74*e37d605eSJim Ingham s.m_opaque_ap.get()); 75*e37d605eSJim Ingham else 76*e37d605eSJim Ingham return 0; 77*e37d605eSJim Ingham } 78*e37d605eSJim Ingham 79*e37d605eSJim Ingham private: 80*e37d605eSJim Ingham lldb::DebuggerSP m_debugger_sp; 81*e37d605eSJim Ingham lldb::TargetSP m_target_sp; 82*e37d605eSJim Ingham 83*e37d605eSJim Ingham }; 84*e37d605eSJim Ingham 85*e37d605eSJim Ingham SBSourceManager::SBSourceManager (const SBDebugger &debugger) 86*e37d605eSJim Ingham { 87*e37d605eSJim Ingham m_opaque_ap.reset(new SBSourceManager_impl (debugger)); 88*e37d605eSJim Ingham } 89*e37d605eSJim Ingham 90*e37d605eSJim Ingham SBSourceManager::SBSourceManager (const SBTarget &target) 91*e37d605eSJim Ingham { 92*e37d605eSJim Ingham m_opaque_ap.reset(new SBSourceManager_impl (target)); 93*e37d605eSJim Ingham } 94*e37d605eSJim Ingham 95*e37d605eSJim Ingham SBSourceManager::SBSourceManager (const SBSourceManager &rhs) 96*e37d605eSJim Ingham { 97*e37d605eSJim Ingham if (&rhs == this) 98*e37d605eSJim Ingham return; 99*e37d605eSJim Ingham 100*e37d605eSJim Ingham m_opaque_ap.reset(new SBSourceManager_impl (*(rhs.m_opaque_ap.get()))); 101*e37d605eSJim Ingham } 102*e37d605eSJim Ingham 103*e37d605eSJim Ingham const lldb::SBSourceManager & 104*e37d605eSJim Ingham SBSourceManager::operator = (const lldb::SBSourceManager &rhs) 105*e37d605eSJim Ingham { 106*e37d605eSJim Ingham m_opaque_ap.reset (new SBSourceManager_impl (*(rhs.m_opaque_ap.get()))); 107*e37d605eSJim Ingham return *this; 10830fdc8d8SChris Lattner } 10930fdc8d8SChris Lattner 11030fdc8d8SChris Lattner SBSourceManager::~SBSourceManager() 11130fdc8d8SChris Lattner { 11230fdc8d8SChris Lattner } 11330fdc8d8SChris Lattner 11430fdc8d8SChris Lattner size_t 11530fdc8d8SChris Lattner SBSourceManager::DisplaySourceLinesWithLineNumbers 11630fdc8d8SChris Lattner ( 11730fdc8d8SChris Lattner const SBFileSpec &file, 11830fdc8d8SChris Lattner uint32_t line, 11930fdc8d8SChris Lattner uint32_t context_before, 12030fdc8d8SChris Lattner uint32_t context_after, 12130fdc8d8SChris Lattner const char* current_line_cstr, 122f6eaba85SJohnny Chen SBStream &s 12330fdc8d8SChris Lattner ) 12430fdc8d8SChris Lattner { 125*e37d605eSJim Ingham if (m_opaque_ap.get() == NULL) 126efabb123SGreg Clayton return 0; 127efabb123SGreg Clayton 128*e37d605eSJim Ingham return m_opaque_ap->DisplaySourceLinesWithLineNumbers (file, 12930fdc8d8SChris Lattner line, 13030fdc8d8SChris Lattner context_before, 13130fdc8d8SChris Lattner context_after, 13230fdc8d8SChris Lattner current_line_cstr, 133*e37d605eSJim Ingham s); 13430fdc8d8SChris Lattner } 135