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*e37d605eSJim Ingham #include "lldb/API/SBDebugger.h"
114c5de699SEli Friedman #include "lldb/API/SBSourceManager.h"
12*e37d605eSJim Ingham #include "lldb/API/SBTarget.h"
13f6eaba85SJohnny Chen #include "lldb/API/SBStream.h"
1430fdc8d8SChris Lattner 
1530fdc8d8SChris Lattner #include "lldb/API/SBFileSpec.h"
16*e37d605eSJim 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 
21*e37d605eSJim Ingham #include "lldb/Target/Target.h"
2230fdc8d8SChris Lattner 
2330fdc8d8SChris Lattner using namespace lldb;
2430fdc8d8SChris Lattner using namespace lldb_private;
2530fdc8d8SChris Lattner 
26*e37d605eSJim Ingham class lldb::SBSourceManager_impl
2730fdc8d8SChris Lattner {
28*e37d605eSJim Ingham public:
29*e37d605eSJim Ingham     SBSourceManager_impl (const SBDebugger &debugger)
30*e37d605eSJim Ingham     {
31*e37d605eSJim Ingham         m_debugger_sp = debugger.m_opaque_sp;
32*e37d605eSJim Ingham     }
33*e37d605eSJim Ingham 
34*e37d605eSJim Ingham     SBSourceManager_impl (const SBTarget &target)
35*e37d605eSJim Ingham     {
36*e37d605eSJim Ingham         m_target_sp = target.m_opaque_sp;
37*e37d605eSJim Ingham     }
38*e37d605eSJim Ingham 
39*e37d605eSJim Ingham     SBSourceManager_impl (const SBSourceManager_impl &rhs)
40*e37d605eSJim Ingham     {
41*e37d605eSJim Ingham         if (&rhs == this)
42*e37d605eSJim Ingham             return;
43*e37d605eSJim Ingham         m_debugger_sp = rhs.m_debugger_sp;
44*e37d605eSJim Ingham         m_target_sp   = rhs.m_target_sp;
45*e37d605eSJim Ingham     }
46*e37d605eSJim Ingham 
47*e37d605eSJim Ingham     size_t
48*e37d605eSJim Ingham     DisplaySourceLinesWithLineNumbers
49*e37d605eSJim Ingham     (
50*e37d605eSJim Ingham         const SBFileSpec &file,
51*e37d605eSJim Ingham         uint32_t line,
52*e37d605eSJim Ingham         uint32_t context_before,
53*e37d605eSJim Ingham         uint32_t context_after,
54*e37d605eSJim Ingham         const char* current_line_cstr,
55*e37d605eSJim Ingham         SBStream &s
56*e37d605eSJim Ingham     )
57*e37d605eSJim Ingham     {
58*e37d605eSJim Ingham         if (!file.IsValid())
59*e37d605eSJim Ingham             return 0;
60*e37d605eSJim Ingham 
61*e37d605eSJim Ingham         if (m_debugger_sp)
62*e37d605eSJim Ingham             return m_debugger_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers (*file,
63*e37d605eSJim Ingham                                                                                         line,
64*e37d605eSJim Ingham                                                                                         context_before,
65*e37d605eSJim Ingham                                                                                         context_after,
66*e37d605eSJim Ingham                                                                                         current_line_cstr,
67*e37d605eSJim Ingham                                                                                         s.m_opaque_ap.get());
68*e37d605eSJim Ingham         else if (m_target_sp)
69*e37d605eSJim Ingham             return m_target_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers (*file,
70*e37d605eSJim Ingham                                                                                       line,
71*e37d605eSJim Ingham                                                                                       context_before,
72*e37d605eSJim Ingham                                                                                       context_after,
73*e37d605eSJim Ingham                                                                                       current_line_cstr,
74*e37d605eSJim Ingham                                                                                       s.m_opaque_ap.get());
75*e37d605eSJim Ingham         else
76*e37d605eSJim Ingham             return 0;
77*e37d605eSJim Ingham     }
78*e37d605eSJim Ingham 
79*e37d605eSJim Ingham private:
80*e37d605eSJim Ingham     lldb::DebuggerSP m_debugger_sp;
81*e37d605eSJim Ingham     lldb::TargetSP   m_target_sp;
82*e37d605eSJim Ingham 
83*e37d605eSJim Ingham };
84*e37d605eSJim Ingham 
85*e37d605eSJim Ingham SBSourceManager::SBSourceManager (const SBDebugger &debugger)
86*e37d605eSJim Ingham {
87*e37d605eSJim Ingham     m_opaque_ap.reset(new SBSourceManager_impl (debugger));
88*e37d605eSJim Ingham }
89*e37d605eSJim Ingham 
90*e37d605eSJim Ingham SBSourceManager::SBSourceManager (const SBTarget &target)
91*e37d605eSJim Ingham {
92*e37d605eSJim Ingham     m_opaque_ap.reset(new SBSourceManager_impl (target));
93*e37d605eSJim Ingham }
94*e37d605eSJim Ingham 
95*e37d605eSJim Ingham SBSourceManager::SBSourceManager (const SBSourceManager &rhs)
96*e37d605eSJim Ingham {
97*e37d605eSJim Ingham     if (&rhs == this)
98*e37d605eSJim Ingham         return;
99*e37d605eSJim Ingham 
100*e37d605eSJim Ingham     m_opaque_ap.reset(new SBSourceManager_impl (*(rhs.m_opaque_ap.get())));
101*e37d605eSJim Ingham }
102*e37d605eSJim Ingham 
103*e37d605eSJim Ingham const lldb::SBSourceManager &
104*e37d605eSJim Ingham SBSourceManager::operator = (const lldb::SBSourceManager &rhs)
105*e37d605eSJim Ingham {
106*e37d605eSJim Ingham     m_opaque_ap.reset (new SBSourceManager_impl (*(rhs.m_opaque_ap.get())));
107*e37d605eSJim 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 {
125*e37d605eSJim Ingham     if (m_opaque_ap.get() == NULL)
126efabb123SGreg Clayton         return 0;
127efabb123SGreg Clayton 
128*e37d605eSJim Ingham     return m_opaque_ap->DisplaySourceLinesWithLineNumbers (file,
12930fdc8d8SChris Lattner                                                            line,
13030fdc8d8SChris Lattner                                                            context_before,
13130fdc8d8SChris Lattner                                                            context_after,
13230fdc8d8SChris Lattner                                                            current_line_cstr,
133*e37d605eSJim Ingham                                                            s);
13430fdc8d8SChris Lattner }
135