Home | History | Annotate | Download | only in DataFormatters
      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