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*93a64300SDaniel Malea #include "lldb/lldb-python.h" 11*93a64300SDaniel 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: 309a37766eSGreg Clayton SourceManagerImpl (const lldb::DebuggerSP &debugger_sp) 31e37d605eSJim Ingham { 329a37766eSGreg Clayton m_debugger_sp = debugger_sp; 33e37d605eSJim Ingham } 34e37d605eSJim Ingham 359a37766eSGreg Clayton SourceManagerImpl (const lldb::TargetSP &target_sp) 36e37d605eSJim Ingham { 379a37766eSGreg Clayton m_target_sp = target_sp; 38e37d605eSJim Ingham } 39e37d605eSJim Ingham 409a37766eSGreg Clayton SourceManagerImpl (const SourceManagerImpl &rhs) 41e37d605eSJim Ingham { 42e37d605eSJim Ingham if (&rhs == this) 43e37d605eSJim Ingham return; 44e37d605eSJim Ingham m_debugger_sp = rhs.m_debugger_sp; 45e37d605eSJim Ingham m_target_sp = rhs.m_target_sp; 46e37d605eSJim Ingham } 47e37d605eSJim Ingham 48e37d605eSJim Ingham size_t 499a37766eSGreg Clayton DisplaySourceLinesWithLineNumbers (const lldb_private::FileSpec &file, 50e37d605eSJim Ingham uint32_t line, 51e37d605eSJim Ingham uint32_t context_before, 52e37d605eSJim Ingham uint32_t context_after, 53e37d605eSJim Ingham const char *current_line_cstr, 549a37766eSGreg Clayton lldb_private::Stream *s) 55e37d605eSJim Ingham { 5644d6d2c5SJohnny Chen if (!file) 57e37d605eSJim Ingham return 0; 58e37d605eSJim Ingham 59e37d605eSJim Ingham if (m_debugger_sp) 609a37766eSGreg Clayton return m_debugger_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers (file, 61e37d605eSJim Ingham line, 62e37d605eSJim Ingham context_before, 63e37d605eSJim Ingham context_after, 64e37d605eSJim Ingham current_line_cstr, 659a37766eSGreg Clayton s); 66e37d605eSJim Ingham else if (m_target_sp) 679a37766eSGreg Clayton return m_target_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers (file, 68e37d605eSJim Ingham line, 69e37d605eSJim Ingham context_before, 70e37d605eSJim Ingham context_after, 71e37d605eSJim Ingham current_line_cstr, 729a37766eSGreg Clayton s); 73e37d605eSJim Ingham else 74e37d605eSJim Ingham return 0; 75e37d605eSJim Ingham } 76e37d605eSJim Ingham 77e37d605eSJim Ingham private: 78e37d605eSJim Ingham lldb::DebuggerSP m_debugger_sp; 79e37d605eSJim Ingham lldb::TargetSP m_target_sp; 80e37d605eSJim Ingham 81e37d605eSJim Ingham }; 829a37766eSGreg Clayton } 839a37766eSGreg Clayton 849a37766eSGreg Clayton using namespace lldb; 859a37766eSGreg Clayton using namespace lldb_private; 86e37d605eSJim Ingham 87e37d605eSJim Ingham SBSourceManager::SBSourceManager (const SBDebugger &debugger) 88e37d605eSJim Ingham { 899a37766eSGreg Clayton m_opaque_ap.reset(new SourceManagerImpl (debugger.get_sp())); 90e37d605eSJim Ingham } 91e37d605eSJim Ingham 92e37d605eSJim Ingham SBSourceManager::SBSourceManager (const SBTarget &target) 93e37d605eSJim Ingham { 94b9556accSGreg Clayton m_opaque_ap.reset(new SourceManagerImpl (target.GetSP())); 95e37d605eSJim Ingham } 96e37d605eSJim Ingham 97e37d605eSJim Ingham SBSourceManager::SBSourceManager (const SBSourceManager &rhs) 98e37d605eSJim Ingham { 99e37d605eSJim Ingham if (&rhs == this) 100e37d605eSJim Ingham return; 101e37d605eSJim Ingham 1029a37766eSGreg Clayton m_opaque_ap.reset(new SourceManagerImpl (*(rhs.m_opaque_ap.get()))); 103e37d605eSJim Ingham } 104e37d605eSJim Ingham 105e37d605eSJim Ingham const lldb::SBSourceManager & 106e37d605eSJim Ingham SBSourceManager::operator = (const lldb::SBSourceManager &rhs) 107e37d605eSJim Ingham { 1089a37766eSGreg Clayton m_opaque_ap.reset (new SourceManagerImpl (*(rhs.m_opaque_ap.get()))); 109e37d605eSJim Ingham return *this; 11030fdc8d8SChris Lattner } 11130fdc8d8SChris Lattner 11230fdc8d8SChris Lattner SBSourceManager::~SBSourceManager() 11330fdc8d8SChris Lattner { 11430fdc8d8SChris Lattner } 11530fdc8d8SChris Lattner 11630fdc8d8SChris Lattner size_t 11730fdc8d8SChris Lattner SBSourceManager::DisplaySourceLinesWithLineNumbers 11830fdc8d8SChris Lattner ( 11930fdc8d8SChris Lattner const SBFileSpec &file, 12030fdc8d8SChris Lattner uint32_t line, 12130fdc8d8SChris Lattner uint32_t context_before, 12230fdc8d8SChris Lattner uint32_t context_after, 12330fdc8d8SChris Lattner const char *current_line_cstr, 124f6eaba85SJohnny Chen SBStream &s 12530fdc8d8SChris Lattner ) 12630fdc8d8SChris Lattner { 127e37d605eSJim Ingham if (m_opaque_ap.get() == NULL) 128efabb123SGreg Clayton return 0; 129efabb123SGreg Clayton 1309a37766eSGreg Clayton return m_opaque_ap->DisplaySourceLinesWithLineNumbers (file.ref(), 13130fdc8d8SChris Lattner line, 13230fdc8d8SChris Lattner context_before, 13330fdc8d8SChris Lattner context_after, 13430fdc8d8SChris Lattner current_line_cstr, 1359a37766eSGreg Clayton s.get()); 13630fdc8d8SChris Lattner } 137