summaryrefslogtreecommitdiffstats
path: root/lldb/source/API/SBStructuredData.cpp
diff options
context:
space:
mode:
authorTodd Fiala <todd.fiala@gmail.com>2016-08-19 02:52:07 +0000
committerTodd Fiala <todd.fiala@gmail.com>2016-08-19 02:52:07 +0000
commitaef7de8492f482254b6bf8d61430ccfd5cda1199 (patch)
treeb29c4ab0bac0642c2c766488e173646c7fabcc66 /lldb/source/API/SBStructuredData.cpp
parente8529c28f1c109e0c5f7be3ff96b17248c69b9bb (diff)
downloadbcm5719-llvm-aef7de8492f482254b6bf8d61430ccfd5cda1199.tar.gz
bcm5719-llvm-aef7de8492f482254b6bf8d61430ccfd5cda1199.zip
Add StructuredData plugin type; showcase with new DarwinLog feature
See docs/structured_data/StructuredDataPlugins.md for details. differential review: https://reviews.llvm.org/D22976 reviewers: clayborg, jingham llvm-svn: 279198
Diffstat (limited to 'lldb/source/API/SBStructuredData.cpp')
-rw-r--r--lldb/source/API/SBStructuredData.cpp165
1 files changed, 165 insertions, 0 deletions
diff --git a/lldb/source/API/SBStructuredData.cpp b/lldb/source/API/SBStructuredData.cpp
new file mode 100644
index 00000000000..5e4417484f0
--- /dev/null
+++ b/lldb/source/API/SBStructuredData.cpp
@@ -0,0 +1,165 @@
+//===-- SBStructuredData.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/API/SBStructuredData.h"
+
+#include "lldb/API/SBStream.h"
+#include "lldb/Core/Error.h"
+#include "lldb/Core/Event.h"
+#include "lldb/Core/Stream.h"
+#include "lldb/Core/StructuredData.h"
+#include "lldb/Target/StructuredDataPlugin.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+#pragma mark --
+#pragma mark Impl
+
+class SBStructuredData::Impl
+{
+public:
+
+ Impl() :
+ m_plugin_wp(),
+ m_data_sp()
+ {
+ }
+
+ Impl(const Impl &rhs) = default;
+
+ Impl(const EventSP &event_sp) :
+ m_plugin_wp(EventDataStructuredData::GetPluginFromEvent(event_sp.get())),
+ m_data_sp(EventDataStructuredData::GetObjectFromEvent(event_sp.get()))
+ {
+ }
+
+ ~Impl() = default;
+
+ Impl&
+ operator =(const Impl &rhs) = default;
+
+ bool
+ IsValid() const
+ {
+ return m_data_sp.get() != nullptr;
+ }
+
+ void
+ Clear()
+ {
+ m_plugin_wp.reset();
+ m_data_sp.reset();
+ }
+
+ SBError
+ GetAsJSON(lldb::SBStream &stream) const
+ {
+ SBError sb_error;
+
+ if (!m_data_sp)
+ {
+ sb_error.SetErrorString("No structured data.");
+ return sb_error;
+ }
+
+ m_data_sp->Dump(stream.ref());
+ return sb_error;
+ }
+
+ lldb::SBError
+ GetDescription(lldb::SBStream &stream) const
+ {
+ SBError sb_error;
+
+ if (!m_data_sp)
+ {
+ sb_error.SetErrorString("Cannot pretty print structured data: "
+ "no data to print.");
+ return sb_error;
+ }
+
+ // Grab the plugin.
+ auto plugin_sp = StructuredDataPluginSP(m_plugin_wp);
+ if (!plugin_sp)
+ {
+ sb_error.SetErrorString("Cannot pretty print structured data: "
+ "plugin doesn't exist.");
+ return sb_error;
+ }
+
+ // Get the data's description.
+ auto error = plugin_sp->GetDescription(m_data_sp, stream.ref());
+ if (!error.Success())
+ sb_error.SetError(error);
+
+ return sb_error;
+ }
+
+private:
+
+ StructuredDataPluginWP m_plugin_wp;
+ StructuredData::ObjectSP m_data_sp;
+
+};
+
+#pragma mark --
+#pragma mark SBStructuredData
+
+
+SBStructuredData::SBStructuredData() :
+ m_impl_up(new Impl())
+{
+}
+
+SBStructuredData::SBStructuredData(const lldb::SBStructuredData &rhs) :
+ m_impl_up(new Impl(*rhs.m_impl_up.get()))
+{
+}
+
+SBStructuredData::SBStructuredData(const lldb::EventSP &event_sp) :
+ m_impl_up(new Impl(event_sp))
+{
+}
+
+SBStructuredData::~SBStructuredData()
+{
+}
+
+SBStructuredData &
+SBStructuredData::operator =(const lldb::SBStructuredData &rhs)
+{
+ *m_impl_up = *rhs.m_impl_up;
+ return *this;
+}
+
+bool
+SBStructuredData::IsValid() const
+{
+ return m_impl_up->IsValid();
+}
+
+void
+SBStructuredData::Clear()
+{
+ m_impl_up->Clear();
+}
+
+SBError
+SBStructuredData::GetAsJSON(lldb::SBStream &stream) const
+{
+ return m_impl_up->GetAsJSON(stream);
+}
+
+lldb::SBError
+SBStructuredData::GetDescription(lldb::SBStream &stream) const
+{
+ return m_impl_up->GetDescription(stream);
+}
+
OpenPOWER on IntegriCloud