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