SBSourceManager.cpp revision 344779
1//===-- SBSourceManager.cpp -------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#include "lldb/API/SBSourceManager.h" 11#include "lldb/API/SBDebugger.h" 12#include "lldb/API/SBStream.h" 13#include "lldb/API/SBTarget.h" 14 15#include "lldb/API/SBFileSpec.h" 16#include "lldb/Core/Debugger.h" 17#include "lldb/Core/SourceManager.h" 18#include "lldb/Core/StreamFile.h" 19#include "lldb/Utility/Stream.h" 20 21#include "lldb/Target/Target.h" 22 23namespace lldb_private { 24class SourceManagerImpl { 25public: 26 SourceManagerImpl(const lldb::DebuggerSP &debugger_sp) 27 : m_debugger_wp(debugger_sp), m_target_wp() {} 28 29 SourceManagerImpl(const lldb::TargetSP &target_sp) 30 : m_debugger_wp(), m_target_wp(target_sp) {} 31 32 SourceManagerImpl(const SourceManagerImpl &rhs) { 33 if (&rhs == this) 34 return; 35 m_debugger_wp = rhs.m_debugger_wp; 36 m_target_wp = rhs.m_target_wp; 37 } 38 39 size_t DisplaySourceLinesWithLineNumbers(const lldb_private::FileSpec &file, 40 uint32_t line, uint32_t column, 41 uint32_t context_before, 42 uint32_t context_after, 43 const char *current_line_cstr, 44 lldb_private::Stream *s) { 45 if (!file) 46 return 0; 47 48 lldb::TargetSP target_sp(m_target_wp.lock()); 49 if (target_sp) { 50 return target_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers( 51 file, line, column, context_before, context_after, current_line_cstr, 52 s); 53 } else { 54 lldb::DebuggerSP debugger_sp(m_debugger_wp.lock()); 55 if (debugger_sp) { 56 return debugger_sp->GetSourceManager() 57 .DisplaySourceLinesWithLineNumbers(file, line, column, 58 context_before, context_after, 59 current_line_cstr, s); 60 } 61 } 62 return 0; 63 } 64 65private: 66 lldb::DebuggerWP m_debugger_wp; 67 lldb::TargetWP m_target_wp; 68}; 69} 70 71using namespace lldb; 72using namespace lldb_private; 73 74SBSourceManager::SBSourceManager(const SBDebugger &debugger) { 75 m_opaque_ap.reset(new SourceManagerImpl(debugger.get_sp())); 76} 77 78SBSourceManager::SBSourceManager(const SBTarget &target) { 79 m_opaque_ap.reset(new SourceManagerImpl(target.GetSP())); 80} 81 82SBSourceManager::SBSourceManager(const SBSourceManager &rhs) { 83 if (&rhs == this) 84 return; 85 86 m_opaque_ap.reset(new SourceManagerImpl(*(rhs.m_opaque_ap.get()))); 87} 88 89const lldb::SBSourceManager &SBSourceManager:: 90operator=(const lldb::SBSourceManager &rhs) { 91 m_opaque_ap.reset(new SourceManagerImpl(*(rhs.m_opaque_ap.get()))); 92 return *this; 93} 94 95SBSourceManager::~SBSourceManager() {} 96 97size_t SBSourceManager::DisplaySourceLinesWithLineNumbers( 98 const SBFileSpec &file, uint32_t line, uint32_t context_before, 99 uint32_t context_after, const char *current_line_cstr, SBStream &s) { 100 const uint32_t column = 0; 101 return DisplaySourceLinesWithLineNumbersAndColumn( 102 file.ref(), line, column, context_before, context_after, 103 current_line_cstr, s); 104} 105 106size_t SBSourceManager::DisplaySourceLinesWithLineNumbersAndColumn( 107 const SBFileSpec &file, uint32_t line, uint32_t column, 108 uint32_t context_before, uint32_t context_after, 109 const char *current_line_cstr, SBStream &s) { 110 if (m_opaque_ap == NULL) 111 return 0; 112 113 return m_opaque_ap->DisplaySourceLinesWithLineNumbers( 114 file.ref(), line, column, context_before, context_after, 115 current_line_cstr, s.get()); 116} 117