SBFunction.i revision 2a94be1aa46c90d6749d8c96ed396d5ebde452cd
1//===-- SWIG Interface for SBFunction ---------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10namespace lldb {
11
12%feature("docstring",
13"Represents a generic function, which can be inlined or not.
14
15For example (from test/lldbutil.py, but slightly modified for doc purpose),
16
17        ...
18
19        frame = thread.GetFrameAtIndex(i)
20        addr = frame.GetPCAddress()
21        load_addr = addr.GetLoadAddress(target)
22        function = frame.GetFunction()
23        mod_name = frame.GetModule().GetFileSpec().GetFilename()
24
25        if not function:
26            # No debug info for 'function'.
27            symbol = frame.GetSymbol()
28            file_addr = addr.GetFileAddress()
29            start_addr = symbol.GetStartAddress().GetFileAddress()
30            symbol_name = symbol.GetName()
31            symbol_offset = file_addr - start_addr
32            print >> output, '  frame #{num}: {addr:#016x} {mod}`{symbol} + {offset}'.format(
33                num=i, addr=load_addr, mod=mod_name, symbol=symbol_name, offset=symbol_offset)
34        else:
35            # Debug info is available for 'function'.
36            func_name = frame.GetFunctionName()
37            file_name = frame.GetLineEntry().GetFileSpec().GetFilename()
38            line_num = frame.GetLineEntry().GetLine()
39            print >> output, '  frame #{num}: {addr:#016x} {mod}`{func} at {file}:{line} {args}'.format(
40                num=i, addr=load_addr, mod=mod_name,
41                func='%s [inlined]' % func_name] if frame.IsInlined() else func_name,
42                file=file_name, line=line_num, args=get_args_as_string(frame, showFuncName=False))
43
44        ...
45") SBFunction;
46class SBFunction
47{
48public:
49
50    SBFunction ();
51
52    SBFunction (const lldb::SBFunction &rhs);
53
54    ~SBFunction ();
55
56    bool
57    IsValid () const;
58
59    const char *
60    GetName() const;
61
62    const char *
63    GetMangledName () const;
64
65    lldb::SBInstructionList
66    GetInstructions (lldb::SBTarget target);
67
68    lldb::SBAddress
69    GetStartAddress ();
70
71    lldb::SBAddress
72    GetEndAddress ();
73
74    uint32_t
75    GetPrologueByteSize ();
76
77    lldb::SBType
78    GetType ();
79
80    lldb::SBBlock
81    GetBlock ();
82
83    bool
84    GetDescription (lldb::SBStream &description);
85
86    %pythoncode %{
87        def get_instructions_from_current_target (self):
88            return self.GetInstructions (target)
89
90        __swig_getmethods__["addr"] = GetStartAddress
91        if _newclass: addr = property(GetStartAddress, None, doc='''A read only property that returns an lldb object that represents the start address (lldb.SBAddress) for this function.''')
92
93        __swig_getmethods__["end_addr"] = GetEndAddress
94        if _newclass: end_addr = property(GetEndAddress, None, doc='''A read only property that returns an lldb object that represents the end address (lldb.SBAddress) for this function.''')
95
96        __swig_getmethods__["block"] = GetBlock
97        if _newclass: block = property(GetBlock, None, doc='''A read only property that returns an lldb object that represents the top level lexical block (lldb.SBBlock) for this function.''')
98
99        __swig_getmethods__["instructions"] = get_instructions_from_current_target
100        if _newclass: instructions = property(get_instructions_from_current_target, None, doc='''A read only property that returns an lldb object that represents the instructions (lldb.SBInstructionList) for this function.''')
101
102        __swig_getmethods__["mangled"] = GetMangledName
103        if _newclass: mangled = property(GetMangledName, None, doc='''A read only property that returns the mangled (linkage) name for this function as a string.''')
104
105        __swig_getmethods__["name"] = GetName
106        if _newclass: name = property(GetName, None, doc='''A read only property that returns the name for this function as a string.''')
107
108        __swig_getmethods__["prologue_size"] = GetPrologueByteSize
109        if _newclass: prologue_size = property(GetPrologueByteSize, None, doc='''A read only property that returns the size in bytes of the prologue instructions as an unsigned integer.''')
110
111        __swig_getmethods__["type"] = GetType
112        if _newclass: type = property(GetType, None, doc='''A read only property that returns an lldb object that represents the return type (lldb.SBType) for this function.''')
113    %}
114
115};
116
117} // namespace lldb
118