1//===-- SWIG Interface for SBSymbolContext ----------------------*- 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"A context object that provides access to core debugger entities.
13
14Many debugger functions require a context when doing lookups. This class
15provides a common structure that can be used as the result of a query that
16can contain a single result.
17
18For example,
19
20        exe = os.path.join(os.getcwd(), 'a.out')
21
22        # Create a target for the debugger.
23        target = self.dbg.CreateTarget(exe)
24
25        # Now create a breakpoint on main.c by name 'c'.
26        breakpoint = target.BreakpointCreateByName('c', 'a.out')
27
28        # Now launch the process, and do not stop at entry point.
29        process = target.LaunchSimple(None, None, os.getcwd())
30
31        # The inferior should stop on 'c'.
32        from lldbutil import get_stopped_thread
33        thread = get_stopped_thread(process, lldb.eStopReasonBreakpoint)
34        frame0 = thread.GetFrameAtIndex(0)
35
36        # Now get the SBSymbolContext from this frame.  We want everything. :-)
37        context = frame0.GetSymbolContext(lldb.eSymbolContextEverything)
38
39        # Get the module.
40        module = context.GetModule()
41        ...
42
43        # And the compile unit associated with the frame.
44        compileUnit = context.GetCompileUnit()
45        ...
46"
47) SBSymbolContext;
48class SBSymbolContext
49{
50public:
51    SBSymbolContext ();
52
53    SBSymbolContext (const lldb::SBSymbolContext& rhs);
54
55    ~SBSymbolContext ();
56
57    bool
58    IsValid () const;
59
60    explicit operator bool() const;
61
62    lldb::SBModule        GetModule ();
63    lldb::SBCompileUnit   GetCompileUnit ();
64    lldb::SBFunction      GetFunction ();
65    lldb::SBBlock         GetBlock ();
66    lldb::SBLineEntry     GetLineEntry ();
67    lldb::SBSymbol        GetSymbol ();
68
69    void SetModule      (lldb::SBModule module);
70    void SetCompileUnit (lldb::SBCompileUnit compile_unit);
71    void SetFunction    (lldb::SBFunction function);
72    void SetBlock       (lldb::SBBlock block);
73    void SetLineEntry   (lldb::SBLineEntry line_entry);
74    void SetSymbol      (lldb::SBSymbol symbol);
75
76    lldb::SBSymbolContext
77    GetParentOfInlinedScope (const lldb::SBAddress &curr_frame_pc,
78                             lldb::SBAddress &parent_frame_addr) const;
79
80
81    bool
82    GetDescription (lldb::SBStream &description);
83
84    STRING_EXTENSION(SBSymbolContext)
85
86#ifdef SWIGPYTHON
87    %pythoncode %{
88        module = property(GetModule, SetModule, doc='''A read/write property that allows the getting/setting of the module (lldb.SBModule) in this symbol context.''')
89        compile_unit = property(GetCompileUnit, SetCompileUnit, doc='''A read/write property that allows the getting/setting of the compile unit (lldb.SBCompileUnit) in this symbol context.''')
90        function = property(GetFunction, SetFunction, doc='''A read/write property that allows the getting/setting of the function (lldb.SBFunction) in this symbol context.''')
91        block = property(GetBlock, SetBlock, doc='''A read/write property that allows the getting/setting of the block (lldb.SBBlock) in this symbol context.''')
92        symbol = property(GetSymbol, SetSymbol, doc='''A read/write property that allows the getting/setting of the symbol (lldb.SBSymbol) in this symbol context.''')
93        line_entry = property(GetLineEntry, SetLineEntry, doc='''A read/write property that allows the getting/setting of the line entry (lldb.SBLineEntry) in this symbol context.''')
94    %}
95#endif
96
97};
98
99} // namespace lldb
100