blob: adca15662af54ca001e3d6dadad11db98586b055 [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{
Caroline Tice61ba7ec2010-10-26 23:49:36 +000036 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
Caroline Tice7826c882010-10-26 03:11:13 +000037
38 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +000039 log->Printf ("SBInputReader::SBInputReader (reader_sp=%p) => this.sp = %p", reader_sp.get(),
40 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{
Caroline Tice61ba7ec2010-10-26 23:49:36 +000046 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
Caroline Tice7826c882010-10-26 03:11:13 +000047
48 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +000049 log->Printf("SBInputReader::SBInputReader (rhs.sp=%p) => this.sp = %p",
50 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{
Caroline Tice7826c882010-10-26 03:11:13 +000087 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
88
89 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +000090 log->Printf("SBInputReader::Initialize (this.sp=%p, debugger.sp=%p, callback_function=%p, callback_baton=%p, "
91 "granularity='%s', end_token='%s', prompt='%s', echo=%s)", m_opaque_sp.get(), debugger.get(),
92 callback_baton, InputReader::GranularityAsCString (granularity), end_token, prompt,
93 (echo ? "true" : "false"));
Caroline Tice7826c882010-10-26 03:11:13 +000094
Chris Lattner24943d22010-06-08 16:52:24 +000095 SBError sb_error;
Greg Clayton63094e02010-06-23 01:19:29 +000096 m_opaque_sp.reset (new InputReader (debugger.ref()));
Chris Lattner24943d22010-06-08 16:52:24 +000097
98 m_callback_function = callback_function;
99 m_callback_baton = callback_baton;
100
Greg Clayton63094e02010-06-23 01:19:29 +0000101 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000102 {
Greg Clayton63094e02010-06-23 01:19:29 +0000103 sb_error.SetError (m_opaque_sp->Initialize (SBInputReader::PrivateCallback,
Chris Lattner24943d22010-06-08 16:52:24 +0000104 this,
105 granularity,
106 end_token,
107 prompt,
108 echo));
109 }
110
111 if (sb_error.Fail())
112 {
Greg Clayton63094e02010-06-23 01:19:29 +0000113 m_opaque_sp.reset ();
Chris Lattner24943d22010-06-08 16:52:24 +0000114 m_callback_function = NULL;
115 m_callback_baton = NULL;
116 }
117
Caroline Tice7826c882010-10-26 03:11:13 +0000118 if (log)
119 {
120 SBStream sstr;
121 sb_error.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000122 log->Printf ("SBInputReader::Initialize (this.sp=%p, ...) => SBError (this.ap=%p, '%s')", m_opaque_sp.get(),
123 sb_error.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000124 }
125
Chris Lattner24943d22010-06-08 16:52:24 +0000126 return sb_error;
127}
128
129bool
130SBInputReader::IsValid () const
131{
Greg Clayton63094e02010-06-23 01:19:29 +0000132 return (m_opaque_sp.get() != NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000133}
134
135const SBInputReader &
136SBInputReader::operator = (const SBInputReader &rhs)
137{
138 if (this != &rhs)
Greg Clayton63094e02010-06-23 01:19:29 +0000139 m_opaque_sp = rhs.m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000140 return *this;
141}
142
Greg Clayton63094e02010-06-23 01:19:29 +0000143InputReader *
Chris Lattner24943d22010-06-08 16:52:24 +0000144SBInputReader::operator->() const
145{
Greg Clayton63094e02010-06-23 01:19:29 +0000146 return m_opaque_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000147}
148
149lldb::InputReaderSP &
150SBInputReader::operator *()
151{
Greg Clayton63094e02010-06-23 01:19:29 +0000152 return m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000153}
154
155const lldb::InputReaderSP &
156SBInputReader::operator *() const
157{
Greg Clayton63094e02010-06-23 01:19:29 +0000158 return m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000159}
160
Greg Clayton63094e02010-06-23 01:19:29 +0000161InputReader *
Chris Lattner24943d22010-06-08 16:52:24 +0000162SBInputReader::get() const
163{
Greg Clayton63094e02010-06-23 01:19:29 +0000164 return m_opaque_sp.get();
165}
166
167InputReader &
168SBInputReader::ref() const
169{
170 assert (m_opaque_sp.get());
171 return *m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000172}
173
174bool
175SBInputReader::IsDone () const
176{
Greg Clayton63094e02010-06-23 01:19:29 +0000177 if (m_opaque_sp)
178 return m_opaque_sp->IsDone();
Chris Lattner24943d22010-06-08 16:52:24 +0000179 else
180 return true;
181}
182
183void
184SBInputReader::SetIsDone (bool value)
185{
Greg Clayton63094e02010-06-23 01:19:29 +0000186 if (m_opaque_sp)
187 m_opaque_sp->SetIsDone (value);
Chris Lattner24943d22010-06-08 16:52:24 +0000188}
189
190bool
191SBInputReader::IsActive () const
192{
Caroline Tice7826c882010-10-26 03:11:13 +0000193 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
194
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000195 //if (log)
196 // log->Printf ("SBInputReader::IsActive ()");
Caroline Tice7826c882010-10-26 03:11:13 +0000197
198 bool ret_value = false;
Greg Clayton63094e02010-06-23 01:19:29 +0000199 if (m_opaque_sp)
Caroline Tice7826c882010-10-26 03:11:13 +0000200 ret_value = m_opaque_sp->IsActive();
201
202 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000203 log->Printf ("SBInputReader::IsActive (this.sp=%p) => '%s'", m_opaque_sp.get(),
204 (ret_value ? "true" : "false"));
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}