blob: d38b74107f8c8d5e22978febf0f204e64d1a8763 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- SBCommandInterpreter.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/lldb-types.h"
Jim Ingham84cdc152010-06-15 19:49:27 +000011#include "lldb/Interpreter/Args.h"
Chris Lattner24943d22010-06-08 16:52:24 +000012#include "lldb/Core/SourceManager.h"
13#include "lldb/Core/Listener.h"
14#include "lldb/Interpreter/CommandInterpreter.h"
15#include "lldb/Interpreter/CommandReturnObject.h"
16#include "lldb/Target/Target.h"
17
Eli Friedmand6ec8aa2010-06-09 07:37:52 +000018#include "lldb/API/SBBroadcaster.h"
19#include "lldb/API/SBDebugger.h"
20#include "lldb/API/SBCommandReturnObject.h"
Eli Friedmand6ec8aa2010-06-09 07:37:52 +000021#include "lldb/API/SBSourceManager.h"
22#include "lldb/API/SBCommandInterpreter.h"
23#include "lldb/API/SBProcess.h"
24#include "lldb/API/SBTarget.h"
25#include "lldb/API/SBListener.h"
26#include "lldb/API/SBStringList.h"
Chris Lattner24943d22010-06-08 16:52:24 +000027
28using namespace lldb;
29using namespace lldb_private;
30
31
Greg Clayton63094e02010-06-23 01:19:29 +000032SBCommandInterpreter::SBCommandInterpreter (CommandInterpreter *interpreter) :
33 m_opaque_ptr (interpreter)
Chris Lattner24943d22010-06-08 16:52:24 +000034{
35}
36
37SBCommandInterpreter::~SBCommandInterpreter ()
38{
39}
40
41bool
Greg Clayton63094e02010-06-23 01:19:29 +000042SBCommandInterpreter::IsValid() const
43{
44 return m_opaque_ptr != NULL;
45}
46
47
48bool
Chris Lattner24943d22010-06-08 16:52:24 +000049SBCommandInterpreter::CommandExists (const char *cmd)
50{
Greg Clayton63094e02010-06-23 01:19:29 +000051 if (m_opaque_ptr)
52 return m_opaque_ptr->CommandExists (cmd);
53 return false;
Chris Lattner24943d22010-06-08 16:52:24 +000054}
55
56bool
57SBCommandInterpreter::AliasExists (const char *cmd)
58{
Greg Clayton63094e02010-06-23 01:19:29 +000059 if (m_opaque_ptr)
60 return m_opaque_ptr->AliasExists (cmd);
61 return false;
Chris Lattner24943d22010-06-08 16:52:24 +000062}
63
Chris Lattner24943d22010-06-08 16:52:24 +000064lldb::ReturnStatus
65SBCommandInterpreter::HandleCommand (const char *command_line, SBCommandReturnObject &result, bool add_to_history)
66{
67 result.Clear();
Greg Clayton63094e02010-06-23 01:19:29 +000068 if (m_opaque_ptr)
69 {
70 m_opaque_ptr->HandleCommand (command_line, add_to_history, result.ref());
71 }
72 else
73 {
74 result->AppendError ("SBCommandInterpreter is not valid");
75 result->SetStatus (eReturnStatusFailed);
76 }
Chris Lattner24943d22010-06-08 16:52:24 +000077 return result.GetStatus();
78}
79
80int
81SBCommandInterpreter::HandleCompletion (const char *current_line,
82 const char *cursor,
83 const char *last_char,
84 int match_start_point,
85 int max_return_elements,
86 SBStringList &matches)
87{
Greg Clayton63094e02010-06-23 01:19:29 +000088 int num_completions = 0;
89 if (m_opaque_ptr)
90 {
91 lldb_private::StringList lldb_matches;
92 num_completions = m_opaque_ptr->HandleCompletion (current_line, cursor, last_char, match_start_point,
93 max_return_elements, lldb_matches);
Chris Lattner24943d22010-06-08 16:52:24 +000094
Greg Clayton63094e02010-06-23 01:19:29 +000095 SBStringList temp_list (&lldb_matches);
96 matches.AppendList (temp_list);
97 }
Chris Lattner24943d22010-06-08 16:52:24 +000098 return num_completions;
99}
100
Chris Lattner24943d22010-06-08 16:52:24 +0000101bool
102SBCommandInterpreter::HasCommands ()
103{
Greg Clayton63094e02010-06-23 01:19:29 +0000104 if (m_opaque_ptr)
105 return m_opaque_ptr->HasCommands();
106 return false;
Chris Lattner24943d22010-06-08 16:52:24 +0000107}
108
109bool
110SBCommandInterpreter::HasAliases ()
111{
Greg Clayton63094e02010-06-23 01:19:29 +0000112 if (m_opaque_ptr)
113 return m_opaque_ptr->HasAliases();
114 return false;
Chris Lattner24943d22010-06-08 16:52:24 +0000115}
116
117bool
Chris Lattner24943d22010-06-08 16:52:24 +0000118SBCommandInterpreter::HasAliasOptions ()
119{
Greg Clayton63094e02010-06-23 01:19:29 +0000120 if (m_opaque_ptr)
121 return m_opaque_ptr->HasAliasOptions ();
122 return false;
Chris Lattner24943d22010-06-08 16:52:24 +0000123}
124
Chris Lattner24943d22010-06-08 16:52:24 +0000125SBProcess
126SBCommandInterpreter::GetProcess ()
127{
128 SBProcess process;
Greg Clayton63094e02010-06-23 01:19:29 +0000129 if (m_opaque_ptr)
Chris Lattner24943d22010-06-08 16:52:24 +0000130 {
Greg Clayton63094e02010-06-23 01:19:29 +0000131 Debugger &debugger = m_opaque_ptr->GetDebugger();
Jim Inghamc8332952010-08-26 21:32:51 +0000132 Target *target = debugger.GetSelectedTarget().get();
Chris Lattner24943d22010-06-08 16:52:24 +0000133 if (target)
134 process.SetProcess(target->GetProcessSP());
135 }
136 return process;
137}
138
139ssize_t
140SBCommandInterpreter::WriteToScriptInterpreter (const char *src)
141{
Greg Clayton63094e02010-06-23 01:19:29 +0000142 if (m_opaque_ptr && src && src[0])
Chris Lattner24943d22010-06-08 16:52:24 +0000143 return WriteToScriptInterpreter (src, strlen(src));
144 return 0;
145}
146
147ssize_t
148SBCommandInterpreter::WriteToScriptInterpreter (const char *src, size_t src_len)
149{
Greg Clayton63094e02010-06-23 01:19:29 +0000150 if (m_opaque_ptr && src && src[0])
Chris Lattner24943d22010-06-08 16:52:24 +0000151 {
Greg Clayton63094e02010-06-23 01:19:29 +0000152 ScriptInterpreter *script_interpreter = m_opaque_ptr->GetScriptInterpreter();
Chris Lattner24943d22010-06-08 16:52:24 +0000153 if (script_interpreter)
154 return ::write (script_interpreter->GetMasterFileDescriptor(), src, src_len);
155 }
156 return 0;
157}
158
159
160CommandInterpreter *
Greg Clayton63094e02010-06-23 01:19:29 +0000161SBCommandInterpreter::get ()
Chris Lattner24943d22010-06-08 16:52:24 +0000162{
Greg Clayton63094e02010-06-23 01:19:29 +0000163 return m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +0000164}
165
166CommandInterpreter &
Greg Clayton63094e02010-06-23 01:19:29 +0000167SBCommandInterpreter::ref ()
Chris Lattner24943d22010-06-08 16:52:24 +0000168{
Greg Clayton63094e02010-06-23 01:19:29 +0000169 assert (m_opaque_ptr);
170 return *m_opaque_ptr;
171}
172
173void
174SBCommandInterpreter::reset (lldb_private::CommandInterpreter *interpreter)
175{
176 m_opaque_ptr = interpreter;
Chris Lattner24943d22010-06-08 16:52:24 +0000177}
178
179void
180SBCommandInterpreter::SourceInitFileInHomeDirectory (SBCommandReturnObject &result)
181{
182 result.Clear();
Greg Clayton63094e02010-06-23 01:19:29 +0000183 if (m_opaque_ptr)
184 {
185 m_opaque_ptr->SourceInitFile (false, result.ref());
186 }
187 else
188 {
189 result->AppendError ("SBCommandInterpreter is not valid");
190 result->SetStatus (eReturnStatusFailed);
191 }
Chris Lattner24943d22010-06-08 16:52:24 +0000192}
193
194void
195SBCommandInterpreter::SourceInitFileInCurrentWorkingDirectory (SBCommandReturnObject &result)
196{
197 result.Clear();
Greg Clayton63094e02010-06-23 01:19:29 +0000198 if (m_opaque_ptr)
199 {
200 m_opaque_ptr->SourceInitFile (true, result.ref());
201 }
202 else
203 {
204 result->AppendError ("SBCommandInterpreter is not valid");
205 result->SetStatus (eReturnStatusFailed);
206 }
Chris Lattner24943d22010-06-08 16:52:24 +0000207}
208
209SBBroadcaster
210SBCommandInterpreter::GetBroadcaster ()
211{
Greg Clayton63094e02010-06-23 01:19:29 +0000212 SBBroadcaster broadcaster (m_opaque_ptr, false);
Chris Lattner24943d22010-06-08 16:52:24 +0000213 return broadcaster;
214}
215