1 //===-- TypeSynthetic.cpp ----------------------------------------*- 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 10 #include "lldb/lldb-python.h" 11 12 // C Includes 13 14 // C++ Includes 15 16 // Other libraries and framework includes 17 18 // Project includes 19 #include "lldb/lldb-public.h" 20 #include "lldb/lldb-enumerations.h" 21 22 #include "lldb/Core/Debugger.h" 23 #include "lldb/Core/StreamString.h" 24 #include "lldb/DataFormatters/TypeSynthetic.h" 25 #include "lldb/Interpreter/CommandInterpreter.h" 26 #include "lldb/Symbol/ClangASTType.h" 27 #include "lldb/Target/StackFrame.h" 28 #include "lldb/Target/Target.h" 29 30 using namespace lldb; 31 using namespace lldb_private; 32 33 std::string 34 TypeFilterImpl::GetDescription() 35 { 36 StreamString sstr; 37 sstr.Printf("%s%s%s {\n", 38 Cascades() ? "" : " (not cascading)", 39 SkipsPointers() ? " (skip pointers)" : "", 40 SkipsReferences() ? " (skip references)" : ""); 41 42 for (size_t i = 0; i < GetCount(); i++) 43 { 44 sstr.Printf(" %s\n", 45 GetExpressionPathAtIndex(i)); 46 } 47 48 sstr.Printf("}"); 49 return sstr.GetString(); 50 } 51 52 std::string 53 CXXSyntheticChildren::GetDescription() 54 { 55 StreamString sstr; 56 sstr.Printf("%s%s%s Generator at %p - %s", 57 Cascades() ? "" : " (not cascading)", 58 SkipsPointers() ? " (skip pointers)" : "", 59 SkipsReferences() ? " (skip references)" : "", 60 m_create_callback, 61 m_description.c_str()); 62 63 return sstr.GetString(); 64 } 65 66 #ifndef LLDB_DISABLE_PYTHON 67 68 ScriptedSyntheticChildren::FrontEnd::FrontEnd(std::string pclass, ValueObject &backend) : 69 SyntheticChildrenFrontEnd(backend), 70 m_python_class(pclass), 71 m_wrapper_sp(), 72 m_interpreter(NULL) 73 { 74 if (backend == LLDB_INVALID_UID) 75 return; 76 77 TargetSP target_sp = backend.GetTargetSP(); 78 79 if (!target_sp) 80 return; 81 82 m_interpreter = target_sp->GetDebugger().GetCommandInterpreter().GetScriptInterpreter(); 83 84 if (m_interpreter != NULL) 85 m_wrapper_sp = m_interpreter->CreateSyntheticScriptedProvider(m_python_class.c_str(), backend.GetSP()); 86 } 87 88 ScriptedSyntheticChildren::FrontEnd::~FrontEnd() 89 { 90 } 91 92 lldb::ValueObjectSP 93 ScriptedSyntheticChildren::FrontEnd::GetChildAtIndex (size_t idx) 94 { 95 if (!m_wrapper_sp || !m_interpreter) 96 return lldb::ValueObjectSP(); 97 98 return m_interpreter->GetChildAtIndex(m_wrapper_sp, idx); 99 } 100 101 std::string 102 ScriptedSyntheticChildren::GetDescription() 103 { 104 StreamString sstr; 105 sstr.Printf("%s%s%s Python class %s", 106 Cascades() ? "" : " (not cascading)", 107 SkipsPointers() ? " (skip pointers)" : "", 108 SkipsReferences() ? " (skip references)" : "", 109 m_python_class.c_str()); 110 111 return sstr.GetString(); 112 } 113 114 #endif // #ifndef LLDB_DISABLE_PYTHON 115