1 //===-- GoLanguage.cpp ------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
16 // Other libraries and framework includes
17 #include "llvm/ADT/StringRef.h"
20 #include "GoLanguage.h"
21 #include "Plugins/Language/Go/GoFormatterFunctions.h"
22 #include "lldb/Core/ConstString.h"
23 #include "lldb/Core/PluginManager.h"
24 #include "lldb/DataFormatters/FormattersHelpers.h"
25 #include "lldb/Symbol/GoASTContext.h"
28 using namespace lldb_private;
29 using namespace lldb_private::formatters;
31 void GoLanguage::Initialize() {
32 PluginManager::RegisterPlugin(GetPluginNameStatic(), "Go Language",
36 void GoLanguage::Terminate() {
37 PluginManager::UnregisterPlugin(CreateInstance);
40 lldb_private::ConstString GoLanguage::GetPluginNameStatic() {
41 static ConstString g_name("Go");
45 //------------------------------------------------------------------
46 // PluginInterface protocol
47 //------------------------------------------------------------------
48 lldb_private::ConstString GoLanguage::GetPluginName() {
49 return GetPluginNameStatic();
52 uint32_t GoLanguage::GetPluginVersion() { return 1; }
54 //------------------------------------------------------------------
56 //------------------------------------------------------------------
57 Language *GoLanguage::CreateInstance(lldb::LanguageType language) {
58 if (language == eLanguageTypeGo)
59 return new GoLanguage();
63 HardcodedFormatters::HardcodedSummaryFinder
64 GoLanguage::GetHardcodedSummaries() {
65 static std::once_flag g_initialize;
66 static HardcodedFormatters::HardcodedSummaryFinder g_formatters;
68 std::call_once(g_initialize, []() -> void {
69 g_formatters.push_back(
70 [](lldb_private::ValueObject &valobj, lldb::DynamicValueType,
71 FormatManager &) -> TypeSummaryImpl::SharedPointer {
72 static CXXFunctionSummaryFormat::SharedPointer formatter_sp(
73 new CXXFunctionSummaryFormat(
74 TypeSummaryImpl::Flags().SetDontShowChildren(true),
75 lldb_private::formatters::GoStringSummaryProvider,
76 "Go string summary provider"));
77 if (GoASTContext::IsGoString(valobj.GetCompilerType())) {
80 if (GoASTContext::IsGoString(
81 valobj.GetCompilerType().GetPointeeType())) {
86 g_formatters.push_back(
87 [](lldb_private::ValueObject &valobj, lldb::DynamicValueType,
88 FormatManager &) -> TypeSummaryImpl::SharedPointer {
89 static lldb::TypeSummaryImplSP formatter_sp(new StringSummaryFormat(
90 TypeSummaryImpl::Flags().SetHideItemNames(true),
91 "(len ${var.len}, cap ${var.cap})"));
92 if (GoASTContext::IsGoSlice(valobj.GetCompilerType())) {
95 if (GoASTContext::IsGoSlice(
96 valobj.GetCompilerType().GetPointeeType())) {
105 HardcodedFormatters::HardcodedSyntheticFinder
106 GoLanguage::GetHardcodedSynthetics() {
107 static std::once_flag g_initialize;
108 static HardcodedFormatters::HardcodedSyntheticFinder g_formatters;
110 std::call_once(g_initialize, []() -> void {
111 g_formatters.push_back(
112 [](lldb_private::ValueObject &valobj, lldb::DynamicValueType,
113 FormatManager &fmt_mgr) -> SyntheticChildren::SharedPointer {
114 static CXXSyntheticChildren::SharedPointer formatter_sp(
115 new CXXSyntheticChildren(
116 SyntheticChildren::Flags(), "slice synthetic children",
117 lldb_private::formatters::GoSliceSyntheticFrontEndCreator));
118 if (GoASTContext::IsGoSlice(valobj.GetCompilerType())) {