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