1254721Semaste//===-- TypeSynthetic.cpp ----------------------------------------*- C++ -*-===//
2254721Semaste//
3254721Semaste//                     The LLVM Compiler Infrastructure
4254721Semaste//
5254721Semaste// This file is distributed under the University of Illinois Open Source
6254721Semaste// License. See LICENSE.TXT for details.
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#include "lldb/lldb-python.h"
11254721Semaste
12254721Semaste// C Includes
13254721Semaste
14254721Semaste// C++ Includes
15254721Semaste
16254721Semaste// Other libraries and framework includes
17254721Semaste
18254721Semaste// Project includes
19254721Semaste#include "lldb/lldb-public.h"
20254721Semaste#include "lldb/lldb-enumerations.h"
21254721Semaste
22254721Semaste#include "lldb/Core/Debugger.h"
23254721Semaste#include "lldb/Core/StreamString.h"
24254721Semaste#include "lldb/DataFormatters/TypeSynthetic.h"
25254721Semaste#include "lldb/Interpreter/CommandInterpreter.h"
26254721Semaste#include "lldb/Symbol/ClangASTType.h"
27254721Semaste#include "lldb/Target/StackFrame.h"
28254721Semaste#include "lldb/Target/Target.h"
29254721Semaste
30254721Semasteusing namespace lldb;
31254721Semasteusing namespace lldb_private;
32254721Semaste
33254721Semastestd::string
34254721SemasteTypeFilterImpl::GetDescription()
35254721Semaste{
36254721Semaste    StreamString sstr;
37254721Semaste    sstr.Printf("%s%s%s {\n",
38254721Semaste                Cascades() ? "" : " (not cascading)",
39254721Semaste                SkipsPointers() ? " (skip pointers)" : "",
40254721Semaste                SkipsReferences() ? " (skip references)" : "");
41254721Semaste
42254721Semaste    for (size_t i = 0; i < GetCount(); i++)
43254721Semaste    {
44254721Semaste        sstr.Printf("    %s\n",
45254721Semaste                    GetExpressionPathAtIndex(i));
46254721Semaste    }
47254721Semaste
48254721Semaste    sstr.Printf("}");
49254721Semaste    return sstr.GetString();
50254721Semaste}
51254721Semaste
52254721Semastestd::string
53254721SemasteCXXSyntheticChildren::GetDescription()
54254721Semaste{
55254721Semaste    StreamString sstr;
56254721Semaste    sstr.Printf("%s%s%s Generator at %p - %s",
57254721Semaste                Cascades() ? "" : " (not cascading)",
58254721Semaste                SkipsPointers() ? " (skip pointers)" : "",
59254721Semaste                SkipsReferences() ? " (skip references)" : "",
60254721Semaste                m_create_callback,
61254721Semaste                m_description.c_str());
62254721Semaste
63254721Semaste    return sstr.GetString();
64254721Semaste}
65254721Semaste
66254721Semaste#ifndef LLDB_DISABLE_PYTHON
67254721Semaste
68254721SemasteScriptedSyntheticChildren::FrontEnd::FrontEnd(std::string pclass, ValueObject &backend) :
69254721SemasteSyntheticChildrenFrontEnd(backend),
70254721Semastem_python_class(pclass),
71254721Semastem_wrapper_sp(),
72254721Semastem_interpreter(NULL)
73254721Semaste{
74254721Semaste    if (backend == LLDB_INVALID_UID)
75254721Semaste        return;
76254721Semaste
77254721Semaste    TargetSP target_sp = backend.GetTargetSP();
78254721Semaste
79254721Semaste    if (!target_sp)
80254721Semaste        return;
81254721Semaste
82254721Semaste    m_interpreter = target_sp->GetDebugger().GetCommandInterpreter().GetScriptInterpreter();
83254721Semaste
84254721Semaste    if (m_interpreter != NULL)
85254721Semaste        m_wrapper_sp = m_interpreter->CreateSyntheticScriptedProvider(m_python_class.c_str(), backend.GetSP());
86254721Semaste}
87254721Semaste
88254721SemasteScriptedSyntheticChildren::FrontEnd::~FrontEnd()
89254721Semaste{
90254721Semaste}
91254721Semaste
92254721Semastelldb::ValueObjectSP
93254721SemasteScriptedSyntheticChildren::FrontEnd::GetChildAtIndex (size_t idx)
94254721Semaste{
95254721Semaste    if (!m_wrapper_sp || !m_interpreter)
96254721Semaste        return lldb::ValueObjectSP();
97254721Semaste
98254721Semaste    return m_interpreter->GetChildAtIndex(m_wrapper_sp, idx);
99254721Semaste}
100254721Semaste
101254721Semastestd::string
102254721SemasteScriptedSyntheticChildren::GetDescription()
103254721Semaste{
104254721Semaste    StreamString sstr;
105254721Semaste    sstr.Printf("%s%s%s Python class %s",
106254721Semaste                Cascades() ? "" : " (not cascading)",
107254721Semaste                SkipsPointers() ? " (skip pointers)" : "",
108254721Semaste                SkipsReferences() ? " (skip references)" : "",
109254721Semaste                m_python_class.c_str());
110254721Semaste
111254721Semaste    return sstr.GetString();
112254721Semaste}
113254721Semaste
114254721Semaste#endif // #ifndef LLDB_DISABLE_PYTHON
115