15cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen//===-- SWIG Interface for SBCommandInterpreter -----------------*- C++ -*-===//
25cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen//
35cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen//                     The LLVM Compiler Infrastructure
45cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen//
55cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen// This file is distributed under the University of Illinois Open Source
65cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen// License. See LICENSE.TXT for details.
75cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen//
85cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen//===----------------------------------------------------------------------===//
95cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
105cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chennamespace lldb {
115cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
12dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen%feature("docstring",
13dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen"SBCommandInterpreter handles/interprets commands for lldb.  You get the
14dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chencommand interpreter from the SBDebugger instance. For example (from test/
15dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chenpython_api/interpreter/TestCommandInterpreterAPI.py),
16dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen
17dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen    def command_interpreter_api(self):
18dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        '''Test the SBCommandInterpreter APIs.'''
19dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        exe = os.path.join(os.getcwd(), 'a.out')
20dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen
21dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        # Create a target by the debugger.
22dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        target = self.dbg.CreateTarget(exe)
23dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        self.assertTrue(target, VALID_TARGET)
24dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen
25dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        # Retrieve the associated command interpreter from our debugger.
26dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        ci = self.dbg.GetCommandInterpreter()
27dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        self.assertTrue(ci, VALID_COMMAND_INTERPRETER)
28dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen
29dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        # Exercise some APIs....
30dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen
31dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        self.assertTrue(ci.HasCommands())
32dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        self.assertTrue(ci.HasAliases())
33dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        self.assertTrue(ci.HasAliasOptions())
34dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        self.assertTrue(ci.CommandExists('breakpoint'))
35dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        self.assertTrue(ci.CommandExists('target'))
36dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        self.assertTrue(ci.CommandExists('platform'))
37dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        self.assertTrue(ci.AliasExists('file'))
38dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        self.assertTrue(ci.AliasExists('run'))
39dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        self.assertTrue(ci.AliasExists('bt'))
40dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen
41dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        res = lldb.SBCommandReturnObject()
42dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        ci.HandleCommand('breakpoint set -f main.c -l %d' % self.line, res)
43dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        self.assertTrue(res.Succeeded())
44dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        ci.HandleCommand('process launch', res)
45dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        self.assertTrue(res.Succeeded())
46dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen
47dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        process = ci.GetProcess()
48dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        self.assertTrue(process)
49dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen
50dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen        ...
51dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen
52dca40970e2e9012a632112d48c73645ecb69cc0cJohnny ChenThe HandleCommand() instance method takes two args: the command string and
53dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chenan SBCommandReturnObject instance which encapsulates the result of command
54dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chenexecution.
55dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen") SBCommandInterpreter;
565cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chenclass SBCommandInterpreter
575cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen{
585cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chenpublic:
595cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    enum
605cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    {
615cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen        eBroadcastBitThreadShouldExit       = (1 << 0),
625cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen        eBroadcastBitResetPrompt            = (1 << 1),
635cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen        eBroadcastBitQuitCommandReceived    = (1 << 2),           // User entered quit
645cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen        eBroadcastBitAsynchronousOutputData = (1 << 3),
655cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen        eBroadcastBitAsynchronousErrorData  = (1 << 4)
665cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    };
675cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
685cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    SBCommandInterpreter (const lldb::SBCommandInterpreter &rhs);
695cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
705cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    ~SBCommandInterpreter ();
715cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
725cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    static const char *
735cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    GetArgumentTypeAsCString (const lldb::CommandArgumentType arg_type);
745cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
755cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    static const char *
765cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    GetArgumentDescriptionAsCString (const lldb::CommandArgumentType arg_type);
775cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
785cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    bool
795cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    IsValid() const;
805cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
815cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    bool
825cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    CommandExists (const char *cmd);
835cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
845cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    bool
855cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    AliasExists (const char *cmd);
865cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
875cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    lldb::SBBroadcaster
885cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    GetBroadcaster ();
895cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
905a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    static const char *
915a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    GetBroadcasterClass ();
925a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham
935cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    bool
945cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    HasCommands ();
955cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
965cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    bool
975cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    HasAliases ();
985cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
995cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    bool
1005cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    HasAliasOptions ();
1015cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
1025cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    lldb::SBProcess
1035cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    GetProcess ();
1046d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata
1056d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata    lldb::SBDebugger
1066d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata    GetDebugger ();
1075cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
1085cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    void
1095cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    SourceInitFileInHomeDirectory (lldb::SBCommandReturnObject &result);
1105cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
1115cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    void
1125cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    SourceInitFileInCurrentWorkingDirectory (lldb::SBCommandReturnObject &result);
1135cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
1145cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    lldb::ReturnStatus
1155cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    HandleCommand (const char *command_line, lldb::SBCommandReturnObject &result, bool add_to_history = false);
1165cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
1175cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    int
1185cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen    HandleCompletion (const char *current_line,
11903c8ee5aeafcd6c43f10002a4f8096af01780f86Jim Ingham                      uint32_t cursor_pos,
1205cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen                      int match_start_point,
1215cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen                      int max_return_elements,
1225cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen                      lldb::SBStringList &matches);
1235cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen};
1245cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen
1255cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen} // namespace lldb
126