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 104c5de699SEli Friedman #include "lldb/API/SBSourceManager.h" 11b9c1b51eSKate Stone #include "lldb/API/SBDebugger.h" 12f6eaba85SJohnny Chen #include "lldb/API/SBStream.h" 13b9c1b51eSKate Stone #include "lldb/API/SBTarget.h" 1430fdc8d8SChris Lattner 1530fdc8d8SChris Lattner #include "lldb/API/SBFileSpec.h" 16e37d605eSJim Ingham #include "lldb/Core/Debugger.h" 17b9c1b51eSKate Stone #include "lldb/Core/SourceManager.h" 1830fdc8d8SChris Lattner #include "lldb/Core/StreamFile.h" 19bf9a7730SZachary Turner #include "lldb/Utility/Stream.h" 2030fdc8d8SChris Lattner 21e37d605eSJim Ingham #include "lldb/Target/Target.h" 2230fdc8d8SChris Lattner 23b9c1b51eSKate Stone namespace lldb_private { 24b9c1b51eSKate Stone class SourceManagerImpl { 25e37d605eSJim Ingham public: 26b9c1b51eSKate Stone SourceManagerImpl(const lldb::DebuggerSP &debugger_sp) 27b9c1b51eSKate Stone : m_debugger_wp(debugger_sp), m_target_wp() {} 28e37d605eSJim Ingham 29b9c1b51eSKate Stone SourceManagerImpl(const lldb::TargetSP &target_sp) 30b9c1b51eSKate Stone : m_debugger_wp(), m_target_wp(target_sp) {} 31e37d605eSJim Ingham 32b9c1b51eSKate Stone SourceManagerImpl(const SourceManagerImpl &rhs) { 33e37d605eSJim Ingham if (&rhs == this) 34e37d605eSJim Ingham return; 359585fbfcSGreg Clayton m_debugger_wp = rhs.m_debugger_wp; 369585fbfcSGreg Clayton m_target_wp = rhs.m_target_wp; 37e37d605eSJim Ingham } 38e37d605eSJim Ingham 39b9c1b51eSKate Stone size_t DisplaySourceLinesWithLineNumbers(const lldb_private::FileSpec &file, 409666ba75STodd Fiala uint32_t line, uint32_t column, 41e37d605eSJim Ingham uint32_t context_before, 42e37d605eSJim Ingham uint32_t context_after, 43e37d605eSJim Ingham const char *current_line_cstr, 44b9c1b51eSKate Stone lldb_private::Stream *s) { 4544d6d2c5SJohnny Chen if (!file) 46e37d605eSJim Ingham return 0; 47e37d605eSJim Ingham 489585fbfcSGreg Clayton lldb::TargetSP target_sp(m_target_wp.lock()); 49b9c1b51eSKate Stone if (target_sp) { 50b9c1b51eSKate Stone return target_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers( 519666ba75STodd Fiala file, line, column, context_before, context_after, current_line_cstr, 529666ba75STodd Fiala s); 53b9c1b51eSKate Stone } else { 549585fbfcSGreg Clayton lldb::DebuggerSP debugger_sp(m_debugger_wp.lock()); 55b9c1b51eSKate Stone if (debugger_sp) { 56b9c1b51eSKate Stone return debugger_sp->GetSourceManager() 579666ba75STodd Fiala .DisplaySourceLinesWithLineNumbers(file, line, column, 589666ba75STodd Fiala context_before, context_after, 599666ba75STodd Fiala current_line_cstr, s); 609585fbfcSGreg Clayton } 619585fbfcSGreg Clayton } 62e37d605eSJim Ingham return 0; 63e37d605eSJim Ingham } 64e37d605eSJim Ingham 65e37d605eSJim Ingham private: 669585fbfcSGreg Clayton lldb::DebuggerWP m_debugger_wp; 679585fbfcSGreg Clayton lldb::TargetWP m_target_wp; 68e37d605eSJim Ingham }; 699a37766eSGreg Clayton } 709a37766eSGreg Clayton 719a37766eSGreg Clayton using namespace lldb; 729a37766eSGreg Clayton using namespace lldb_private; 73e37d605eSJim Ingham 74b9c1b51eSKate Stone SBSourceManager::SBSourceManager(const SBDebugger &debugger) { 759a37766eSGreg Clayton m_opaque_ap.reset(new SourceManagerImpl(debugger.get_sp())); 76e37d605eSJim Ingham } 77e37d605eSJim Ingham 78b9c1b51eSKate Stone SBSourceManager::SBSourceManager(const SBTarget &target) { 79b9556accSGreg Clayton m_opaque_ap.reset(new SourceManagerImpl(target.GetSP())); 80e37d605eSJim Ingham } 81e37d605eSJim Ingham 82b9c1b51eSKate Stone SBSourceManager::SBSourceManager(const SBSourceManager &rhs) { 83e37d605eSJim Ingham if (&rhs == this) 84e37d605eSJim Ingham return; 85e37d605eSJim Ingham 869a37766eSGreg Clayton m_opaque_ap.reset(new SourceManagerImpl(*(rhs.m_opaque_ap.get()))); 87e37d605eSJim Ingham } 88e37d605eSJim Ingham 89b9c1b51eSKate Stone const lldb::SBSourceManager &SBSourceManager:: 90b9c1b51eSKate Stone operator=(const lldb::SBSourceManager &rhs) { 919a37766eSGreg Clayton m_opaque_ap.reset(new SourceManagerImpl(*(rhs.m_opaque_ap.get()))); 92e37d605eSJim Ingham return *this; 9330fdc8d8SChris Lattner } 9430fdc8d8SChris Lattner 95b9c1b51eSKate Stone SBSourceManager::~SBSourceManager() {} 9630fdc8d8SChris Lattner 97b9c1b51eSKate Stone size_t SBSourceManager::DisplaySourceLinesWithLineNumbers( 98b9c1b51eSKate Stone const SBFileSpec &file, uint32_t line, uint32_t context_before, 99b9c1b51eSKate Stone uint32_t context_after, const char *current_line_cstr, SBStream &s) { 1009666ba75STodd Fiala const uint32_t column = 0; 1019666ba75STodd Fiala return DisplaySourceLinesWithLineNumbersAndColumn( 1029666ba75STodd Fiala file.ref(), line, column, context_before, context_after, 1039666ba75STodd Fiala current_line_cstr, s); 1049666ba75STodd Fiala } 1059666ba75STodd Fiala 1069666ba75STodd Fiala size_t SBSourceManager::DisplaySourceLinesWithLineNumbersAndColumn( 1079666ba75STodd Fiala const SBFileSpec &file, uint32_t line, uint32_t column, 1089666ba75STodd Fiala uint32_t context_before, uint32_t context_after, 1099666ba75STodd Fiala const char *current_line_cstr, SBStream &s) { 110*3447077aSJonas Devlieghere if (m_opaque_ap == NULL) 111efabb123SGreg Clayton return 0; 112efabb123SGreg Clayton 113b9c1b51eSKate Stone return m_opaque_ap->DisplaySourceLinesWithLineNumbers( 1149666ba75STodd Fiala file.ref(), line, column, context_before, context_after, 1159666ba75STodd Fiala current_line_cstr, s.get()); 11630fdc8d8SChris Lattner } 117