1f509c5ec066599a3399fced39ea36996184939e8Enrico Granata//===-- TypeSynthetic.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/DataFormatters/TypeSynthetic.h" 25f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/Interpreter/CommandInterpreter.h" 26f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/Symbol/ClangASTType.h" 27f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/Target/StackFrame.h" 28f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/Target/Target.h" 29f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 30f509c5ec066599a3399fced39ea36996184939e8Enrico Granatausing namespace lldb; 31f509c5ec066599a3399fced39ea36996184939e8Enrico Granatausing namespace lldb_private; 32f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 33f509c5ec066599a3399fced39ea36996184939e8Enrico Granatastd::string 34f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeFilterImpl::GetDescription() 35f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 36f509c5ec066599a3399fced39ea36996184939e8Enrico Granata StreamString sstr; 37f509c5ec066599a3399fced39ea36996184939e8Enrico Granata sstr.Printf("%s%s%s {\n", 38f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Cascades() ? "" : " (not cascading)", 39f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SkipsPointers() ? " (skip pointers)" : "", 40f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SkipsReferences() ? " (skip references)" : ""); 41f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 423e11c7ec050648ba865f1d451f8cb46fd39072a8Andy Gibbs for (size_t i = 0; i < GetCount(); i++) 43f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 44f509c5ec066599a3399fced39ea36996184939e8Enrico Granata sstr.Printf(" %s\n", 45f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetExpressionPathAtIndex(i)); 46f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 47f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 48f509c5ec066599a3399fced39ea36996184939e8Enrico Granata sstr.Printf("}"); 49f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return sstr.GetString(); 50f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 51f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 52f509c5ec066599a3399fced39ea36996184939e8Enrico Granatastd::string 53f509c5ec066599a3399fced39ea36996184939e8Enrico GranataCXXSyntheticChildren::GetDescription() 54f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 55f509c5ec066599a3399fced39ea36996184939e8Enrico Granata StreamString sstr; 56cc5d27417b9f958d596a438290a9adb17674b487Enrico Granata sstr.Printf("%s%s%s Generator at %p - %s", 57f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Cascades() ? "" : " (not cascading)", 58f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SkipsPointers() ? " (skip pointers)" : "", 59f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SkipsReferences() ? " (skip references)" : "", 60f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_create_callback, 61f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_description.c_str()); 62f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 63f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return sstr.GetString(); 64f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 65f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 66f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef LLDB_DISABLE_PYTHON 67f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 68f509c5ec066599a3399fced39ea36996184939e8Enrico GranataScriptedSyntheticChildren::FrontEnd::FrontEnd(std::string pclass, ValueObject &backend) : 69f509c5ec066599a3399fced39ea36996184939e8Enrico GranataSyntheticChildrenFrontEnd(backend), 70f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_python_class(pclass), 71f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_wrapper_sp(), 72f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_interpreter(NULL) 73f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 74f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (backend == LLDB_INVALID_UID) 75f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return; 76f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 77f509c5ec066599a3399fced39ea36996184939e8Enrico Granata TargetSP target_sp = backend.GetTargetSP(); 78f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 79f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (!target_sp) 80f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return; 81f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 82f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_interpreter = target_sp->GetDebugger().GetCommandInterpreter().GetScriptInterpreter(); 83f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 84f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (m_interpreter != NULL) 85f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_wrapper_sp = m_interpreter->CreateSyntheticScriptedProvider(m_python_class.c_str(), backend.GetSP()); 86f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 87f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 88f509c5ec066599a3399fced39ea36996184939e8Enrico GranataScriptedSyntheticChildren::FrontEnd::~FrontEnd() 89f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 90f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 91f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 92f509c5ec066599a3399fced39ea36996184939e8Enrico Granatalldb::ValueObjectSP 93f509c5ec066599a3399fced39ea36996184939e8Enrico GranataScriptedSyntheticChildren::FrontEnd::GetChildAtIndex (size_t idx) 94f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 95f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (!m_wrapper_sp || !m_interpreter) 96f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return lldb::ValueObjectSP(); 97f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 98f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_interpreter->GetChildAtIndex(m_wrapper_sp, idx); 99f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 100f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 101f509c5ec066599a3399fced39ea36996184939e8Enrico Granatastd::string 102f509c5ec066599a3399fced39ea36996184939e8Enrico GranataScriptedSyntheticChildren::GetDescription() 103f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 104f509c5ec066599a3399fced39ea36996184939e8Enrico Granata StreamString sstr; 105f509c5ec066599a3399fced39ea36996184939e8Enrico Granata sstr.Printf("%s%s%s Python class %s", 106f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Cascades() ? "" : " (not cascading)", 107f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SkipsPointers() ? " (skip pointers)" : "", 108f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SkipsReferences() ? " (skip references)" : "", 109f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_python_class.c_str()); 110f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 111f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return sstr.GetString(); 112f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 113f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 114f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif // #ifndef LLDB_DISABLE_PYTHON 115