1 //===-- FormattersHelpers.cpp -------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 // C Includes
11 
12 // C++ Includes
13 
14 // Other libraries and framework includes
15 
16 // Project includes
17 #include "lldb/DataFormatters/FormattersHelpers.h"
18 
19 #include "lldb/Core/ConstString.h"
20 #include "lldb/Core/RegularExpression.h"
21 
22 using namespace lldb;
23 using namespace lldb_private;
24 using namespace lldb_private::formatters;
25 
26 void
27 lldb_private::formatters::AddFormat (TypeCategoryImpl::SharedPointer category_sp,
28                                      lldb::Format format,
29                                      ConstString type_name,
30                                      TypeFormatImpl::Flags flags,
31                                      bool regex)
32 {
33     lldb::TypeFormatImplSP format_sp(new TypeFormatImpl_Format(format, flags));
34 
35     if (regex)
36         category_sp->GetRegexTypeFormatsContainer()->Add(RegularExpressionSP(new RegularExpression(type_name.AsCString())),format_sp);
37     else
38         category_sp->GetTypeFormatsContainer()->Add(type_name, format_sp);
39 }
40 
41 
42 void
43 lldb_private::formatters::AddStringSummary(TypeCategoryImpl::SharedPointer category_sp,
44                                            const char* string,
45                                            ConstString type_name,
46                                            TypeSummaryImpl::Flags flags,
47                                            bool regex)
48 {
49     lldb::TypeSummaryImplSP summary_sp(new StringSummaryFormat(flags,
50                                                                string));
51 
52     if (regex)
53         category_sp->GetRegexTypeSummariesContainer()->Add(RegularExpressionSP(new RegularExpression(type_name.AsCString())),summary_sp);
54     else
55         category_sp->GetTypeSummariesContainer()->Add(type_name, summary_sp);
56 }
57 
58 void
59 lldb_private::formatters::AddOneLineSummary (TypeCategoryImpl::SharedPointer category_sp,
60                                              ConstString type_name,
61                                              TypeSummaryImpl::Flags flags,
62                                              bool regex)
63 {
64     flags.SetShowMembersOneLiner(true);
65     lldb::TypeSummaryImplSP summary_sp(new StringSummaryFormat(flags, ""));
66 
67     if (regex)
68         category_sp->GetRegexTypeSummariesContainer()->Add(RegularExpressionSP(new RegularExpression(type_name.AsCString())),summary_sp);
69     else
70         category_sp->GetTypeSummariesContainer()->Add(type_name, summary_sp);
71 }
72 
73 #ifndef LLDB_DISABLE_PYTHON
74 void
75 lldb_private::formatters::AddCXXSummary (TypeCategoryImpl::SharedPointer category_sp,
76                                          CXXFunctionSummaryFormat::Callback funct,
77                                          const char* description,
78                                          ConstString type_name,
79                                          TypeSummaryImpl::Flags flags,
80                                          bool regex)
81 {
82     lldb::TypeSummaryImplSP summary_sp(new CXXFunctionSummaryFormat(flags,funct,description));
83     if (regex)
84         category_sp->GetRegexTypeSummariesContainer()->Add(RegularExpressionSP(new RegularExpression(type_name.AsCString())),summary_sp);
85     else
86         category_sp->GetTypeSummariesContainer()->Add(type_name, summary_sp);
87 }
88 
89 void
90 lldb_private::formatters::AddCXXSynthetic  (TypeCategoryImpl::SharedPointer category_sp,
91                                             CXXSyntheticChildren::CreateFrontEndCallback generator,
92                                             const char* description,
93                                             ConstString type_name,
94                                             ScriptedSyntheticChildren::Flags flags,
95                                             bool regex)
96 {
97     lldb::SyntheticChildrenSP synth_sp(new CXXSyntheticChildren(flags,description,generator));
98     if (regex)
99         category_sp->GetRegexTypeSyntheticsContainer()->Add(RegularExpressionSP(new RegularExpression(type_name.AsCString())), synth_sp);
100     else
101         category_sp->GetTypeSyntheticsContainer()->Add(type_name,synth_sp);
102 }
103 
104 void
105 lldb_private::formatters::AddFilter  (TypeCategoryImpl::SharedPointer category_sp,
106                                       std::vector<std::string> children,
107                                       const char* description,
108                                       ConstString type_name,
109                                       ScriptedSyntheticChildren::Flags flags,
110                                       bool regex)
111 {
112     TypeFilterImplSP filter_sp(new TypeFilterImpl(flags));
113     for (auto child : children)
114         filter_sp->AddExpressionPath(child);
115     if (regex)
116         category_sp->GetRegexTypeFiltersContainer()->Add(RegularExpressionSP(new RegularExpression(type_name.AsCString())), filter_sp);
117     else
118         category_sp->GetTypeFiltersContainer()->Add(type_name,filter_sp);
119 }
120 #endif
121