124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- CommandInterpreter.h ------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_CommandInterpreter_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_CommandInterpreter_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h"
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Broadcaster.h"
1963094e0bb161580564954dee512955c1c79d3476Greg Clayton#include "lldb/Core/Debugger.h"
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Log.h"
21b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata#include "lldb/Interpreter/CommandHistory.h"
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandObject.h"
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/ScriptInterpreter.h"
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Event.h"
2584cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham#include "lldb/Interpreter/Args.h"
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/StringList.h"
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
309f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Claytonclass CommandInterpreter :
319f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton    public Broadcaster,
329f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton    public Properties
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef std::map<std::string, OptionArgVectorSP> OptionArgMap;
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    enum
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        eBroadcastBitThreadShouldExit       = (1 << 0),
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        eBroadcastBitResetPrompt            = (1 << 1),
414a348081030cdd2af758fddc869518357d9befd3Caroline Tice        eBroadcastBitQuitCommandReceived    = (1 << 2),   // User entered quit
424a348081030cdd2af758fddc869518357d9befd3Caroline Tice        eBroadcastBitAsynchronousOutputData = (1 << 3),
434a348081030cdd2af758fddc869518357d9befd3Caroline Tice        eBroadcastBitAsynchronousErrorData  = (1 << 4)
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    };
45db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata
46db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata    enum ChildrenTruncatedWarningStatus // tristate boolean to manage children truncation warning
47db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata    {
48db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata        eNoTruncation = 0, // never truncated
49db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata        eUnwarnedTruncation = 1, // truncated but did not notify
50db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata        eWarnedTruncation = 2 // truncated and notified
51db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata    };
526b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata
536b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata    enum CommandTypes
546b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata    {
556b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata        eCommandTypesBuiltin = 0x0001,  // native commands such as "frame"
566b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata        eCommandTypesUserDef = 0x0002,  // scripted commands
576b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata        eCommandTypesAliases = 0x0004,  // aliases such as "po"
586b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata        eCommandTypesAllThem = 0xFFFF   // all commands
596b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata    };
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
615a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    // These two functions fill out the Broadcaster interface:
625a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham
635a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    static ConstString &GetStaticBroadcasterClass ();
645a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham
655a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    virtual ConstString &GetBroadcasterClass() const
665a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    {
675a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham        return GetStaticBroadcasterClass();
685a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    }
695a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
71b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    SourceInitFile (bool in_cwd,
72b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                    CommandReturnObject &result);
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7463094e0bb161580564954dee512955c1c79d3476Greg Clayton    CommandInterpreter (Debugger &debugger,
7563094e0bb161580564954dee512955c1c79d3476Greg Clayton                        lldb::ScriptLanguage script_language,
7663094e0bb161580564954dee512955c1c79d3476Greg Clayton                        bool synchronous_execution);
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~CommandInterpreter ();
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
81d12aeab33bab559e138307f599077da3918a3238Greg Clayton    bool
82d12aeab33bab559e138307f599077da3918a3238Greg Clayton    AddCommand (const char *name,
83d12aeab33bab559e138307f599077da3918a3238Greg Clayton                const lldb::CommandObjectSP &cmd_sp,
84d12aeab33bab559e138307f599077da3918a3238Greg Clayton                bool can_replace);
85d12aeab33bab559e138307f599077da3918a3238Greg Clayton
866b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata    bool
876010acef0cee54e044d4e7e472ef3d99e13c5045Enrico Granata    AddUserCommand (std::string name,
886b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata                    const lldb::CommandObjectSP &cmd_sp,
896b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata                    bool can_replace);
906b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::CommandObjectSP
92b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    GetCommandSPExact (const char *cmd,
93b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                       bool include_aliases);
94d40f8a68b49a43264ff41a0f0ef51bef6372e8b3Jim Ingham
95d40f8a68b49a43264ff41a0f0ef51bef6372e8b3Jim Ingham    CommandObject *
96b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    GetCommandObjectExact (const char *cmd_cstr,
97b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                           bool include_aliases);
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CommandObject *
100b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    GetCommandObject (const char *cmd,
101b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                      StringList *matches = NULL);
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CommandExists (const char *cmd);
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    AliasExists (const char *cmd);
10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    UserCommandExists (const char *cmd);
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
113b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    AddAlias (const char *alias_name,
114b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton              lldb::CommandObjectSP& command_obj_sp);
11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    RemoveAlias (const char *alias_name);
1181d4812cbb71af9e05250a4ffbcda4236275c82b4Jim Ingham
1191d4812cbb71af9e05250a4ffbcda4236275c82b4Jim Ingham    bool
1201d4812cbb71af9e05250a4ffbcda4236275c82b4Jim Ingham    GetAliasFullName (const char *cmd, std::string &full_name);
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    RemoveUser (const char *alias_name);
1246b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata
1256b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata    void
1266b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata    RemoveAllUser ()
1276b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata    {
1286b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata        m_user_dict.clear();
1296b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata    }
13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    OptionArgVectorSP
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetAliasOptions (const char *alias_name);
13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1345ddbe214153f60f8ab62ba98dea089a21f1779f3Caroline Tice
1355ddbe214153f60f8ab62ba98dea089a21f1779f3Caroline Tice    bool
1365ddbe214153f60f8ab62ba98dea089a21f1779f3Caroline Tice    ProcessAliasOptionsArgs (lldb::CommandObjectSP &cmd_obj_sp,
1375ddbe214153f60f8ab62ba98dea089a21f1779f3Caroline Tice                             const char *options_args,
1385ddbe214153f60f8ab62ba98dea089a21f1779f3Caroline Tice                             OptionArgVectorSP &option_arg_vector_sp);
1395ddbe214153f60f8ab62ba98dea089a21f1779f3Caroline Tice
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    RemoveAliasOptions (const char *alias_name);
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
144b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    AddOrReplaceAliasOptions (const char *alias_name,
145b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                              OptionArgVectorSP &option_arg_vector_sp);
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1477268b4c8a444a59d42f4d765bd7292e62f41a651Greg Clayton    CommandObject *
148b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    BuildAliasResult (const char *alias_name,
149b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                      std::string &raw_input_string,
150b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                      std::string &alias_result,
151b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                      CommandReturnObject &result);
152e0da7a5ba288669df3a4d51059aa0f78f729c6b1Caroline Tice
153e0da7a5ba288669df3a4d51059aa0f78f729c6b1Caroline Tice    bool
15463094e0bb161580564954dee512955c1c79d3476Greg Clayton    HandleCommand (const char *command_line,
15501bc2d493b48e4904e3241a7768e18fdd9bb6835Enrico Granata                   LazyBool add_to_history,
15663094e0bb161580564954dee512955c1c79d3476Greg Clayton                   CommandReturnObject &result,
157949d5acde6684b5824a26034457410cdf3823dfeJim Ingham                   ExecutionContext *override_context = NULL,
1588bdf57cfc246358ab65b2d36ec2b8462e8d36e54Johnny Chen                   bool repeat_on_empty_command = true,
1598bdf57cfc246358ab65b2d36ec2b8462e8d36e54Johnny Chen                   bool no_context_switching = false);
160949d5acde6684b5824a26034457410cdf3823dfeJim Ingham
161949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    //------------------------------------------------------------------
162949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    /// Execute a list of commands in sequence.
163949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///
164949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    /// @param[in] commands
165949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    The list of commands to execute.
166949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    /// @param[in/out] context
167949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    The execution context in which to run the commands.  Can be NULL in which case the default
168949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    context will be used.
169949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    /// @param[in] stop_on_continue
170949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    If \b true execution will end on the first command that causes the process in the
171949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    execution context to continue.  If \false, we won't check the execution status.
172949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    /// @param[in] stop_on_error
173949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    If \b true execution will end on the first command that causes an error.
174949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    /// @param[in] echo_commands
175949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    If \b true echo the command before executing it.  If \false, execute silently.
176949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    /// @param[in] print_results
177949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    If \b true print the results of the command after executing it.  If \false, execute silently.
178949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    /// @param[out] result
179949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    This is marked as succeeding with no output if all commands execute safely,
180949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    and failed with some explanation if we aborted executing the commands at some point.
181949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    //------------------------------------------------------------------
182949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    void
183a4fede31869663e889d67ace3d07dc5d3e4ea2b8Jim Ingham    HandleCommands (const StringList &commands,
184949d5acde6684b5824a26034457410cdf3823dfeJim Ingham                    ExecutionContext *context,
185949d5acde6684b5824a26034457410cdf3823dfeJim Ingham                    bool stop_on_continue,
186949d5acde6684b5824a26034457410cdf3823dfeJim Ingham                    bool stop_on_error,
187949d5acde6684b5824a26034457410cdf3823dfeJim Ingham                    bool echo_commands,
18801bc2d493b48e4904e3241a7768e18fdd9bb6835Enrico Granata                    bool print_results,
18901bc2d493b48e4904e3241a7768e18fdd9bb6835Enrico Granata                    LazyBool add_to_history,
190949d5acde6684b5824a26034457410cdf3823dfeJim Ingham                    CommandReturnObject &result);
191949d5acde6684b5824a26034457410cdf3823dfeJim Ingham
192949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    //------------------------------------------------------------------
193949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    /// Execute a list of commands from a file.
194949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///
195949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    /// @param[in] file
196949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    The file from which to read in commands.
197949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    /// @param[in/out] context
198949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    The execution context in which to run the commands.  Can be NULL in which case the default
199949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    context will be used.
200949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    /// @param[in] stop_on_continue
201949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    If \b true execution will end on the first command that causes the process in the
202949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    execution context to continue.  If \false, we won't check the execution status.
203949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    /// @param[in] stop_on_error
204949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    If \b true execution will end on the first command that causes an error.
205949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    /// @param[in] echo_commands
206949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    If \b true echo the command before executing it.  If \false, execute silently.
207949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    /// @param[in] print_results
208949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    If \b true print the results of the command after executing it.  If \false, execute silently.
209949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    /// @param[out] result
210949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    This is marked as succeeding with no output if all commands execute safely,
211949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    ///    and failed with some explanation if we aborted executing the commands at some point.
212949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    //------------------------------------------------------------------
213949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    void
214949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    HandleCommandsFromFile (FileSpec &file,
215b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                            ExecutionContext *context,
216b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                            bool stop_on_continue,
217b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                            bool stop_on_error,
218b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                            bool echo_commands,
21901bc2d493b48e4904e3241a7768e18fdd9bb6835Enrico Granata                            bool print_results,
22001bc2d493b48e4904e3241a7768e18fdd9bb6835Enrico Granata                            LazyBool add_to_history,
221b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                            CommandReturnObject &result);
22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
223e0da7a5ba288669df3a4d51059aa0f78f729c6b1Caroline Tice    CommandObject *
224e0da7a5ba288669df3a4d51059aa0f78f729c6b1Caroline Tice    GetCommandObjectForCommand (std::string &command_line);
225e0da7a5ba288669df3a4d51059aa0f78f729c6b1Caroline Tice
22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // This handles command line completion.  You are given a pointer to the command string buffer, to the current cursor,
22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // and to the end of the string (in case it is not NULL terminated).
22803c8ee5aeafcd6c43f10002a4f8096af01780f86Jim Ingham    // You also passed in an StringList object to fill with the returns.
22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // The first element of the array will be filled with the string that you would need to insert at
23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // the cursor point to complete the cursor point to the longest common matching prefix.
23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // If you want to limit the number of elements returned, set max_return_elements to the number of elements
23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // you want returned.  Otherwise set max_return_elements to -1.
23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // If you want to start some way into the match list, then set match_start_point to the desired start
23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // point.
2356247dbee41ec51e9a082df7e86269c0f47f28160Jim Ingham    // Returns:
2366247dbee41ec51e9a082df7e86269c0f47f28160Jim Ingham    // -1 if the completion character should be inserted
2376247dbee41ec51e9a082df7e86269c0f47f28160Jim Ingham    // -2 if the entire command line should be deleted and replaced with matches.GetStringAtIndex(0)
23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // INT_MAX if the number of matches is > max_return_elements, but it is expensive to compute.
2396247dbee41ec51e9a082df7e86269c0f47f28160Jim Ingham    // Otherwise, returns the number of matches.
24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //
24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // FIXME: Only max_return_elements == -1 is supported at present.
24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int
24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    HandleCompletion (const char *current_line,
245b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                      const char *cursor,
246b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                      const char *last_char,
247b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                      int match_start_point,
248b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                      int max_return_elements,
249b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                      StringList &matches);
25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // This version just returns matches, and doesn't compute the substring.  It is here so the
25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Help command can call it for the first argument.
253802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham    // word_complete tells whether a the completions are considered a "complete" response (so the
254802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham    // completer should complete the quote & put a space after the word.
25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int
25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    HandleCompletionMatches (Args &input,
258b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                             int &cursor_index,
259b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                             int &cursor_char_position,
260b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                             int match_start_point,
261b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                             int max_return_elements,
262b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                             bool &word_complete,
263b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                             StringList &matches);
26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int
267b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    GetCommandNamesMatchingPartialString (const char *cmd_cstr,
268b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                                          bool include_aliases,
269b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                                          StringList &matches);
27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
2726b1596d81c34c6efb10ed51a3572d6b145b73f5bEnrico Granata    GetHelp (CommandReturnObject &result,
2731ac6d1f9200a875cc4f761e278d29658599431c0Enrico Granata             uint32_t types = eCommandTypesAllThem);
27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
276b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    GetAliasHelp (const char *alias_name,
277b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                  const char *command_name,
278b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                  StreamString &help_string);
27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    OutputFormattedHelpText (Stream &stream,
28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                             const char *command_word,
28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                             const char *separator,
28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                             const char *help_text,
28536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton                             size_t max_word_len);
2861bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata
2871bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata    // this mimics OutputFormattedHelpText but it does perform a much simpler
2881bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata    // formatting, basically ensuring line alignment. This is only good if you have
2891bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata    // some complicated layout for your help text and want as little help as reasonable
2901bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata    // in properly displaying it. Most of the times, you simply want to type some text
2911bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata    // and have it printed in a reasonable way on screen. If so, use OutputFormattedHelpText
2921bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata    void
2931bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata    OutputHelpText (Stream &stream,
29484da01332193aac7f3bba77d09afc1f7e3fb8dfaGreg Clayton                    const char *command_word,
29584da01332193aac7f3bba77d09afc1f7e3fb8dfaGreg Clayton                    const char *separator,
29684da01332193aac7f3bba77d09afc1f7e3fb8dfaGreg Clayton                    const char *help_text,
29784da01332193aac7f3bba77d09afc1f7e3fb8dfaGreg Clayton                    uint32_t max_word_len);
29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
29963094e0bb161580564954dee512955c1c79d3476Greg Clayton    Debugger &
30063094e0bb161580564954dee512955c1c79d3476Greg Clayton    GetDebugger ()
30163094e0bb161580564954dee512955c1c79d3476Greg Clayton    {
30263094e0bb161580564954dee512955c1c79d3476Greg Clayton        return m_debugger;
30363094e0bb161580564954dee512955c1c79d3476Greg Clayton    }
304b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton
305bcaf99a74367d464dd38011e26b9b4be56b503baGreg Clayton    ExecutionContext
306b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    GetExecutionContext()
307b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    {
308bcaf99a74367d464dd38011e26b9b4be56b503baGreg Clayton        return m_exe_ctx_ref.Lock();
309b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    }
310b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton
311b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    void
312b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    UpdateExecutionContext (ExecutionContext *override_context);
313b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton
314b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    lldb::PlatformSP
315b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    GetPlatform (bool prefer_target_platform);
31624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
31724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *
31824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ProcessEmbeddedScriptCommands (const char *arg);
31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
32024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *
32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPrompt ();
32224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
32324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
32424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetPrompt (const char *);
3255e16ef58a8bc2788be0ba03d8b2d0e9f3650fa5dJim Ingham
3265e16ef58a8bc2788be0ba03d8b2d0e9f3650fa5dJim Ingham    bool Confirm (const char *message, bool default_answer);
3275e16ef58a8bc2788be0ba03d8b2d0e9f3650fa5dJim Ingham
3285e16ef58a8bc2788be0ba03d8b2d0e9f3650fa5dJim Ingham    static size_t
3295e16ef58a8bc2788be0ba03d8b2d0e9f3650fa5dJim Ingham    GetConfirmationInputReaderCallback (void *baton,
3305e16ef58a8bc2788be0ba03d8b2d0e9f3650fa5dJim Ingham                                        InputReader &reader,
3315e16ef58a8bc2788be0ba03d8b2d0e9f3650fa5dJim Ingham                                        lldb::InputReaderAction action,
3325e16ef58a8bc2788be0ba03d8b2d0e9f3650fa5dJim Ingham                                        const char *bytes,
3335e16ef58a8bc2788be0ba03d8b2d0e9f3650fa5dJim Ingham                                        size_t bytes_len);
3345e16ef58a8bc2788be0ba03d8b2d0e9f3650fa5dJim Ingham
33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    LoadCommandDictionary ();
33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Initialize ();
34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
34224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetScriptLanguage (lldb::ScriptLanguage lang);
34324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
34424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
34624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    HasCommands ();
34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
34824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    HasAliases ();
35024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    HasUserCommands ();
35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
35524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    HasAliasOptions ();
35624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
35724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
358b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    BuildAliasCommandArgs (CommandObject *alias_cmd_obj,
359b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                           const char *alias_name,
360b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                           Args &cmd_args,
361b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                           std::string &raw_input_string,
362b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                           CommandReturnObject &result);
36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
36424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int
36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetOptionArgumentPosition (const char *in_string);
36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ScriptInterpreter *
368db05491da80820047dc218542c88ba0d9f08fc71Enrico Granata    GetScriptInterpreter (bool can_create = true);
36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
370887aa2898314218406275a34cbec30c11cd00acdGreg Clayton    void
371887aa2898314218406275a34cbec30c11cd00acdGreg Clayton    SkipLLDBInitFiles (bool skip_lldbinit_files)
372887aa2898314218406275a34cbec30c11cd00acdGreg Clayton    {
373887aa2898314218406275a34cbec30c11cd00acdGreg Clayton        m_skip_lldbinit_files = skip_lldbinit_files;
374887aa2898314218406275a34cbec30c11cd00acdGreg Clayton    }
375887aa2898314218406275a34cbec30c11cd00acdGreg Clayton
376574c3d63822cc7fd52bf6f6a94b6882fec4c8ce9Jim Ingham    void
377574c3d63822cc7fd52bf6f6a94b6882fec4c8ce9Jim Ingham    SkipAppInitFiles (bool skip_app_init_files)
378574c3d63822cc7fd52bf6f6a94b6882fec4c8ce9Jim Ingham    {
379574c3d63822cc7fd52bf6f6a94b6882fec4c8ce9Jim Ingham        m_skip_app_init_files = m_skip_lldbinit_files;
380574c3d63822cc7fd52bf6f6a94b6882fec4c8ce9Jim Ingham    }
381574c3d63822cc7fd52bf6f6a94b6882fec4c8ce9Jim Ingham
38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetSynchronous ();
3846247dbee41ec51e9a082df7e86269c0f47f28160Jim Ingham
38565124eac53b7a214906e8931be314e429bbbeb30Greg Clayton    size_t
38624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    FindLongestCommandWord (CommandObject::CommandMap &dict);
38724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
389b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    FindCommandsForApropos (const char *word,
390b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                            StringList &commands_found,
391589d3618411e8a757992482e4d0cb3cb79480f2eJim Ingham                            StringList &commands_help,
392589d3618411e8a757992482e4d0cb3cb79480f2eJim Ingham                            bool search_builtin_commands,
393589d3618411e8a757992482e4d0cb3cb79480f2eJim Ingham                            bool search_user_commands);
394892fadd1f1001d1082cd2edcf282fee0cba8ac87Caroline Tice
395892fadd1f1001d1082cd2edcf282fee0cba8ac87Caroline Tice    bool
396892fadd1f1001d1082cd2edcf282fee0cba8ac87Caroline Tice    GetBatchCommandMode () { return m_batch_command_mode; }
397892fadd1f1001d1082cd2edcf282fee0cba8ac87Caroline Tice
398892fadd1f1001d1082cd2edcf282fee0cba8ac87Caroline Tice    void
399892fadd1f1001d1082cd2edcf282fee0cba8ac87Caroline Tice    SetBatchCommandMode (bool value) { m_batch_command_mode = value; }
400db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata
401db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata    void
402b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata    ChildrenTruncated ()
403db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata    {
404db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata        if (m_truncation_warning == eNoTruncation)
405db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata            m_truncation_warning = eUnwarnedTruncation;
406db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata    }
407db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata
408db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata    bool
409b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata    TruncationWarningNecessary ()
410db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata    {
411db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata        return (m_truncation_warning == eUnwarnedTruncation);
412db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata    }
413db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata
414db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata    void
415b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata    TruncationWarningGiven ()
416db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata    {
417db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata        m_truncation_warning = eWarnedTruncation;
418db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata    }
419db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata
420db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata    const char *
421b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata    TruncationWarningText ()
422db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata    {
423db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata        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";
424db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata    }
4255a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham
426b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata    const CommandHistory&
427b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata    GetCommandHistory () const
428b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata    {
429b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata        return m_command_history;
430b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata    }
431b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata
432b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata    CommandHistory&
433b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata    GetCommandHistory ()
434b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata    {
435b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata        return m_command_history;
436b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata    }
437b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata
4389f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton    //------------------------------------------------------------------
4399f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton    // Properties
4409f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton    //------------------------------------------------------------------
4419f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton    bool
4429f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton    GetExpandRegexAliases () const;
4439f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton
444dcb36c76090fdbf52f020bdd3fada62e0cffcc8dEnrico Granata    bool
445dcb36c76090fdbf52f020bdd3fada62e0cffcc8dEnrico Granata    GetPromptOnQuit () const;
446dcb36c76090fdbf52f020bdd3fada62e0cffcc8dEnrico Granata
4476fefc3a3915bcaf899b9179c43b1b7b2f693b3adEnrico Granata    bool
4486fefc3a3915bcaf899b9179c43b1b7b2f693b3adEnrico Granata    GetStopCmdSourceOnError () const;
4496fefc3a3915bcaf899b9179c43b1b7b2f693b3adEnrico Granata
45024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
45124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class Debugger;
45224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
45324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
45424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetSynchronous (bool value);
45524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
456d40f8a68b49a43264ff41a0f0ef51bef6372e8b3Jim Ingham    lldb::CommandObjectSP
457d40f8a68b49a43264ff41a0f0ef51bef6372e8b3Jim Ingham    GetCommandSP (const char *cmd, bool include_aliases = true, bool exact = true, StringList *matches = NULL);
458d40f8a68b49a43264ff41a0f0ef51bef6372e8b3Jim Ingham
45924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
460f5c0c72346eb8137107dbee95b12efb700117c13Greg Clayton
461f5c0c72346eb8137107dbee95b12efb700117c13Greg Clayton    Error
462f5c0c72346eb8137107dbee95b12efb700117c13Greg Clayton    PreprocessCommand (std::string &command);
46324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
464b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    Debugger &m_debugger;                       // The debugger session that this interpreter is associated with
465bcaf99a74367d464dd38011e26b9b4be56b503baGreg Clayton    ExecutionContextRef m_exe_ctx_ref;          // The current execution context to use when handling commands
46624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool m_synchronous_execution;
467887aa2898314218406275a34cbec30c11cd00acdGreg Clayton    bool m_skip_lldbinit_files;
468574c3d63822cc7fd52bf6f6a94b6882fec4c8ce9Jim Ingham    bool m_skip_app_init_files;
469b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    CommandObject::CommandMap m_command_dict;   // Stores basic built-in commands (they cannot be deleted, removed or overwritten).
470b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    CommandObject::CommandMap m_alias_dict;     // Stores user aliases/abbreviations for commands
471b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    CommandObject::CommandMap m_user_dict;      // Stores user-defined commands
472b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    OptionArgMap m_alias_options;               // Stores any options (with or without arguments) that go with any alias.
473b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata    CommandHistory m_command_history;
474b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    std::string m_repeat_command;               // Stores the command that will be executed for an empty command string.
475102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    std::unique_ptr<ScriptInterpreter> m_script_interpreter_ap;
476949d5acde6684b5824a26034457410cdf3823dfeJim Ingham    char m_comment_char;
477892fadd1f1001d1082cd2edcf282fee0cba8ac87Caroline Tice    bool m_batch_command_mode;
478db64d95b32062acbf961019aa6c1025237d3145cEnrico Granata    ChildrenTruncatedWarningStatus m_truncation_warning;    // Whether we truncated children and whether the user has been told
47901bc2d493b48e4904e3241a7768e18fdd9bb6835Enrico Granata    uint32_t m_command_source_depth;
4805a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham
48124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
48224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
48324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
48424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
48524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
48624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_CommandInterpreter_h_
487