130fdc8d8SChris Lattner //===-- SBSourceManager.cpp -------------------------------------*- C++ -*-===// 230fdc8d8SChris Lattner // 3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 630fdc8d8SChris Lattner // 730fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 830fdc8d8SChris Lattner 94c5de699SEli Friedman #include "lldb/API/SBSourceManager.h" 10b9c1b51eSKate Stone #include "lldb/API/SBDebugger.h" 11f6eaba85SJohnny Chen #include "lldb/API/SBStream.h" 12b9c1b51eSKate Stone #include "lldb/API/SBTarget.h" 1330fdc8d8SChris Lattner 1430fdc8d8SChris Lattner #include "lldb/API/SBFileSpec.h" 15e37d605eSJim Ingham #include "lldb/Core/Debugger.h" 16b9c1b51eSKate Stone #include "lldb/Core/SourceManager.h" 1730fdc8d8SChris Lattner #include "lldb/Core/StreamFile.h" 18bf9a7730SZachary Turner #include "lldb/Utility/Stream.h" 1930fdc8d8SChris Lattner 20e37d605eSJim Ingham #include "lldb/Target/Target.h" 2130fdc8d8SChris Lattner 22b9c1b51eSKate Stone namespace lldb_private { 23b9c1b51eSKate Stone class SourceManagerImpl { 24e37d605eSJim Ingham public: 25b9c1b51eSKate Stone SourceManagerImpl(const lldb::DebuggerSP &debugger_sp) 26b9c1b51eSKate Stone : m_debugger_wp(debugger_sp), m_target_wp() {} 27e37d605eSJim Ingham 28b9c1b51eSKate Stone SourceManagerImpl(const lldb::TargetSP &target_sp) 29b9c1b51eSKate Stone : m_debugger_wp(), m_target_wp(target_sp) {} 30e37d605eSJim Ingham 31b9c1b51eSKate Stone SourceManagerImpl(const SourceManagerImpl &rhs) { 32e37d605eSJim Ingham if (&rhs == this) 33e37d605eSJim Ingham return; 349585fbfcSGreg Clayton m_debugger_wp = rhs.m_debugger_wp; 359585fbfcSGreg Clayton m_target_wp = rhs.m_target_wp; 36e37d605eSJim Ingham } 37e37d605eSJim Ingham 38b9c1b51eSKate Stone size_t DisplaySourceLinesWithLineNumbers(const lldb_private::FileSpec &file, 399666ba75STodd Fiala uint32_t line, uint32_t column, 40e37d605eSJim Ingham uint32_t context_before, 41e37d605eSJim Ingham uint32_t context_after, 42e37d605eSJim Ingham const char *current_line_cstr, 43b9c1b51eSKate Stone lldb_private::Stream *s) { 4444d6d2c5SJohnny Chen if (!file) 45e37d605eSJim Ingham return 0; 46e37d605eSJim Ingham 479585fbfcSGreg Clayton lldb::TargetSP target_sp(m_target_wp.lock()); 48b9c1b51eSKate Stone if (target_sp) { 49b9c1b51eSKate Stone return target_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers( 509666ba75STodd Fiala file, line, column, context_before, context_after, current_line_cstr, 519666ba75STodd Fiala s); 52b9c1b51eSKate Stone } else { 539585fbfcSGreg Clayton lldb::DebuggerSP debugger_sp(m_debugger_wp.lock()); 54b9c1b51eSKate Stone if (debugger_sp) { 55b9c1b51eSKate Stone return debugger_sp->GetSourceManager() 569666ba75STodd Fiala .DisplaySourceLinesWithLineNumbers(file, line, column, 579666ba75STodd Fiala context_before, context_after, 589666ba75STodd Fiala current_line_cstr, s); 599585fbfcSGreg Clayton } 609585fbfcSGreg Clayton } 61e37d605eSJim Ingham return 0; 62e37d605eSJim Ingham } 63e37d605eSJim Ingham 64e37d605eSJim Ingham private: 659585fbfcSGreg Clayton lldb::DebuggerWP m_debugger_wp; 669585fbfcSGreg Clayton lldb::TargetWP m_target_wp; 67e37d605eSJim Ingham }; 689a37766eSGreg Clayton } 699a37766eSGreg Clayton 709a37766eSGreg Clayton using namespace lldb; 719a37766eSGreg Clayton using namespace lldb_private; 72e37d605eSJim Ingham 73b9c1b51eSKate Stone SBSourceManager::SBSourceManager(const SBDebugger &debugger) { 749a37766eSGreg Clayton m_opaque_ap.reset(new SourceManagerImpl(debugger.get_sp())); 75e37d605eSJim Ingham } 76e37d605eSJim Ingham 77b9c1b51eSKate Stone SBSourceManager::SBSourceManager(const SBTarget &target) { 78b9556accSGreg Clayton m_opaque_ap.reset(new SourceManagerImpl(target.GetSP())); 79e37d605eSJim Ingham } 80e37d605eSJim Ingham 81b9c1b51eSKate Stone SBSourceManager::SBSourceManager(const SBSourceManager &rhs) { 82e37d605eSJim Ingham if (&rhs == this) 83e37d605eSJim Ingham return; 84e37d605eSJim Ingham 859a37766eSGreg Clayton m_opaque_ap.reset(new SourceManagerImpl(*(rhs.m_opaque_ap.get()))); 86e37d605eSJim Ingham } 87e37d605eSJim Ingham 88b9c1b51eSKate Stone const lldb::SBSourceManager &SBSourceManager:: 89b9c1b51eSKate Stone operator=(const lldb::SBSourceManager &rhs) { 909a37766eSGreg Clayton m_opaque_ap.reset(new SourceManagerImpl(*(rhs.m_opaque_ap.get()))); 91e37d605eSJim Ingham return *this; 9230fdc8d8SChris Lattner } 9330fdc8d8SChris Lattner 94b9c1b51eSKate Stone SBSourceManager::~SBSourceManager() {} 9530fdc8d8SChris Lattner 96b9c1b51eSKate Stone size_t SBSourceManager::DisplaySourceLinesWithLineNumbers( 97b9c1b51eSKate Stone const SBFileSpec &file, uint32_t line, uint32_t context_before, 98b9c1b51eSKate Stone uint32_t context_after, const char *current_line_cstr, SBStream &s) { 999666ba75STodd Fiala const uint32_t column = 0; 1009666ba75STodd Fiala return DisplaySourceLinesWithLineNumbersAndColumn( 1019666ba75STodd Fiala file.ref(), line, column, context_before, context_after, 1029666ba75STodd Fiala current_line_cstr, s); 1039666ba75STodd Fiala } 1049666ba75STodd Fiala 1059666ba75STodd Fiala size_t SBSourceManager::DisplaySourceLinesWithLineNumbersAndColumn( 1069666ba75STodd Fiala const SBFileSpec &file, uint32_t line, uint32_t column, 1079666ba75STodd Fiala uint32_t context_before, uint32_t context_after, 1089666ba75STodd Fiala const char *current_line_cstr, SBStream &s) { 1093447077aSJonas Devlieghere if (m_opaque_ap == NULL) 110efabb123SGreg Clayton return 0; 111efabb123SGreg Clayton 112b9c1b51eSKate Stone return m_opaque_ap->DisplaySourceLinesWithLineNumbers( 1139666ba75STodd Fiala file.ref(), line, column, context_before, context_after, 1149666ba75STodd Fiala current_line_cstr, s.get()); 11530fdc8d8SChris Lattner } 116