blob: 2fe375023f112e571f546ba455f2d0844af702c3 [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{
31}
32
33SBInputReader::SBInputReader (const lldb::InputReaderSP &reader_sp) :
Greg Clayton63094e02010-06-23 01:19:29 +000034 m_opaque_sp (reader_sp)
Chris Lattner24943d22010-06-08 16:52:24 +000035{
Greg Claytone005f2c2010-11-06 01:53:30 +000036 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000037
38 if (log)
Greg Claytona66ba462010-10-30 04:51:46 +000039 log->Printf ("SBInputReader::SBInputReader (reader_sp=%p) => SBInputReader(%p)", reader_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +000040 m_opaque_sp.get());
Chris Lattner24943d22010-06-08 16:52:24 +000041}
42
43SBInputReader::SBInputReader (const SBInputReader &rhs) :
Greg Clayton63094e02010-06-23 01:19:29 +000044 m_opaque_sp (rhs.m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +000045{
Greg Claytone005f2c2010-11-06 01:53:30 +000046 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000047
48 if (log)
Greg Claytona66ba462010-10-30 04:51:46 +000049 log->Printf("SBInputReader::SBInputReader (rhs.sp=%p) => SBInputReader(%p)",
Caroline Tice61ba7ec2010-10-26 23:49:36 +000050 rhs.m_opaque_sp.get(), m_opaque_sp.get());
Chris Lattner24943d22010-06-08 16:52:24 +000051}
52
53SBInputReader::~SBInputReader ()
54{
55}
56
57size_t
58SBInputReader::PrivateCallback
59(
60 void *baton,
Greg Clayton63094e02010-06-23 01:19:29 +000061 InputReader &reader,
Chris Lattner24943d22010-06-08 16:52:24 +000062 lldb::InputReaderAction notification,
63 const char *bytes,
64 size_t bytes_len
65)
66{
67 SBInputReader *sb_reader = (SBInputReader *)baton;
68 return sb_reader->m_callback_function (sb_reader->m_callback_baton,
69 sb_reader,
70 notification,
71 bytes,
72 bytes_len);
73}
74
75SBError
76SBInputReader::Initialize
77(
Greg Clayton63094e02010-06-23 01:19:29 +000078 SBDebugger &debugger,
Chris Lattner24943d22010-06-08 16:52:24 +000079 Callback callback_function,
80 void *callback_baton,
81 lldb::InputReaderGranularity granularity,
82 const char *end_token,
83 const char *prompt,
84 bool echo
85)
86{
Greg Claytone005f2c2010-11-06 01:53:30 +000087 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000088
89 if (log)
Greg Claytona66ba462010-10-30 04:51:46 +000090 log->Printf("SBInputReader(%p)::Initialize (SBDebugger(%p), callback_function=%p, callback_baton=%p, "
Greg Clayton49ce6822010-10-31 03:01:06 +000091 "granularity=%s, end_token=\"%s\", prompt=\"%s\", echo=%i)",
Greg Claytona66ba462010-10-30 04:51:46 +000092 m_opaque_sp.get(),
93 debugger.get(),
94 callback_function,
95 callback_baton,
96 InputReader::GranularityAsCString (granularity), end_token, prompt,
97 echo);
Caroline Tice7826c882010-10-26 03:11:13 +000098
Chris Lattner24943d22010-06-08 16:52:24 +000099 SBError sb_error;
Greg Clayton63094e02010-06-23 01:19:29 +0000100 m_opaque_sp.reset (new InputReader (debugger.ref()));
Chris Lattner24943d22010-06-08 16:52:24 +0000101
102 m_callback_function = callback_function;
103 m_callback_baton = callback_baton;
104
Greg Clayton63094e02010-06-23 01:19:29 +0000105 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000106 {
Greg Clayton63094e02010-06-23 01:19:29 +0000107 sb_error.SetError (m_opaque_sp->Initialize (SBInputReader::PrivateCallback,
Chris Lattner24943d22010-06-08 16:52:24 +0000108 this,
109 granularity,
110 end_token,
111 prompt,
112 echo));
113 }
114
115 if (sb_error.Fail())
116 {
Greg Clayton63094e02010-06-23 01:19:29 +0000117 m_opaque_sp.reset ();
Chris Lattner24943d22010-06-08 16:52:24 +0000118 m_callback_function = NULL;
119 m_callback_baton = NULL;
120 }
121
Caroline Tice7826c882010-10-26 03:11:13 +0000122 if (log)
123 {
124 SBStream sstr;
125 sb_error.GetDescription (sstr);
Greg Claytona66ba462010-10-30 04:51:46 +0000126 log->Printf ("SBInputReader(%p)::Initialize (...) => SBError(%p): %s", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000127 sb_error.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000128 }
129
Chris Lattner24943d22010-06-08 16:52:24 +0000130 return sb_error;
131}
132
133bool
134SBInputReader::IsValid () const
135{
Greg Clayton63094e02010-06-23 01:19:29 +0000136 return (m_opaque_sp.get() != NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000137}
138
139const SBInputReader &
140SBInputReader::operator = (const SBInputReader &rhs)
141{
142 if (this != &rhs)
Greg Clayton63094e02010-06-23 01:19:29 +0000143 m_opaque_sp = rhs.m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000144 return *this;
145}
146
Greg Clayton63094e02010-06-23 01:19:29 +0000147InputReader *
Chris Lattner24943d22010-06-08 16:52:24 +0000148SBInputReader::operator->() const
149{
Greg Clayton63094e02010-06-23 01:19:29 +0000150 return m_opaque_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000151}
152
153lldb::InputReaderSP &
154SBInputReader::operator *()
155{
Greg Clayton63094e02010-06-23 01:19:29 +0000156 return m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000157}
158
159const lldb::InputReaderSP &
160SBInputReader::operator *() const
161{
Greg Clayton63094e02010-06-23 01:19:29 +0000162 return m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000163}
164
Greg Clayton63094e02010-06-23 01:19:29 +0000165InputReader *
Chris Lattner24943d22010-06-08 16:52:24 +0000166SBInputReader::get() const
167{
Greg Clayton63094e02010-06-23 01:19:29 +0000168 return m_opaque_sp.get();
169}
170
171InputReader &
172SBInputReader::ref() const
173{
174 assert (m_opaque_sp.get());
175 return *m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000176}
177
178bool
179SBInputReader::IsDone () const
180{
Greg Clayton63094e02010-06-23 01:19:29 +0000181 if (m_opaque_sp)
182 return m_opaque_sp->IsDone();
Chris Lattner24943d22010-06-08 16:52:24 +0000183 else
184 return true;
185}
186
187void
188SBInputReader::SetIsDone (bool value)
189{
Greg Clayton63094e02010-06-23 01:19:29 +0000190 if (m_opaque_sp)
191 m_opaque_sp->SetIsDone (value);
Chris Lattner24943d22010-06-08 16:52:24 +0000192}
193
194bool
195SBInputReader::IsActive () const
196{
Greg Claytone005f2c2010-11-06 01:53:30 +0000197 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000198
Caroline Tice7826c882010-10-26 03:11:13 +0000199 bool ret_value = false;
Greg Clayton63094e02010-06-23 01:19:29 +0000200 if (m_opaque_sp)
Caroline Tice7826c882010-10-26 03:11:13 +0000201 ret_value = m_opaque_sp->IsActive();
202
203 if (log)
Greg Claytona66ba462010-10-30 04:51:46 +0000204 log->Printf ("SBInputReader(%p)::IsActive () => %i", m_opaque_sp.get(), ret_value);
Caroline Tice7826c882010-10-26 03:11:13 +0000205
206 return ret_value;
Chris Lattner24943d22010-06-08 16:52:24 +0000207}
208
209InputReaderGranularity
210SBInputReader::GetGranularity ()
211{
Greg Clayton63094e02010-06-23 01:19:29 +0000212 if (m_opaque_sp)
213 return m_opaque_sp->GetGranularity();
Chris Lattner24943d22010-06-08 16:52:24 +0000214 else
215 return eInputReaderGranularityInvalid;
216}