| //===-- TypeSynthetic.cpp ----------------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "lldb/lldb-python.h" |
| |
| // C Includes |
| |
| // C++ Includes |
| |
| // Other libraries and framework includes |
| |
| // Project includes |
| #include "lldb/lldb-public.h" |
| #include "lldb/lldb-enumerations.h" |
| |
| #include "lldb/Core/Debugger.h" |
| #include "lldb/Core/StreamString.h" |
| #include "lldb/DataFormatters/TypeSynthetic.h" |
| #include "lldb/Interpreter/CommandInterpreter.h" |
| #include "lldb/Symbol/ClangASTType.h" |
| #include "lldb/Target/StackFrame.h" |
| #include "lldb/Target/Target.h" |
| |
| using namespace lldb; |
| using namespace lldb_private; |
| |
| std::string |
| TypeFilterImpl::GetDescription() |
| { |
| StreamString sstr; |
| sstr.Printf("%s%s%s {\n", |
| Cascades() ? "" : " (not cascading)", |
| SkipsPointers() ? " (skip pointers)" : "", |
| SkipsReferences() ? " (skip references)" : ""); |
| |
| for (size_t i = 0; i < GetCount(); i++) |
| { |
| sstr.Printf(" %s\n", |
| GetExpressionPathAtIndex(i)); |
| } |
| |
| sstr.Printf("}"); |
| return sstr.GetString(); |
| } |
| |
| std::string |
| CXXSyntheticChildren::GetDescription() |
| { |
| StreamString sstr; |
| sstr.Printf("%s%s%s Generator at %p - %s", |
| Cascades() ? "" : " (not cascading)", |
| SkipsPointers() ? " (skip pointers)" : "", |
| SkipsReferences() ? " (skip references)" : "", |
| reinterpret_cast<void*>(m_create_callback), |
| m_description.c_str()); |
| |
| return sstr.GetString(); |
| } |
| |
| #ifndef LLDB_DISABLE_PYTHON |
| |
| ScriptedSyntheticChildren::FrontEnd::FrontEnd(std::string pclass, ValueObject &backend) : |
| SyntheticChildrenFrontEnd(backend), |
| m_python_class(pclass), |
| m_wrapper_sp(), |
| m_interpreter(NULL) |
| { |
| if (backend == LLDB_INVALID_UID) |
| return; |
| |
| TargetSP target_sp = backend.GetTargetSP(); |
| |
| if (!target_sp) |
| return; |
| |
| m_interpreter = target_sp->GetDebugger().GetCommandInterpreter().GetScriptInterpreter(); |
| |
| if (m_interpreter != NULL) |
| m_wrapper_sp = m_interpreter->CreateSyntheticScriptedProvider(m_python_class.c_str(), backend.GetSP()); |
| } |
| |
| ScriptedSyntheticChildren::FrontEnd::~FrontEnd() |
| { |
| } |
| |
| lldb::ValueObjectSP |
| ScriptedSyntheticChildren::FrontEnd::GetChildAtIndex (size_t idx) |
| { |
| if (!m_wrapper_sp || !m_interpreter) |
| return lldb::ValueObjectSP(); |
| |
| return m_interpreter->GetChildAtIndex(m_wrapper_sp, idx); |
| } |
| |
| std::string |
| ScriptedSyntheticChildren::GetDescription() |
| { |
| StreamString sstr; |
| sstr.Printf("%s%s%s Python class %s", |
| Cascades() ? "" : " (not cascading)", |
| SkipsPointers() ? " (skip pointers)" : "", |
| SkipsReferences() ? " (skip references)" : "", |
| m_python_class.c_str()); |
| |
| return sstr.GetString(); |
| } |
| |
| #endif // #ifndef LLDB_DISABLE_PYTHON |