116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata//===-- SBTypeFormat.cpp ------------------------------------------*- C++ -*-===//
216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata//
316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata//                     The LLVM Compiler Infrastructure
416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata//
516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata// This file is distributed under the University of Illinois Open Source
616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata// License. See LICENSE.TXT for details.
716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata//
816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata//===----------------------------------------------------------------------===//
916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
10d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea#include "lldb/lldb-python.h"
11d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea
1216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata#include "lldb/API/SBTypeFormat.h"
1316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
1416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata#include "lldb/API/SBStream.h"
1516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
16f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/DataFormatters/DataVisualization.h"
1716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
1816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatausing namespace lldb;
1916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatausing namespace lldb_private;
2016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
2116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::SBTypeFormat() :
2216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatam_opaque_sp()
2316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
2416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
2516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
2616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::SBTypeFormat (lldb::Format format,
2716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata                            uint32_t options)
2816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata: m_opaque_sp(TypeFormatImplSP(new TypeFormatImpl(format,options)))
2916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
3016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
3116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
3216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::SBTypeFormat (const lldb::SBTypeFormat &rhs) :
3316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatam_opaque_sp(rhs.m_opaque_sp)
3416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
3516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
3616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
3716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::~SBTypeFormat ()
3816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
3916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
4016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
4116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool
4216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::IsValid() const
4316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
4416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    return m_opaque_sp.get() != NULL;
4516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
4616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
4716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatalldb::Format
4816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::GetFormat ()
4916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
5016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (IsValid())
5116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return m_opaque_sp->GetFormat();
5216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    return lldb::eFormatInvalid;
5316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
5416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
5516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatauint32_t
5616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::GetOptions()
5716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
5816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (IsValid())
5916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return m_opaque_sp->GetOptions();
6016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    return 0;
6116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
6216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
6316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatavoid
6416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::SetFormat (lldb::Format fmt)
6516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
6616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (CopyOnWrite_Impl())
6716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        m_opaque_sp->SetFormat(fmt);
6816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
6916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
7016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatavoid
7116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::SetOptions (uint32_t value)
7216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
7316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (CopyOnWrite_Impl())
7416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        m_opaque_sp->SetOptions(value);
7516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
7616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
7716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool
7816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::GetDescription (lldb::SBStream &description,
7916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata                              lldb::DescriptionLevel description_level)
8016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
8116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (!IsValid())
8216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return false;
8316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    else {
8416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        description.Printf("%s\n",
8516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata                           m_opaque_sp->GetDescription().c_str());
8616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return true;
8716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    }
8816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
8916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
9016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatalldb::SBTypeFormat &
9116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::operator = (const lldb::SBTypeFormat &rhs)
9216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
9316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (this != &rhs)
9416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    {
9516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        m_opaque_sp = rhs.m_opaque_sp;
9616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    }
9716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    return *this;
9816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
9916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
10016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool
10116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::operator == (lldb::SBTypeFormat &rhs)
10216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
10316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (IsValid() == false)
10416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return !rhs.IsValid();
10516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    return m_opaque_sp == rhs.m_opaque_sp;
10616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
10716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
10816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool
10916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::IsEqualTo (lldb::SBTypeFormat &rhs)
11016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
11116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (IsValid() == false)
11216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return !rhs.IsValid();
11316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
11416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (GetFormat() == rhs.GetFormat())
11516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return GetOptions() == rhs.GetOptions();
11616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    else
11716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return false;
11816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
11916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
12016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool
12116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::operator != (lldb::SBTypeFormat &rhs)
12216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
12316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (IsValid() == false)
12416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return !rhs.IsValid();
12516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    return m_opaque_sp != rhs.m_opaque_sp;
12616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
12716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
12816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatalldb::TypeFormatImplSP
12916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::GetSP ()
13016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
13116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    return m_opaque_sp;
13216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
13316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
13416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatavoid
13516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::SetSP (const lldb::TypeFormatImplSP &typeformat_impl_sp)
13616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
13716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    m_opaque_sp = typeformat_impl_sp;
13816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
13916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
14016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::SBTypeFormat (const lldb::TypeFormatImplSP &typeformat_impl_sp) :
14116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    m_opaque_sp(typeformat_impl_sp)
14216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
14316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
14416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
14516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool
14616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat::CopyOnWrite_Impl()
14716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
14816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (!IsValid())
14916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return false;
15016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (m_opaque_sp.unique())
15116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return true;
15216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
15316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    SetSP(TypeFormatImplSP(new TypeFormatImpl(GetFormat(),GetOptions())));
15416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    return true;
15516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
156