1f509c5ec066599a3399fced39ea36996184939e8Enrico Granata//===-- TypeSummary.cpp ----------------------------------------*- C++ -*-===//
2f509c5ec066599a3399fced39ea36996184939e8Enrico Granata//
3f509c5ec066599a3399fced39ea36996184939e8Enrico Granata//                     The LLVM Compiler Infrastructure
4f509c5ec066599a3399fced39ea36996184939e8Enrico Granata//
5f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// This file is distributed under the University of Illinois Open Source
6f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// License. See LICENSE.TXT for details.
7f509c5ec066599a3399fced39ea36996184939e8Enrico Granata//
8f509c5ec066599a3399fced39ea36996184939e8Enrico Granata//===----------------------------------------------------------------------===//
9f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
10fe21d4f351f560921e615a6677afe1c057aa7f28Matt Kopec#include "lldb/lldb-python.h"
11fe21d4f351f560921e615a6677afe1c057aa7f28Matt Kopec
12f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// C Includes
13f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
14f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// C++ Includes
15f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
16f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// Other libraries and framework includes
17f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
18f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// Project includes
19f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/lldb-public.h"
20f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/lldb-enumerations.h"
21f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
22f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/Core/Debugger.h"
23f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/Core/StreamString.h"
24f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/Core/Timer.h"
25f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/DataFormatters/TypeSummary.h"
26f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/Interpreter/CommandInterpreter.h"
27f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/Symbol/ClangASTType.h"
28f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/Target/StackFrame.h"
29f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/Target/Target.h"
30f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
3124c80295d7519754a87f579f9425e4a9fcce6b40Enrico Granata#include "lldb/Host/Host.h"
3224c80295d7519754a87f579f9425e4a9fcce6b40Enrico Granata
33f509c5ec066599a3399fced39ea36996184939e8Enrico Granatausing namespace lldb;
34f509c5ec066599a3399fced39ea36996184939e8Enrico Granatausing namespace lldb_private;
35f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
36f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeSummaryImpl::TypeSummaryImpl (const TypeSummaryImpl::Flags& flags) :
37f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_flags(flags)
38f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{
39f509c5ec066599a3399fced39ea36996184939e8Enrico Granata}
40f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
41f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
42f509c5ec066599a3399fced39ea36996184939e8Enrico GranataStringSummaryFormat::StringSummaryFormat (const TypeSummaryImpl::Flags& flags,
43f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                                          const char *format_cstr) :
44f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeSummaryImpl(flags),
45f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_format()
46f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{
47f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    if (format_cstr)
48f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        m_format.assign(format_cstr);
49f509c5ec066599a3399fced39ea36996184939e8Enrico Granata}
50f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
51f509c5ec066599a3399fced39ea36996184939e8Enrico Granatabool
52f509c5ec066599a3399fced39ea36996184939e8Enrico GranataStringSummaryFormat::FormatObject (ValueObject *valobj,
53f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                                   std::string& retval)
54f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{
55f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    if (!valobj)
56f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    {
57f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        retval.assign("NULL ValueObject");
58f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        return false;
59f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    }
60f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
61f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    StreamString s;
62f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    ExecutionContext exe_ctx (valobj->GetExecutionContextRef());
63f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    SymbolContext sc;
64f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    StackFrame *frame = exe_ctx.GetFramePtr();
65f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    if (frame)
66f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        sc = frame->GetSymbolContext(lldb::eSymbolContextEverything);
67f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
68f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    if (IsOneliner())
69f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    {
70f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        ValueObject* object;
71f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
72f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        ValueObjectSP synth_valobj = valobj->GetSyntheticValue();
73f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        if (synth_valobj)
74f509c5ec066599a3399fced39ea36996184939e8Enrico Granata            object = synth_valobj.get();
75f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        else
76f509c5ec066599a3399fced39ea36996184939e8Enrico Granata            object = valobj;
77f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
78f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        const uint32_t num_children = object->GetNumChildren();
79f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        if (num_children)
80f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        {
81f509c5ec066599a3399fced39ea36996184939e8Enrico Granata            s.PutChar('(');
82f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
83f509c5ec066599a3399fced39ea36996184939e8Enrico Granata            for (uint32_t idx=0; idx<num_children; ++idx)
84f509c5ec066599a3399fced39ea36996184939e8Enrico Granata            {
85f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                lldb::ValueObjectSP child_sp(object->GetChildAtIndex(idx, true));
86f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                if (child_sp.get())
87f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                {
88f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                    if (idx)
89f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                        s.PutCString(", ");
90f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                    if (!HideNames())
91f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                    {
92f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                        s.PutCString(child_sp.get()->GetName().AsCString());
93f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                        s.PutCString(" = ");
94f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                    }
95f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                    child_sp.get()->DumpPrintableRepresentation(s,
96f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                                                                ValueObject::eValueObjectRepresentationStyleSummary,
97f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                                                                lldb::eFormatInvalid,
98f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                                                                ValueObject::ePrintableRepresentationSpecialCasesDisable);
99f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                }
100f509c5ec066599a3399fced39ea36996184939e8Enrico Granata            }
101f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
102f509c5ec066599a3399fced39ea36996184939e8Enrico Granata            s.PutChar(')');
103f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
104f509c5ec066599a3399fced39ea36996184939e8Enrico Granata            retval.assign(s.GetString());
105f509c5ec066599a3399fced39ea36996184939e8Enrico Granata            return true;
106f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        }
107f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        else
108f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        {
109f509c5ec066599a3399fced39ea36996184939e8Enrico Granata            retval.assign("error: oneliner for no children");
110f509c5ec066599a3399fced39ea36996184939e8Enrico Granata            return false;
111f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        }
112f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
113f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    }
114f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    else
115f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    {
11617d5a0358d60922707fdab6ec9c3251ca44dd614Michael Sartain        if (Debugger::FormatPrompt(m_format.c_str(), &sc, &exe_ctx, &sc.line_entry.range.GetBaseAddress(), s, valobj))
117f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        {
118f509c5ec066599a3399fced39ea36996184939e8Enrico Granata            retval.assign(s.GetString());
119f509c5ec066599a3399fced39ea36996184939e8Enrico Granata            return true;
120f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        }
121f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        else
122f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        {
123f509c5ec066599a3399fced39ea36996184939e8Enrico Granata            retval.assign("error: summary string parsing error");
124f509c5ec066599a3399fced39ea36996184939e8Enrico Granata            return false;
125f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        }
126f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    }
127f509c5ec066599a3399fced39ea36996184939e8Enrico Granata}
128f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
129f509c5ec066599a3399fced39ea36996184939e8Enrico Granatastd::string
130f509c5ec066599a3399fced39ea36996184939e8Enrico GranataStringSummaryFormat::GetDescription ()
131f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{
132f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    StreamString sstr;
133f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
134f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    sstr.Printf ("`%s`%s%s%s%s%s%s%s",      m_format.c_str(),
135f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 Cascades() ? "" : " (not cascading)",
136f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 !DoesPrintChildren() ? "" : " (show children)",
137f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 !DoesPrintValue() ? " (hide value)" : "",
138f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 IsOneliner() ? " (one-line printout)" : "",
139f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 SkipsPointers() ? " (skip pointers)" : "",
140f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 SkipsReferences() ? " (skip references)" : "",
141f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 HideNames() ? " (hide member names)" : "");
142f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    return sstr.GetString();
143f509c5ec066599a3399fced39ea36996184939e8Enrico Granata}
144f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
145f509c5ec066599a3399fced39ea36996184939e8Enrico GranataCXXFunctionSummaryFormat::CXXFunctionSummaryFormat (const TypeSummaryImpl::Flags& flags,
146f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                                                    Callback impl,
147f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                                                    const char* description) :
148f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeSummaryImpl(flags),
149f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_impl(impl),
150f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_description(description ? description : "")
151f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{
152f509c5ec066599a3399fced39ea36996184939e8Enrico Granata}
153f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
154f509c5ec066599a3399fced39ea36996184939e8Enrico Granatabool
155f509c5ec066599a3399fced39ea36996184939e8Enrico GranataCXXFunctionSummaryFormat::FormatObject (ValueObject *valobj,
156f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                                        std::string& dest)
157f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{
158f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    dest.clear();
159f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    StreamString stream;
160f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    if (!m_impl || m_impl(*valobj,stream) == false)
161f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        return false;
162f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    dest.assign(stream.GetData());
163f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    return true;
164f509c5ec066599a3399fced39ea36996184939e8Enrico Granata}
165f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
166f509c5ec066599a3399fced39ea36996184939e8Enrico Granatastd::string
167f509c5ec066599a3399fced39ea36996184939e8Enrico GranataCXXFunctionSummaryFormat::GetDescription ()
168f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{
169f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    StreamString sstr;
170f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    sstr.Printf ("`%s (%p) `%s%s%s%s%s%s%s",      m_description.c_str(),m_impl,
171f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 Cascades() ? "" : " (not cascading)",
172f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 !DoesPrintChildren() ? "" : " (show children)",
173f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 !DoesPrintValue() ? " (hide value)" : "",
174f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 IsOneliner() ? " (one-line printout)" : "",
175f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 SkipsPointers() ? " (skip pointers)" : "",
176f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 SkipsReferences() ? " (skip references)" : "",
177f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 HideNames() ? " (hide member names)" : "");
178f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    return sstr.GetString();
179f509c5ec066599a3399fced39ea36996184939e8Enrico Granata}
180f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
181f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef LLDB_DISABLE_PYTHON
182f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
183f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
184f509c5ec066599a3399fced39ea36996184939e8Enrico GranataScriptSummaryFormat::ScriptSummaryFormat (const TypeSummaryImpl::Flags& flags,
185f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                                          const char * function_name,
186f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                                          const char * python_script) :
187f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeSummaryImpl(flags),
188f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_function_name(),
189f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_python_script(),
190f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_script_function_sp()
191f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{
192f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    if (function_name)
193f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        m_function_name.assign(function_name);
194f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    if (python_script)
195f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        m_python_script.assign(python_script);
196f509c5ec066599a3399fced39ea36996184939e8Enrico Granata}
197f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
198f509c5ec066599a3399fced39ea36996184939e8Enrico Granatabool
199f509c5ec066599a3399fced39ea36996184939e8Enrico GranataScriptSummaryFormat::FormatObject (ValueObject *valobj,
200f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                                   std::string& retval)
201f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{
202f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    Timer scoped_timer (__PRETTY_FUNCTION__, __PRETTY_FUNCTION__);
203f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
20424c80295d7519754a87f579f9425e4a9fcce6b40Enrico Granata    if (!valobj)
20524c80295d7519754a87f579f9425e4a9fcce6b40Enrico Granata        return false;
20624c80295d7519754a87f579f9425e4a9fcce6b40Enrico Granata
20724c80295d7519754a87f579f9425e4a9fcce6b40Enrico Granata    Host::SetCrashDescriptionWithFormat("[Python summary] Name: %s - Function: %s",
20824c80295d7519754a87f579f9425e4a9fcce6b40Enrico Granata                                        valobj->GetName().AsCString("unknown"),
20924c80295d7519754a87f579f9425e4a9fcce6b40Enrico Granata                                        m_function_name.c_str());
21024c80295d7519754a87f579f9425e4a9fcce6b40Enrico Granata
211f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    TargetSP target_sp(valobj->GetTargetSP());
212f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
213f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    if (!target_sp)
214f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    {
215f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        retval.assign("error: no target");
216f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        return false;
217f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    }
218f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
219f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    ScriptInterpreter *script_interpreter = target_sp->GetDebugger().GetCommandInterpreter().GetScriptInterpreter();
220f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
221f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    if (!script_interpreter)
222f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    {
223f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        retval.assign("error: no ScriptInterpreter");
224f509c5ec066599a3399fced39ea36996184939e8Enrico Granata        return false;
225f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    }
226f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
227f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    return script_interpreter->GetScriptedSummary(m_function_name.c_str(),
228f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                                                  valobj->GetSP(),
229f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                                                  m_script_function_sp,
230f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                                                  retval);
231f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
232f509c5ec066599a3399fced39ea36996184939e8Enrico Granata}
233f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
234f509c5ec066599a3399fced39ea36996184939e8Enrico Granatastd::string
235f509c5ec066599a3399fced39ea36996184939e8Enrico GranataScriptSummaryFormat::GetDescription ()
236f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{
237f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    StreamString sstr;
238f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    sstr.Printf ("%s%s%s%s%s%s%s\n%s",       Cascades() ? "" : " (not cascading)",
239f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 !DoesPrintChildren() ? "" : " (show children)",
240f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 !DoesPrintValue() ? " (hide value)" : "",
241f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 IsOneliner() ? " (one-line printout)" : "",
242f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 SkipsPointers() ? " (skip pointers)" : "",
243f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 SkipsReferences() ? " (skip references)" : "",
244f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 HideNames() ? " (hide member names)" : "",
245f509c5ec066599a3399fced39ea36996184939e8Enrico Granata                 m_python_script.c_str());
246f509c5ec066599a3399fced39ea36996184939e8Enrico Granata    return sstr.GetString();
247f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
248f509c5ec066599a3399fced39ea36996184939e8Enrico Granata}
249f509c5ec066599a3399fced39ea36996184939e8Enrico Granata
250f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif // #ifndef LLDB_DISABLE_PYTHON
251