blob: bb1d2dbaedfc81bf220946936ab372eaba4c0514 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- SBInputReader.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
11#include "lldb/lldb-enumerations.h"
12
Greg Clayton63094e02010-06-23 01:19:29 +000013#include "lldb/API/SBDebugger.h"
Chris Lattner24943d22010-06-08 16:52:24 +000014#include "lldb/API/SBError.h"
Greg Clayton63094e02010-06-23 01:19:29 +000015#include "lldb/API/SBInputReader.h"
Caroline Tice7826c882010-10-26 03:11:13 +000016#include "lldb/API/SBStream.h"
Chris Lattner24943d22010-06-08 16:52:24 +000017#include "lldb/API/SBStringList.h"
18#include "lldb/Core/InputReader.h"
Caroline Tice7826c882010-10-26 03:11:13 +000019#include "lldb/Core/Log.h"
Chris Lattner24943d22010-06-08 16:52:24 +000020
21
22using namespace lldb;
23using namespace lldb_private;
24
25SBInputReader::SBInputReader () :
Greg Clayton63094e02010-06-23 01:19:29 +000026 m_opaque_sp (),
Chris Lattner24943d22010-06-08 16:52:24 +000027 m_callback_function (NULL),
28 m_callback_baton (NULL)
29
30{
Caroline Tice7826c882010-10-26 03:11:13 +000031 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE);
32
33 if (log)
34 log->Printf ("SBInputReader::SBInputReader () ==> this = %p", this);
Chris Lattner24943d22010-06-08 16:52:24 +000035}
36
37SBInputReader::SBInputReader (const lldb::InputReaderSP &reader_sp) :
Greg Clayton63094e02010-06-23 01:19:29 +000038 m_opaque_sp (reader_sp)
Chris Lattner24943d22010-06-08 16:52:24 +000039{
Caroline Tice7826c882010-10-26 03:11:13 +000040 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE);
41
42 if (log)
43 log->Printf ("SBInputReader::SBInputReader (const lldb::InputReaderSP &reader_sp) reader_sp.get = %p"
44 " ==> this = %p", this);
Chris Lattner24943d22010-06-08 16:52:24 +000045}
46
47SBInputReader::SBInputReader (const SBInputReader &rhs) :
Greg Clayton63094e02010-06-23 01:19:29 +000048 m_opaque_sp (rhs.m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +000049{
Caroline Tice7826c882010-10-26 03:11:13 +000050 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE);
51
52 if (log)
53 log->Printf("SBInputReader::SBInputReader (const SBInputReader &rhs) rhs.m_opaque_sp.get() = %p ==> this = %p",
54 rhs.m_opaque_sp.get(), this);
Chris Lattner24943d22010-06-08 16:52:24 +000055}
56
57SBInputReader::~SBInputReader ()
58{
59}
60
61size_t
62SBInputReader::PrivateCallback
63(
64 void *baton,
Greg Clayton63094e02010-06-23 01:19:29 +000065 InputReader &reader,
Chris Lattner24943d22010-06-08 16:52:24 +000066 lldb::InputReaderAction notification,
67 const char *bytes,
68 size_t bytes_len
69)
70{
71 SBInputReader *sb_reader = (SBInputReader *)baton;
72 return sb_reader->m_callback_function (sb_reader->m_callback_baton,
73 sb_reader,
74 notification,
75 bytes,
76 bytes_len);
77}
78
79SBError
80SBInputReader::Initialize
81(
Greg Clayton63094e02010-06-23 01:19:29 +000082 SBDebugger &debugger,
Chris Lattner24943d22010-06-08 16:52:24 +000083 Callback callback_function,
84 void *callback_baton,
85 lldb::InputReaderGranularity granularity,
86 const char *end_token,
87 const char *prompt,
88 bool echo
89)
90{
Caroline Tice7826c882010-10-26 03:11:13 +000091 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
92
93 if (log)
94 {
95 log->Printf("SBInputReader::Initialize (SBDebugger &debugger, Callback callback_function, void *baton, "
96 "lldb::InputReaderGranularity granularity, const char *end_token, const char *prompt, bool echo)");
97 log->Printf(" debugger (this = %p), callback_function, callback_baton = %p, granularity = %s, "
98 "end_token = '%s', prompt = '%s', echo = %s", &debugger, callback_baton,
99 InputReader::GranularityAsCString (granularity), end_token, prompt, (echo ? "true" : "false"));
100 }
101
Chris Lattner24943d22010-06-08 16:52:24 +0000102 SBError sb_error;
Greg Clayton63094e02010-06-23 01:19:29 +0000103 m_opaque_sp.reset (new InputReader (debugger.ref()));
Chris Lattner24943d22010-06-08 16:52:24 +0000104
105 m_callback_function = callback_function;
106 m_callback_baton = callback_baton;
107
Greg Clayton63094e02010-06-23 01:19:29 +0000108 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000109 {
Greg Clayton63094e02010-06-23 01:19:29 +0000110 sb_error.SetError (m_opaque_sp->Initialize (SBInputReader::PrivateCallback,
Chris Lattner24943d22010-06-08 16:52:24 +0000111 this,
112 granularity,
113 end_token,
114 prompt,
115 echo));
116 }
117
118 if (sb_error.Fail())
119 {
Greg Clayton63094e02010-06-23 01:19:29 +0000120 m_opaque_sp.reset ();
Chris Lattner24943d22010-06-08 16:52:24 +0000121 m_callback_function = NULL;
122 m_callback_baton = NULL;
123 }
124
Caroline Tice7826c882010-10-26 03:11:13 +0000125 if (log)
126 {
127 SBStream sstr;
128 sb_error.GetDescription (sstr);
129 log->Printf ("SBInputReader::Initialize ==> SBError (this = %p, '%s')", &sb_error, sstr.GetData());
130 }
131
Chris Lattner24943d22010-06-08 16:52:24 +0000132 return sb_error;
133}
134
135bool
136SBInputReader::IsValid () const
137{
Greg Clayton63094e02010-06-23 01:19:29 +0000138 return (m_opaque_sp.get() != NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000139}
140
141const SBInputReader &
142SBInputReader::operator = (const SBInputReader &rhs)
143{
144 if (this != &rhs)
Greg Clayton63094e02010-06-23 01:19:29 +0000145 m_opaque_sp = rhs.m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000146 return *this;
147}
148
Greg Clayton63094e02010-06-23 01:19:29 +0000149InputReader *
Chris Lattner24943d22010-06-08 16:52:24 +0000150SBInputReader::operator->() const
151{
Greg Clayton63094e02010-06-23 01:19:29 +0000152 return m_opaque_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000153}
154
155lldb::InputReaderSP &
156SBInputReader::operator *()
157{
Greg Clayton63094e02010-06-23 01:19:29 +0000158 return m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000159}
160
161const lldb::InputReaderSP &
162SBInputReader::operator *() const
163{
Greg Clayton63094e02010-06-23 01:19:29 +0000164 return m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000165}
166
Greg Clayton63094e02010-06-23 01:19:29 +0000167InputReader *
Chris Lattner24943d22010-06-08 16:52:24 +0000168SBInputReader::get() const
169{
Greg Clayton63094e02010-06-23 01:19:29 +0000170 return m_opaque_sp.get();
171}
172
173InputReader &
174SBInputReader::ref() const
175{
176 assert (m_opaque_sp.get());
177 return *m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000178}
179
180bool
181SBInputReader::IsDone () const
182{
Greg Clayton63094e02010-06-23 01:19:29 +0000183 if (m_opaque_sp)
184 return m_opaque_sp->IsDone();
Chris Lattner24943d22010-06-08 16:52:24 +0000185 else
186 return true;
187}
188
189void
190SBInputReader::SetIsDone (bool value)
191{
Greg Clayton63094e02010-06-23 01:19:29 +0000192 if (m_opaque_sp)
193 m_opaque_sp->SetIsDone (value);
Chris Lattner24943d22010-06-08 16:52:24 +0000194}
195
196bool
197SBInputReader::IsActive () const
198{
Caroline Tice7826c882010-10-26 03:11:13 +0000199 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
200
201 if (log)
202 log->Printf ("SBInputReader::IsActive ()");
203
204 bool ret_value = false;
Greg Clayton63094e02010-06-23 01:19:29 +0000205 if (m_opaque_sp)
Caroline Tice7826c882010-10-26 03:11:13 +0000206 ret_value = m_opaque_sp->IsActive();
207
208 if (log)
209 log->Printf ("SBInputReader::IsActive ==> %s", (ret_value ? "true" : "false"));
210
211 return ret_value;
Chris Lattner24943d22010-06-08 16:52:24 +0000212}
213
214InputReaderGranularity
215SBInputReader::GetGranularity ()
216{
Greg Clayton63094e02010-06-23 01:19:29 +0000217 if (m_opaque_sp)
218 return m_opaque_sp->GetGranularity();
Chris Lattner24943d22010-06-08 16:52:24 +0000219 else
220 return eInputReaderGranularityInvalid;
221}