1//===-- SWIG Interface for SBCommandInterpreter -----------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9namespace lldb {
10
11%feature("docstring",
12"SBCommandInterpreter handles/interprets commands for lldb.  You get the
13command interpreter from the SBDebugger instance. For example (from test/
14python_api/interpreter/TestCommandInterpreterAPI.py),
15
16    def command_interpreter_api(self):
17        '''Test the SBCommandInterpreter APIs.'''
18        exe = os.path.join(os.getcwd(), 'a.out')
19
20        # Create a target by the debugger.
21        target = self.dbg.CreateTarget(exe)
22        self.assertTrue(target, VALID_TARGET)
23
24        # Retrieve the associated command interpreter from our debugger.
25        ci = self.dbg.GetCommandInterpreter()
26        self.assertTrue(ci, VALID_COMMAND_INTERPRETER)
27
28        # Exercise some APIs....
29
30        self.assertTrue(ci.HasCommands())
31        self.assertTrue(ci.HasAliases())
32        self.assertTrue(ci.HasAliasOptions())
33        self.assertTrue(ci.CommandExists('breakpoint'))
34        self.assertTrue(ci.CommandExists('target'))
35        self.assertTrue(ci.CommandExists('platform'))
36        self.assertTrue(ci.AliasExists('file'))
37        self.assertTrue(ci.AliasExists('run'))
38        self.assertTrue(ci.AliasExists('bt'))
39
40        res = lldb.SBCommandReturnObject()
41        ci.HandleCommand('breakpoint set -f main.c -l %d' % self.line, res)
42        self.assertTrue(res.Succeeded())
43        ci.HandleCommand('process launch', res)
44        self.assertTrue(res.Succeeded())
45
46        process = ci.GetProcess()
47        self.assertTrue(process)
48
49        ...
50
51The HandleCommand() instance method takes two args: the command string and
52an SBCommandReturnObject instance which encapsulates the result of command
53execution.") SBCommandInterpreter;
54class SBCommandInterpreter
55{
56public:
57    enum
58    {
59        eBroadcastBitThreadShouldExit       = (1 << 0),
60        eBroadcastBitResetPrompt            = (1 << 1),
61        eBroadcastBitQuitCommandReceived    = (1 << 2),           // User entered quit
62        eBroadcastBitAsynchronousOutputData = (1 << 3),
63        eBroadcastBitAsynchronousErrorData  = (1 << 4)
64    };
65
66    SBCommandInterpreter (const lldb::SBCommandInterpreter &rhs);
67
68    ~SBCommandInterpreter ();
69
70    static const char *
71    GetArgumentTypeAsCString (const lldb::CommandArgumentType arg_type);
72
73    static const char *
74    GetArgumentDescriptionAsCString (const lldb::CommandArgumentType arg_type);
75
76    static bool
77    EventIsCommandInterpreterEvent (const lldb::SBEvent &event);
78
79    bool
80    IsValid() const;
81
82    explicit operator bool() const;
83
84    const char *
85    GetIOHandlerControlSequence(char ch);
86
87    bool
88    GetPromptOnQuit();
89
90    void
91    SetPromptOnQuit(bool b);
92
93    void
94    AllowExitCodeOnQuit(bool b);
95
96    bool
97    HasCustomQuitExitCode();
98
99    int
100    GetQuitStatus();
101
102    void
103    ResolveCommand(const char *command_line, SBCommandReturnObject &result);
104
105    bool
106    CommandExists (const char *cmd);
107
108    bool
109    AliasExists (const char *cmd);
110
111    lldb::SBBroadcaster
112    GetBroadcaster ();
113
114    static const char *
115    GetBroadcasterClass ();
116
117    bool
118    HasCommands ();
119
120    bool
121    HasAliases ();
122
123    bool
124    HasAliasOptions ();
125
126    lldb::SBProcess
127    GetProcess ();
128
129    lldb::SBDebugger
130    GetDebugger ();
131
132    void
133    SourceInitFileInHomeDirectory (lldb::SBCommandReturnObject &result);
134
135    void
136    SourceInitFileInCurrentWorkingDirectory (lldb::SBCommandReturnObject &result);
137
138    lldb::ReturnStatus
139    HandleCommand (const char *command_line, lldb::SBCommandReturnObject &result, bool add_to_history = false);
140
141    lldb::ReturnStatus
142    HandleCommand (const char *command_line, SBExecutionContext &exe_ctx, SBCommandReturnObject &result, bool add_to_history = false);
143
144    void
145    HandleCommandsFromFile (lldb::SBFileSpec &file,
146                            lldb::SBExecutionContext &override_context,
147                            lldb::SBCommandInterpreterRunOptions &options,
148                            lldb::SBCommandReturnObject result);
149
150    int
151    HandleCompletion (const char *current_line,
152                      uint32_t cursor_pos,
153                      int match_start_point,
154                      int max_return_elements,
155                      lldb::SBStringList &matches);
156
157    int
158    HandleCompletionWithDescriptions (const char *current_line,
159                                      uint32_t cursor_pos,
160                                      int match_start_point,
161                                      int max_return_elements,
162                                      lldb::SBStringList &matches,
163                                      lldb::SBStringList &descriptions);
164    bool
165    IsActive ();
166
167    bool
168    WasInterrupted () const;
169};
170
171} // namespace lldb
172