CommandInterpreter.h revision 5a15e6927b5b3234fb3e688717297ba6b5dd6ad7
1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//===-- CommandInterpreter.h ------------------------------------*- C++ -*-===//
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//                     The LLVM Compiler Infrastructure
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// This file is distributed under the University of Illinois Open Source
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// License. See LICENSE.TXT for details.
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//===----------------------------------------------------------------------===//
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#ifndef liblldb_CommandInterpreter_h_
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define liblldb_CommandInterpreter_h_
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// C Includes
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// C++ Includes
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Other libraries and framework includes
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Project includes
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "lldb/lldb-private.h"
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "lldb/Core/Broadcaster.h"
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "lldb/Core/Debugger.h"
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "lldb/Core/Log.h"
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "lldb/Interpreter/CommandObject.h"
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "lldb/Interpreter/ScriptInterpreter.h"
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "lldb/Core/Event.h"
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "lldb/Interpreter/Args.h"
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "lldb/Core/StringList.h"
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace lldb_private {
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass CommandInterpreter : public Broadcaster
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpublic:
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    typedef std::map<std::string, OptionArgVectorSP> OptionArgMap;
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    enum
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    {
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        eBroadcastBitThreadShouldExit       = (1 << 0),
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        eBroadcastBitResetPrompt            = (1 << 1),
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        eBroadcastBitQuitCommandReceived    = (1 << 2),   // User entered quit
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        eBroadcastBitAsynchronousOutputData = (1 << 3),
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        eBroadcastBitAsynchronousErrorData  = (1 << 4)
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    };
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    enum ChildrenTruncatedWarningStatus // tristate boolean to manage children truncation warning
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    {
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        eNoTruncation = 0, // never truncated
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        eUnwarnedTruncation = 1, // truncated but did not notify
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        eWarnedTruncation = 2 // truncated and notified
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    };
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    enum CommandTypes
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    {
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        eCommandTypesBuiltin = 0x0001,  // native commands such as "frame"
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        eCommandTypesUserDef = 0x0002,  // scripted commands
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        eCommandTypesAliases = 0x0004,  // aliases such as "po"
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        eCommandTypesAllThem = 0xFFFF   // all commands
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    };
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    // These two functions fill out the Broadcaster interface:
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    static ConstString &GetStaticBroadcasterClass ();
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    virtual ConstString &GetBroadcasterClass() const
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    {
64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        return GetStaticBroadcasterClass();
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    void
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    SourceInitFile (bool in_cwd,
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    CommandReturnObject &result);
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    CommandInterpreter (Debugger &debugger,
72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        lldb::ScriptLanguage script_language,
73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        bool synchronous_execution);
74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    virtual
76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ~CommandInterpreter ();
77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    bool
79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    AddCommand (const char *name,
80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                const lldb::CommandObjectSP &cmd_sp,
81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                bool can_replace);
82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    bool
84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    AddUserCommand (std::string name,
85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    const lldb::CommandObjectSP &cmd_sp,
86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    bool can_replace);
87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lldb::CommandObjectSP
89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    GetCommandSPExact (const char *cmd,
90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                       bool include_aliases);
91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    CommandObject *
93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    GetCommandObjectExact (const char *cmd_cstr,
94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                           bool include_aliases);
95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    CommandObject *
97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    GetCommandObject (const char *cmd,
98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                      StringList *matches = NULL);
99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    bool
101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    CommandExists (const char *cmd);
102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    bool
104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    AliasExists (const char *cmd);
105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    bool
107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    UserCommandExists (const char *cmd);
108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    void
110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    AddAlias (const char *alias_name,
111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              lldb::CommandObjectSP& command_obj_sp);
112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    bool
114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    RemoveAlias (const char *alias_name);
115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    bool
117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    RemoveUser (const char *alias_name);
118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    void
120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    RemoveAllUser ()
121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    {
122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        m_user_dict.clear();
123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    OptionArgVectorSP
126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    GetAliasOptions (const char *alias_name);
127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    bool
130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ProcessAliasOptionsArgs (lldb::CommandObjectSP &cmd_obj_sp,
131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                             const char *options_args,
132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                             OptionArgVectorSP &option_arg_vector_sp);
133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    void
135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    RemoveAliasOptions (const char *alias_name);
136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    void
138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    AddOrReplaceAliasOptions (const char *alias_name,
139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                              OptionArgVectorSP &option_arg_vector_sp);
140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    CommandObject *
142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    BuildAliasResult (const char *alias_name,
143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                      std::string &raw_input_string,
144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                      std::string &alias_result,
145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                      CommandReturnObject &result);
146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    bool
148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    HandleCommand (const char *command_line,
149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                   bool add_to_history,
150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                   CommandReturnObject &result,
151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                   ExecutionContext *override_context = NULL,
152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                   bool repeat_on_empty_command = true,
153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                   bool no_context_switching = false);
154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    //------------------------------------------------------------------
156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /// Execute a list of commands in sequence.
157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ///
158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /// @param[in] commands
159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ///    The list of commands to execute.
160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /// @param[in/out] context
161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ///    The execution context in which to run the commands.  Can be NULL in which case the default
162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ///    context will be used.
163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /// @param[in] stop_on_continue
164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ///    If \b true execution will end on the first command that causes the process in the
165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ///    execution context to continue.  If \false, we won't check the execution status.
166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /// @param[in] stop_on_error
167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ///    If \b true execution will end on the first command that causes an error.
168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /// @param[in] echo_commands
169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ///    If \b true echo the command before executing it.  If \false, execute silently.
170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /// @param[in] print_results
171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ///    If \b true print the results of the command after executing it.  If \false, execute silently.
172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /// @param[out] result
173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ///    This is marked as succeeding with no output if all commands execute safely,
174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ///    and failed with some explanation if we aborted executing the commands at some point.
175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    //------------------------------------------------------------------
176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    void
177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    HandleCommands (const StringList &commands,
178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    ExecutionContext *context,
179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    bool stop_on_continue,
180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    bool stop_on_error,
181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    bool echo_commands,
182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    bool print_results,
183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    CommandReturnObject &result);
184
185    //------------------------------------------------------------------
186    /// Execute a list of commands from a file.
187    ///
188    /// @param[in] file
189    ///    The file from which to read in commands.
190    /// @param[in/out] context
191    ///    The execution context in which to run the commands.  Can be NULL in which case the default
192    ///    context will be used.
193    /// @param[in] stop_on_continue
194    ///    If \b true execution will end on the first command that causes the process in the
195    ///    execution context to continue.  If \false, we won't check the execution status.
196    /// @param[in] stop_on_error
197    ///    If \b true execution will end on the first command that causes an error.
198    /// @param[in] echo_commands
199    ///    If \b true echo the command before executing it.  If \false, execute silently.
200    /// @param[in] print_results
201    ///    If \b true print the results of the command after executing it.  If \false, execute silently.
202    /// @param[out] result
203    ///    This is marked as succeeding with no output if all commands execute safely,
204    ///    and failed with some explanation if we aborted executing the commands at some point.
205    //------------------------------------------------------------------
206    void
207    HandleCommandsFromFile (FileSpec &file,
208                            ExecutionContext *context,
209                            bool stop_on_continue,
210                            bool stop_on_error,
211                            bool echo_commands,
212                            bool print_results,
213                            CommandReturnObject &result);
214
215    CommandObject *
216    GetCommandObjectForCommand (std::string &command_line);
217
218    // This handles command line completion.  You are given a pointer to the command string buffer, to the current cursor,
219    // and to the end of the string (in case it is not NULL terminated).
220    // You also passed in an StringList object to fill with the returns.
221    // The first element of the array will be filled with the string that you would need to insert at
222    // the cursor point to complete the cursor point to the longest common matching prefix.
223    // If you want to limit the number of elements returned, set max_return_elements to the number of elements
224    // you want returned.  Otherwise set max_return_elements to -1.
225    // If you want to start some way into the match list, then set match_start_point to the desired start
226    // point.
227    // Returns:
228    // -1 if the completion character should be inserted
229    // -2 if the entire command line should be deleted and replaced with matches.GetStringAtIndex(0)
230    // INT_MAX if the number of matches is > max_return_elements, but it is expensive to compute.
231    // Otherwise, returns the number of matches.
232    //
233    // FIXME: Only max_return_elements == -1 is supported at present.
234
235    int
236    HandleCompletion (const char *current_line,
237                      const char *cursor,
238                      const char *last_char,
239                      int match_start_point,
240                      int max_return_elements,
241                      StringList &matches);
242
243    // This version just returns matches, and doesn't compute the substring.  It is here so the
244    // Help command can call it for the first argument.
245    // word_complete tells whether a the completions are considered a "complete" response (so the
246    // completer should complete the quote & put a space after the word.
247
248    int
249    HandleCompletionMatches (Args &input,
250                             int &cursor_index,
251                             int &cursor_char_position,
252                             int match_start_point,
253                             int max_return_elements,
254                             bool &word_complete,
255                             StringList &matches);
256
257
258    int
259    GetCommandNamesMatchingPartialString (const char *cmd_cstr,
260                                          bool include_aliases,
261                                          StringList &matches);
262
263    void
264    GetHelp (CommandReturnObject &result,
265             uint32_t types = eCommandTypesAllThem);
266
267    void
268    GetAliasHelp (const char *alias_name,
269                  const char *command_name,
270                  StreamString &help_string);
271
272    void
273    OutputFormattedHelpText (Stream &stream,
274                             const char *command_word,
275                             const char *separator,
276                             const char *help_text,
277                             uint32_t max_word_len);
278
279    // this mimics OutputFormattedHelpText but it does perform a much simpler
280    // formatting, basically ensuring line alignment. This is only good if you have
281    // some complicated layout for your help text and want as little help as reasonable
282    // in properly displaying it. Most of the times, you simply want to type some text
283    // and have it printed in a reasonable way on screen. If so, use OutputFormattedHelpText
284    void
285    OutputHelpText (Stream &stream,
286                             const char *command_word,
287                             const char *separator,
288                             const char *help_text,
289                             uint32_t max_word_len);
290
291    Debugger &
292    GetDebugger ()
293    {
294        return m_debugger;
295    }
296
297    ExecutionContext &
298    GetExecutionContext()
299    {
300        return m_exe_ctx;
301    }
302
303    void
304    UpdateExecutionContext (ExecutionContext *override_context);
305
306    lldb::PlatformSP
307    GetPlatform (bool prefer_target_platform);
308
309    const char *
310    ProcessEmbeddedScriptCommands (const char *arg);
311
312    const char *
313    GetPrompt ();
314
315    void
316    SetPrompt (const char *);
317
318    bool Confirm (const char *message, bool default_answer);
319
320    static size_t
321    GetConfirmationInputReaderCallback (void *baton,
322                                        InputReader &reader,
323                                        lldb::InputReaderAction action,
324                                        const char *bytes,
325                                        size_t bytes_len);
326
327    void
328    LoadCommandDictionary ();
329
330    void
331    Initialize ();
332
333    void
334    CrossRegisterCommand (const char *dest_cmd,
335                          const char *object_type);
336
337    void
338    SetScriptLanguage (lldb::ScriptLanguage lang);
339
340
341    bool
342    HasCommands ();
343
344    bool
345    HasAliases ();
346
347    bool
348    HasUserCommands ();
349
350    bool
351    HasAliasOptions ();
352
353    void
354    BuildAliasCommandArgs (CommandObject *alias_cmd_obj,
355                           const char *alias_name,
356                           Args &cmd_args,
357                           std::string &raw_input_string,
358                           CommandReturnObject &result);
359
360    int
361    GetOptionArgumentPosition (const char *in_string);
362
363    ScriptInterpreter *
364    GetScriptInterpreter ();
365
366    void
367    SkipLLDBInitFiles (bool skip_lldbinit_files)
368    {
369        m_skip_lldbinit_files = skip_lldbinit_files;
370    }
371
372    void
373    SkipAppInitFiles (bool skip_app_init_files)
374    {
375        m_skip_app_init_files = m_skip_lldbinit_files;
376    }
377
378    bool
379    GetSynchronous ();
380
381    void
382    DumpHistory (Stream &stream, uint32_t count) const;
383
384    void
385    DumpHistory (Stream &stream, uint32_t start, uint32_t end) const;
386
387    const char *
388    FindHistoryString (const char *input_str) const;
389
390
391#ifndef SWIG
392    void
393    AddLogChannel (const char *name,
394                   const Log::Callbacks &log_callbacks);
395
396    bool
397    GetLogChannelCallbacks (const char *channel,
398                            Log::Callbacks &log_callbacks);
399
400    bool
401    RemoveLogChannel (const char *name);
402#endif
403
404    size_t
405    FindLongestCommandWord (CommandObject::CommandMap &dict);
406
407    void
408    FindCommandsForApropos (const char *word,
409                            StringList &commands_found,
410                            StringList &commands_help);
411
412    void
413    AproposAllSubCommands (CommandObject *cmd_obj,
414                           const char *prefix,
415                           const char *search_word,
416                           StringList &commands_found,
417                           StringList &commands_help);
418
419    bool
420    GetBatchCommandMode () { return m_batch_command_mode; }
421
422    void
423    SetBatchCommandMode (bool value) { m_batch_command_mode = value; }
424
425    void
426    ChildrenTruncated()
427    {
428        if (m_truncation_warning == eNoTruncation)
429            m_truncation_warning = eUnwarnedTruncation;
430    }
431
432    bool
433    TruncationWarningNecessary()
434    {
435        return (m_truncation_warning == eUnwarnedTruncation);
436    }
437
438    void
439    TruncationWarningGiven()
440    {
441        m_truncation_warning = eWarnedTruncation;
442    }
443
444    const char *
445    TruncationWarningText()
446    {
447        return "*** Some of your variables have more members than the debugger will show by default. To show all of them, you can either use the --show-all-children option to %s or raise the limit by changing the target.max-children-count setting.\n";
448    }
449
450protected:
451    friend class Debugger;
452
453    void
454    SetSynchronous (bool value);
455
456    lldb::CommandObjectSP
457    GetCommandSP (const char *cmd, bool include_aliases = true, bool exact = true, StringList *matches = NULL);
458
459private:
460
461    Error
462    PreprocessCommand (std::string &command);
463
464    Debugger &m_debugger;                       // The debugger session that this interpreter is associated with
465    ExecutionContext m_exe_ctx;                 // The current execution context to use when handling commands
466    bool m_synchronous_execution;
467    bool m_skip_lldbinit_files;
468    bool m_skip_app_init_files;
469    CommandObject::CommandMap m_command_dict;   // Stores basic built-in commands (they cannot be deleted, removed or overwritten).
470    CommandObject::CommandMap m_alias_dict;     // Stores user aliases/abbreviations for commands
471    CommandObject::CommandMap m_user_dict;      // Stores user-defined commands
472    OptionArgMap m_alias_options;               // Stores any options (with or without arguments) that go with any alias.
473    std::vector<std::string> m_command_history;
474    std::string m_repeat_command;               // Stores the command that will be executed for an empty command string.
475    std::auto_ptr<ScriptInterpreter> m_script_interpreter_ap;
476    char m_comment_char;
477    char m_repeat_char;
478    bool m_batch_command_mode;
479    ChildrenTruncatedWarningStatus m_truncation_warning;    // Whether we truncated children and whether the user has been told
480
481};
482
483
484} // namespace lldb_private
485
486#endif  // liblldb_CommandInterpreter_h_
487