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 1093a64300SDaniel Malea #include "lldb/lldb-python.h" 1193a64300SDaniel Malea 12e37d605eSJim Ingham #include "lldb/API/SBDebugger.h" 134c5de699SEli Friedman #include "lldb/API/SBSourceManager.h" 14e37d605eSJim Ingham #include "lldb/API/SBTarget.h" 15f6eaba85SJohnny Chen #include "lldb/API/SBStream.h" 1630fdc8d8SChris Lattner 1730fdc8d8SChris Lattner #include "lldb/API/SBFileSpec.h" 18e37d605eSJim Ingham #include "lldb/Core/Debugger.h" 1930fdc8d8SChris Lattner #include "lldb/Core/Stream.h" 2030fdc8d8SChris Lattner #include "lldb/Core/StreamFile.h" 2130fdc8d8SChris Lattner #include "lldb/Core/SourceManager.h" 2230fdc8d8SChris Lattner 23e37d605eSJim Ingham #include "lldb/Target/Target.h" 2430fdc8d8SChris Lattner 259a37766eSGreg Clayton namespace lldb_private 269a37766eSGreg Clayton { 279a37766eSGreg Clayton class SourceManagerImpl 2830fdc8d8SChris Lattner { 29e37d605eSJim Ingham public: 30*9585fbfcSGreg Clayton SourceManagerImpl (const lldb::DebuggerSP &debugger_sp) : 31*9585fbfcSGreg Clayton m_debugger_wp (debugger_sp), 32*9585fbfcSGreg Clayton m_target_wp () 33e37d605eSJim Ingham { 34e37d605eSJim Ingham } 35e37d605eSJim Ingham 36*9585fbfcSGreg Clayton SourceManagerImpl (const lldb::TargetSP &target_sp) : 37*9585fbfcSGreg Clayton m_debugger_wp (), 38*9585fbfcSGreg Clayton m_target_wp (target_sp) 39e37d605eSJim Ingham { 40e37d605eSJim Ingham } 41e37d605eSJim Ingham 429a37766eSGreg Clayton SourceManagerImpl (const SourceManagerImpl &rhs) 43e37d605eSJim Ingham { 44e37d605eSJim Ingham if (&rhs == this) 45e37d605eSJim Ingham return; 46*9585fbfcSGreg Clayton m_debugger_wp = rhs.m_debugger_wp; 47*9585fbfcSGreg Clayton m_target_wp = rhs.m_target_wp; 48e37d605eSJim Ingham } 49e37d605eSJim Ingham 50e37d605eSJim Ingham size_t 519a37766eSGreg Clayton DisplaySourceLinesWithLineNumbers (const lldb_private::FileSpec &file, 52e37d605eSJim Ingham uint32_t line, 53e37d605eSJim Ingham uint32_t context_before, 54e37d605eSJim Ingham uint32_t context_after, 55e37d605eSJim Ingham const char *current_line_cstr, 569a37766eSGreg Clayton lldb_private::Stream *s) 57e37d605eSJim Ingham { 5844d6d2c5SJohnny Chen if (!file) 59e37d605eSJim Ingham return 0; 60e37d605eSJim Ingham 61*9585fbfcSGreg Clayton lldb::TargetSP target_sp (m_target_wp.lock()); 62*9585fbfcSGreg Clayton if (target_sp) 63*9585fbfcSGreg Clayton { 64*9585fbfcSGreg Clayton return target_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers (file, 65e37d605eSJim Ingham line, 66e37d605eSJim Ingham context_before, 67e37d605eSJim Ingham context_after, 68e37d605eSJim Ingham current_line_cstr, 699a37766eSGreg Clayton s); 70*9585fbfcSGreg Clayton } 71e37d605eSJim Ingham else 72*9585fbfcSGreg Clayton { 73*9585fbfcSGreg Clayton lldb::DebuggerSP debugger_sp (m_debugger_wp.lock()); 74*9585fbfcSGreg Clayton if (debugger_sp) 75*9585fbfcSGreg Clayton { 76*9585fbfcSGreg Clayton return debugger_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers (file, 77*9585fbfcSGreg Clayton line, 78*9585fbfcSGreg Clayton context_before, 79*9585fbfcSGreg Clayton context_after, 80*9585fbfcSGreg Clayton current_line_cstr, 81*9585fbfcSGreg Clayton s); 82*9585fbfcSGreg Clayton } 83*9585fbfcSGreg Clayton } 84e37d605eSJim Ingham return 0; 85e37d605eSJim Ingham } 86e37d605eSJim Ingham 87e37d605eSJim Ingham private: 88*9585fbfcSGreg Clayton lldb::DebuggerWP m_debugger_wp; 89*9585fbfcSGreg Clayton lldb::TargetWP m_target_wp; 90e37d605eSJim Ingham 91e37d605eSJim Ingham }; 929a37766eSGreg Clayton } 939a37766eSGreg Clayton 949a37766eSGreg Clayton using namespace lldb; 959a37766eSGreg Clayton using namespace lldb_private; 96e37d605eSJim Ingham 97e37d605eSJim Ingham SBSourceManager::SBSourceManager (const SBDebugger &debugger) 98e37d605eSJim Ingham { 999a37766eSGreg Clayton m_opaque_ap.reset(new SourceManagerImpl (debugger.get_sp())); 100e37d605eSJim Ingham } 101e37d605eSJim Ingham 102e37d605eSJim Ingham SBSourceManager::SBSourceManager (const SBTarget &target) 103e37d605eSJim Ingham { 104b9556accSGreg Clayton m_opaque_ap.reset(new SourceManagerImpl (target.GetSP())); 105e37d605eSJim Ingham } 106e37d605eSJim Ingham 107e37d605eSJim Ingham SBSourceManager::SBSourceManager (const SBSourceManager &rhs) 108e37d605eSJim Ingham { 109e37d605eSJim Ingham if (&rhs == this) 110e37d605eSJim Ingham return; 111e37d605eSJim Ingham 1129a37766eSGreg Clayton m_opaque_ap.reset(new SourceManagerImpl (*(rhs.m_opaque_ap.get()))); 113e37d605eSJim Ingham } 114e37d605eSJim Ingham 115e37d605eSJim Ingham const lldb::SBSourceManager & 116e37d605eSJim Ingham SBSourceManager::operator = (const lldb::SBSourceManager &rhs) 117e37d605eSJim Ingham { 1189a37766eSGreg Clayton m_opaque_ap.reset (new SourceManagerImpl (*(rhs.m_opaque_ap.get()))); 119e37d605eSJim Ingham return *this; 12030fdc8d8SChris Lattner } 12130fdc8d8SChris Lattner 12230fdc8d8SChris Lattner SBSourceManager::~SBSourceManager() 12330fdc8d8SChris Lattner { 12430fdc8d8SChris Lattner } 12530fdc8d8SChris Lattner 12630fdc8d8SChris Lattner size_t 12730fdc8d8SChris Lattner SBSourceManager::DisplaySourceLinesWithLineNumbers 12830fdc8d8SChris Lattner ( 12930fdc8d8SChris Lattner const SBFileSpec &file, 13030fdc8d8SChris Lattner uint32_t line, 13130fdc8d8SChris Lattner uint32_t context_before, 13230fdc8d8SChris Lattner uint32_t context_after, 13330fdc8d8SChris Lattner const char *current_line_cstr, 134f6eaba85SJohnny Chen SBStream &s 13530fdc8d8SChris Lattner ) 13630fdc8d8SChris Lattner { 137e37d605eSJim Ingham if (m_opaque_ap.get() == NULL) 138efabb123SGreg Clayton return 0; 139efabb123SGreg Clayton 1409a37766eSGreg Clayton return m_opaque_ap->DisplaySourceLinesWithLineNumbers (file.ref(), 14130fdc8d8SChris Lattner line, 14230fdc8d8SChris Lattner context_before, 14330fdc8d8SChris Lattner context_after, 14430fdc8d8SChris Lattner current_line_cstr, 1459a37766eSGreg Clayton s.get()); 14630fdc8d8SChris Lattner } 147