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 10e37d605eSJim Ingham #include "lldb/API/SBDebugger.h" 114c5de699SEli Friedman #include "lldb/API/SBSourceManager.h" 12e37d605eSJim Ingham #include "lldb/API/SBTarget.h" 13f6eaba85SJohnny Chen #include "lldb/API/SBStream.h" 1430fdc8d8SChris Lattner 1530fdc8d8SChris Lattner #include "lldb/API/SBFileSpec.h" 16e37d605eSJim 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 21e37d605eSJim Ingham #include "lldb/Target/Target.h" 2230fdc8d8SChris Lattner 239a37766eSGreg Clayton namespace lldb_private 249a37766eSGreg Clayton { 259a37766eSGreg Clayton class SourceManagerImpl 2630fdc8d8SChris Lattner { 27e37d605eSJim Ingham public: 289a37766eSGreg Clayton SourceManagerImpl (const lldb::DebuggerSP &debugger_sp) 29e37d605eSJim Ingham { 309a37766eSGreg Clayton m_debugger_sp = debugger_sp; 31e37d605eSJim Ingham } 32e37d605eSJim Ingham 339a37766eSGreg Clayton SourceManagerImpl (const lldb::TargetSP &target_sp) 34e37d605eSJim Ingham { 359a37766eSGreg Clayton m_target_sp = target_sp; 36e37d605eSJim Ingham } 37e37d605eSJim Ingham 389a37766eSGreg Clayton SourceManagerImpl (const SourceManagerImpl &rhs) 39e37d605eSJim Ingham { 40e37d605eSJim Ingham if (&rhs == this) 41e37d605eSJim Ingham return; 42e37d605eSJim Ingham m_debugger_sp = rhs.m_debugger_sp; 43e37d605eSJim Ingham m_target_sp = rhs.m_target_sp; 44e37d605eSJim Ingham } 45e37d605eSJim Ingham 46e37d605eSJim Ingham size_t 479a37766eSGreg Clayton DisplaySourceLinesWithLineNumbers (const lldb_private::FileSpec &file, 48e37d605eSJim Ingham uint32_t line, 49e37d605eSJim Ingham uint32_t context_before, 50e37d605eSJim Ingham uint32_t context_after, 51e37d605eSJim Ingham const char *current_line_cstr, 529a37766eSGreg Clayton lldb_private::Stream *s) 53e37d605eSJim Ingham { 5444d6d2c5SJohnny Chen if (!file) 55e37d605eSJim Ingham return 0; 56e37d605eSJim Ingham 57e37d605eSJim Ingham if (m_debugger_sp) 589a37766eSGreg Clayton return m_debugger_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers (file, 59e37d605eSJim Ingham line, 60e37d605eSJim Ingham context_before, 61e37d605eSJim Ingham context_after, 62e37d605eSJim Ingham current_line_cstr, 639a37766eSGreg Clayton s); 64e37d605eSJim Ingham else if (m_target_sp) 659a37766eSGreg Clayton return m_target_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers (file, 66e37d605eSJim Ingham line, 67e37d605eSJim Ingham context_before, 68e37d605eSJim Ingham context_after, 69e37d605eSJim Ingham current_line_cstr, 709a37766eSGreg Clayton s); 71e37d605eSJim Ingham else 72e37d605eSJim Ingham return 0; 73e37d605eSJim Ingham } 74e37d605eSJim Ingham 75e37d605eSJim Ingham private: 76e37d605eSJim Ingham lldb::DebuggerSP m_debugger_sp; 77e37d605eSJim Ingham lldb::TargetSP m_target_sp; 78e37d605eSJim Ingham 79e37d605eSJim Ingham }; 809a37766eSGreg Clayton } 819a37766eSGreg Clayton 829a37766eSGreg Clayton using namespace lldb; 839a37766eSGreg Clayton using namespace lldb_private; 84e37d605eSJim Ingham 85e37d605eSJim Ingham SBSourceManager::SBSourceManager (const SBDebugger &debugger) 86e37d605eSJim Ingham { 879a37766eSGreg Clayton m_opaque_ap.reset(new SourceManagerImpl (debugger.get_sp())); 88e37d605eSJim Ingham } 89e37d605eSJim Ingham 90e37d605eSJim Ingham SBSourceManager::SBSourceManager (const SBTarget &target) 91e37d605eSJim Ingham { 92*b9556accSGreg Clayton m_opaque_ap.reset(new SourceManagerImpl (target.GetSP())); 93e37d605eSJim Ingham } 94e37d605eSJim Ingham 95e37d605eSJim Ingham SBSourceManager::SBSourceManager (const SBSourceManager &rhs) 96e37d605eSJim Ingham { 97e37d605eSJim Ingham if (&rhs == this) 98e37d605eSJim Ingham return; 99e37d605eSJim Ingham 1009a37766eSGreg Clayton m_opaque_ap.reset(new SourceManagerImpl (*(rhs.m_opaque_ap.get()))); 101e37d605eSJim Ingham } 102e37d605eSJim Ingham 103e37d605eSJim Ingham const lldb::SBSourceManager & 104e37d605eSJim Ingham SBSourceManager::operator = (const lldb::SBSourceManager &rhs) 105e37d605eSJim Ingham { 1069a37766eSGreg Clayton m_opaque_ap.reset (new SourceManagerImpl (*(rhs.m_opaque_ap.get()))); 107e37d605eSJim 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 { 125e37d605eSJim Ingham if (m_opaque_ap.get() == NULL) 126efabb123SGreg Clayton return 0; 127efabb123SGreg Clayton 1289a37766eSGreg Clayton return m_opaque_ap->DisplaySourceLinesWithLineNumbers (file.ref(), 12930fdc8d8SChris Lattner line, 13030fdc8d8SChris Lattner context_before, 13130fdc8d8SChris Lattner context_after, 13230fdc8d8SChris Lattner current_line_cstr, 1339a37766eSGreg Clayton s.get()); 13430fdc8d8SChris Lattner } 135