mirror of
https://github.com/opnsense/src.git
synced 2026-02-17 17:49:34 -05:00
210 lines
4.5 KiB
C++
210 lines
4.5 KiB
C++
|
|
//===-- SBTypeSynthetic.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"
|
||
|
|
|
||
|
|
#include "lldb/API/SBTypeSynthetic.h"
|
||
|
|
|
||
|
|
#include "lldb/API/SBStream.h"
|
||
|
|
|
||
|
|
#include "lldb/DataFormatters/DataVisualization.h"
|
||
|
|
|
||
|
|
using namespace lldb;
|
||
|
|
using namespace lldb_private;
|
||
|
|
|
||
|
|
#ifndef LLDB_DISABLE_PYTHON
|
||
|
|
|
||
|
|
SBTypeSynthetic::SBTypeSynthetic() :
|
||
|
|
m_opaque_sp()
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
SBTypeSynthetic
|
||
|
|
SBTypeSynthetic::CreateWithClassName (const char* data, uint32_t options)
|
||
|
|
{
|
||
|
|
if (!data || data[0] == 0)
|
||
|
|
return SBTypeSynthetic();
|
||
|
|
return SBTypeSynthetic(ScriptedSyntheticChildrenSP(new ScriptedSyntheticChildren(options, data, "")));
|
||
|
|
}
|
||
|
|
|
||
|
|
SBTypeSynthetic
|
||
|
|
SBTypeSynthetic::CreateWithScriptCode (const char* data, uint32_t options)
|
||
|
|
{
|
||
|
|
if (!data || data[0] == 0)
|
||
|
|
return SBTypeSynthetic();
|
||
|
|
return SBTypeSynthetic(ScriptedSyntheticChildrenSP(new ScriptedSyntheticChildren(options, "", data)));
|
||
|
|
}
|
||
|
|
|
||
|
|
SBTypeSynthetic::SBTypeSynthetic (const lldb::SBTypeSynthetic &rhs) :
|
||
|
|
m_opaque_sp(rhs.m_opaque_sp)
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
SBTypeSynthetic::~SBTypeSynthetic ()
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
bool
|
||
|
|
SBTypeSynthetic::IsValid() const
|
||
|
|
{
|
||
|
|
return m_opaque_sp.get() != NULL;
|
||
|
|
}
|
||
|
|
|
||
|
|
bool
|
||
|
|
SBTypeSynthetic::IsClassCode()
|
||
|
|
{
|
||
|
|
if (!IsValid())
|
||
|
|
return false;
|
||
|
|
const char* code = m_opaque_sp->GetPythonCode();
|
||
|
|
return (code && *code);
|
||
|
|
}
|
||
|
|
|
||
|
|
bool
|
||
|
|
SBTypeSynthetic::IsClassName()
|
||
|
|
{
|
||
|
|
if (!IsValid())
|
||
|
|
return false;
|
||
|
|
return !IsClassCode();
|
||
|
|
}
|
||
|
|
|
||
|
|
const char*
|
||
|
|
SBTypeSynthetic::GetData ()
|
||
|
|
{
|
||
|
|
if (!IsValid())
|
||
|
|
return NULL;
|
||
|
|
if (IsClassCode())
|
||
|
|
return m_opaque_sp->GetPythonCode();
|
||
|
|
else
|
||
|
|
return m_opaque_sp->GetPythonClassName();
|
||
|
|
}
|
||
|
|
|
||
|
|
void
|
||
|
|
SBTypeSynthetic::SetClassName (const char* data)
|
||
|
|
{
|
||
|
|
if (IsValid() && data && *data)
|
||
|
|
m_opaque_sp->SetPythonClassName(data);
|
||
|
|
}
|
||
|
|
|
||
|
|
void
|
||
|
|
SBTypeSynthetic::SetClassCode (const char* data)
|
||
|
|
{
|
||
|
|
if (IsValid() && data && *data)
|
||
|
|
m_opaque_sp->SetPythonCode(data);
|
||
|
|
}
|
||
|
|
|
||
|
|
uint32_t
|
||
|
|
SBTypeSynthetic::GetOptions ()
|
||
|
|
{
|
||
|
|
if (!IsValid())
|
||
|
|
return lldb::eTypeOptionNone;
|
||
|
|
return m_opaque_sp->GetOptions();
|
||
|
|
}
|
||
|
|
|
||
|
|
void
|
||
|
|
SBTypeSynthetic::SetOptions (uint32_t value)
|
||
|
|
{
|
||
|
|
if (!CopyOnWrite_Impl())
|
||
|
|
return;
|
||
|
|
m_opaque_sp->SetOptions(value);
|
||
|
|
}
|
||
|
|
|
||
|
|
bool
|
||
|
|
SBTypeSynthetic::GetDescription (lldb::SBStream &description,
|
||
|
|
lldb::DescriptionLevel description_level)
|
||
|
|
{
|
||
|
|
if (m_opaque_sp)
|
||
|
|
{
|
||
|
|
description.Printf("%s\n",
|
||
|
|
m_opaque_sp->GetDescription().c_str());
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
lldb::SBTypeSynthetic &
|
||
|
|
SBTypeSynthetic::operator = (const lldb::SBTypeSynthetic &rhs)
|
||
|
|
{
|
||
|
|
if (this != &rhs)
|
||
|
|
{
|
||
|
|
m_opaque_sp = rhs.m_opaque_sp;
|
||
|
|
}
|
||
|
|
return *this;
|
||
|
|
}
|
||
|
|
|
||
|
|
bool
|
||
|
|
SBTypeSynthetic::operator == (lldb::SBTypeSynthetic &rhs)
|
||
|
|
{
|
||
|
|
if (IsValid() == false)
|
||
|
|
return !rhs.IsValid();
|
||
|
|
return m_opaque_sp == rhs.m_opaque_sp;
|
||
|
|
}
|
||
|
|
|
||
|
|
bool
|
||
|
|
SBTypeSynthetic::IsEqualTo (lldb::SBTypeSynthetic &rhs)
|
||
|
|
{
|
||
|
|
if (IsValid() == false)
|
||
|
|
return !rhs.IsValid();
|
||
|
|
|
||
|
|
if (m_opaque_sp->IsScripted() != rhs.m_opaque_sp->IsScripted())
|
||
|
|
return false;
|
||
|
|
|
||
|
|
if (IsClassCode() != rhs.IsClassCode())
|
||
|
|
return false;
|
||
|
|
|
||
|
|
if ( strcmp(GetData(), rhs.GetData()) )
|
||
|
|
return false;
|
||
|
|
|
||
|
|
return GetOptions() == rhs.GetOptions();
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
bool
|
||
|
|
SBTypeSynthetic::operator != (lldb::SBTypeSynthetic &rhs)
|
||
|
|
{
|
||
|
|
if (IsValid() == false)
|
||
|
|
return !rhs.IsValid();
|
||
|
|
return m_opaque_sp != rhs.m_opaque_sp;
|
||
|
|
}
|
||
|
|
|
||
|
|
lldb::ScriptedSyntheticChildrenSP
|
||
|
|
SBTypeSynthetic::GetSP ()
|
||
|
|
{
|
||
|
|
return m_opaque_sp;
|
||
|
|
}
|
||
|
|
|
||
|
|
void
|
||
|
|
SBTypeSynthetic::SetSP (const lldb::ScriptedSyntheticChildrenSP &TypeSynthetic_impl_sp)
|
||
|
|
{
|
||
|
|
m_opaque_sp = TypeSynthetic_impl_sp;
|
||
|
|
}
|
||
|
|
|
||
|
|
SBTypeSynthetic::SBTypeSynthetic (const lldb::ScriptedSyntheticChildrenSP &TypeSynthetic_impl_sp) :
|
||
|
|
m_opaque_sp(TypeSynthetic_impl_sp)
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
bool
|
||
|
|
SBTypeSynthetic::CopyOnWrite_Impl()
|
||
|
|
{
|
||
|
|
if (!IsValid())
|
||
|
|
return false;
|
||
|
|
if (m_opaque_sp.unique())
|
||
|
|
return true;
|
||
|
|
|
||
|
|
ScriptedSyntheticChildrenSP new_sp(new ScriptedSyntheticChildren(m_opaque_sp->GetOptions(),
|
||
|
|
m_opaque_sp->GetPythonClassName(),
|
||
|
|
m_opaque_sp->GetPythonCode()));
|
||
|
|
|
||
|
|
SetSP(new_sp);
|
||
|
|
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
#endif // LLDB_DISABLE_PYTHON
|