Coverage Report

Created: 2023-09-30 09:22

/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/include/lldb/Interpreter/CommandReturnObject.h
Line
Count
Source (jump to first uncovered line)
1
//===-- CommandReturnObject.h -----------------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLDB_INTERPRETER_COMMANDRETURNOBJECT_H
10
#define LLDB_INTERPRETER_COMMANDRETURNOBJECT_H
11
12
#include "lldb/Host/StreamFile.h"
13
#include "lldb/Utility/StreamString.h"
14
#include "lldb/Utility/StreamTee.h"
15
#include "lldb/lldb-private.h"
16
17
#include "llvm/ADT/StringRef.h"
18
#include "llvm/Support/Error.h"
19
#include "llvm/Support/FormatVariadic.h"
20
#include "llvm/Support/WithColor.h"
21
22
#include <memory>
23
24
namespace lldb_private {
25
26
class CommandReturnObject {
27
public:
28
  CommandReturnObject(bool colors);
29
30
94.4k
  ~CommandReturnObject() = default;
31
32
295k
  llvm::StringRef GetOutputData() {
33
295k
    lldb::StreamSP stream_sp(m_out_stream.GetStreamAtIndex(eStreamStringIndex));
34
295k
    if (stream_sp)
35
209k
      return std::static_pointer_cast<StreamString>(stream_sp)->GetString();
36
86.1k
    return llvm::StringRef();
37
295k
  }
38
39
163k
  llvm::StringRef GetErrorData() {
40
163k
    lldb::StreamSP stream_sp(m_err_stream.GetStreamAtIndex(eStreamStringIndex));
41
163k
    if (stream_sp)
42
82.5k
      return std::static_pointer_cast<StreamString>(stream_sp)->GetString();
43
80.7k
    return llvm::StringRef();
44
163k
  }
45
46
2.21M
  Stream &GetOutputStream() {
47
    // Make sure we at least have our normal string stream output stream
48
2.21M
    lldb::StreamSP stream_sp(m_out_stream.GetStreamAtIndex(eStreamStringIndex));
49
2.21M
    if (!stream_sp) {
50
2.95k
      stream_sp = std::make_shared<StreamString>();
51
2.95k
      m_out_stream.SetStreamAtIndex(eStreamStringIndex, stream_sp);
52
2.95k
    }
53
2.21M
    return m_out_stream;
54
2.21M
  }
55
56
22.2k
  Stream &GetErrorStream() {
57
    // Make sure we at least have our normal string stream output stream
58
22.2k
    lldb::StreamSP stream_sp(m_err_stream.GetStreamAtIndex(eStreamStringIndex));
59
22.2k
    if (!stream_sp) {
60
1.27k
      stream_sp = std::make_shared<StreamString>();
61
1.27k
      m_err_stream.SetStreamAtIndex(eStreamStringIndex, stream_sp);
62
1.27k
    }
63
22.2k
    return m_err_stream;
64
22.2k
  }
65
66
96
  void SetImmediateOutputFile(lldb::FileSP file_sp) {
67
96
    if (m_suppress_immediate_output)
68
1
      return;
69
95
    lldb::StreamSP stream_sp(new StreamFile(file_sp));
70
95
    m_out_stream.SetStreamAtIndex(eImmediateStreamIndex, stream_sp);
71
95
  }
72
73
85
  void SetImmediateErrorFile(lldb::FileSP file_sp) {
74
85
    if (m_suppress_immediate_output)
75
1
      return;
76
84
    lldb::StreamSP stream_sp(new StreamFile(file_sp));
77
84
    m_err_stream.SetStreamAtIndex(eImmediateStreamIndex, stream_sp);
78
84
  }
79
80
18
  void SetImmediateOutputStream(const lldb::StreamSP &stream_sp) {
81
18
    if (m_suppress_immediate_output)
82
0
      return;
83
18
    m_out_stream.SetStreamAtIndex(eImmediateStreamIndex, stream_sp);
84
18
  }
85
86
7
  void SetImmediateErrorStream(const lldb::StreamSP &stream_sp) {
87
7
    if (m_suppress_immediate_output)
88
0
      return;
89
7
    m_err_stream.SetStreamAtIndex(eImmediateStreamIndex, stream_sp);
90
7
  }
91
92
4.30k
  lldb::StreamSP GetImmediateOutputStream() {
93
4.30k
    return m_out_stream.GetStreamAtIndex(eImmediateStreamIndex);
94
4.30k
  }
95
96
4.29k
  lldb::StreamSP GetImmediateErrorStream() {
97
4.29k
    return m_err_stream.GetStreamAtIndex(eImmediateStreamIndex);
98
4.29k
  }
99
100
  void Clear();
101
102
  void AppendMessage(llvm::StringRef in_string);
103
104
  void AppendMessageWithFormat(const char *format, ...)
105
      __attribute__((format(printf, 2, 3)));
106
107
  void AppendWarning(llvm::StringRef in_string);
108
109
  void AppendWarningWithFormat(const char *format, ...)
110
      __attribute__((format(printf, 2, 3)));
111
112
  void AppendError(llvm::StringRef in_string);
113
114
  void AppendRawError(llvm::StringRef in_string);
115
116
  void AppendErrorWithFormat(const char *format, ...)
117
      __attribute__((format(printf, 2, 3)));
118
119
  template <typename... Args>
120
608
  void AppendMessageWithFormatv(const char *format, Args &&... args) {
121
608
    AppendMessage(llvm::formatv(format, std::forward<Args>(args)...).str());
122
608
  }
void lldb_private::CommandReturnObject::AppendMessageWithFormatv<llvm::StringRef&, llvm::StringRef&>(char const*, llvm::StringRef&, llvm::StringRef&)
Line
Count
Source
120
42
  void AppendMessageWithFormatv(const char *format, Args &&... args) {
121
42
    AppendMessage(llvm::formatv(format, std::forward<Args>(args)...).str());
122
42
  }
void lldb_private::CommandReturnObject::AppendMessageWithFormatv<unsigned long long, unsigned long long, lldb_private::MemoryRegionInfo::OptionalBool, lldb_private::MemoryRegionInfo::OptionalBool, lldb_private::MemoryRegionInfo::OptionalBool, char const*, lldb_private::ConstString&, char const*, lldb_private::ConstString&>(char const*, unsigned long long&&, unsigned long long&&, lldb_private::MemoryRegionInfo::OptionalBool&&, lldb_private::MemoryRegionInfo::OptionalBool&&, lldb_private::MemoryRegionInfo::OptionalBool&&, char const*&&, lldb_private::ConstString&, char const*&&, lldb_private::ConstString&)
Line
Count
Source
120
409
  void AppendMessageWithFormatv(const char *format, Args &&... args) {
121
409
    AppendMessage(llvm::formatv(format, std::forward<Args>(args)...).str());
122
409
  }
void lldb_private::CommandReturnObject::AppendMessageWithFormatv<unsigned long long&>(char const*, unsigned long long&)
Line
Count
Source
120
9
  void AppendMessageWithFormatv(const char *format, Args &&... args) {
121
9
    AppendMessage(llvm::formatv(format, std::forward<Args>(args)...).str());
122
9
  }
void lldb_private::CommandReturnObject::AppendMessageWithFormatv<unsigned long long&, unsigned long long&, unsigned long long&, char const*>(char const*, unsigned long long&, unsigned long long&, unsigned long long&, char const*&&)
Line
Count
Source
120
20
  void AppendMessageWithFormatv(const char *format, Args &&... args) {
121
20
    AppendMessage(llvm::formatv(format, std::forward<Args>(args)...).str());
122
20
  }
void lldb_private::CommandReturnObject::AppendMessageWithFormatv<unsigned int const&, char const*, llvm::StringRef>(char const*, unsigned int const&, char const*&&, llvm::StringRef&&)
Line
Count
Source
120
5
  void AppendMessageWithFormatv(const char *format, Args &&... args) {
121
5
    AppendMessage(llvm::formatv(format, std::forward<Args>(args)...).str());
122
5
  }
void lldb_private::CommandReturnObject::AppendMessageWithFormatv<llvm::json::Value>(char const*, llvm::json::Value&&)
Line
Count
Source
120
22
  void AppendMessageWithFormatv(const char *format, Args &&... args) {
121
22
    AppendMessage(llvm::formatv(format, std::forward<Args>(args)...).str());
122
22
  }
void lldb_private::CommandReturnObject::AppendMessageWithFormatv<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const*>(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const*&&)
Line
Count
Source
120
96
  void AppendMessageWithFormatv(const char *format, Args &&... args) {
121
96
    AppendMessage(llvm::formatv(format, std::forward<Args>(args)...).str());
122
96
  }
void lldb_private::CommandReturnObject::AppendMessageWithFormatv<llvm::StringRef>(char const*, llvm::StringRef&&)
Line
Count
Source
120
5
  void AppendMessageWithFormatv(const char *format, Args &&... args) {
121
5
    AppendMessage(llvm::formatv(format, std::forward<Args>(args)...).str());
122
5
  }
Unexecuted instantiation: void lldb_private::CommandReturnObject::AppendMessageWithFormatv<lldb_private::FileSpec&>(char const*, lldb_private::FileSpec&)
123
124
  template <typename... Args>
125
  void AppendWarningWithFormatv(const char *format, Args &&... args) {
126
    AppendWarning(llvm::formatv(format, std::forward<Args>(args)...).str());
127
  }
128
129
  template <typename... Args>
130
26
  void AppendErrorWithFormatv(const char *format, Args &&... args) {
131
26
    AppendError(llvm::formatv(format, std::forward<Args>(args)...).str());
132
26
  }
void lldb_private::CommandReturnObject::AppendErrorWithFormatv<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&>(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Line
Count
Source
130
9
  void AppendErrorWithFormatv(const char *format, Args &&... args) {
131
9
    AppendError(llvm::formatv(format, std::forward<Args>(args)...).str());
132
9
  }
Unexecuted instantiation: void lldb_private::CommandReturnObject::AppendErrorWithFormatv<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, llvm::detail::ErrorAdapter>(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, llvm::detail::ErrorAdapter&&)
void lldb_private::CommandReturnObject::AppendErrorWithFormatv<llvm::StringRef>(char const*, llvm::StringRef&&)
Line
Count
Source
130
9
  void AppendErrorWithFormatv(const char *format, Args &&... args) {
131
9
    AppendError(llvm::formatv(format, std::forward<Args>(args)...).str());
132
9
  }
Unexecuted instantiation: void lldb_private::CommandReturnObject::AppendErrorWithFormatv<llvm::StringRef&>(char const*, llvm::StringRef&)
Unexecuted instantiation: void lldb_private::CommandReturnObject::AppendErrorWithFormatv<char const*>(char const*, char const*&&)
Unexecuted instantiation: void lldb_private::CommandReturnObject::AppendErrorWithFormatv<char const*&, char const*&, llvm::StringRef>(char const*, char const*&, char const*&, llvm::StringRef&&)
Unexecuted instantiation: void lldb_private::CommandReturnObject::AppendErrorWithFormatv<int&>(char const*, int&)
void lldb_private::CommandReturnObject::AppendErrorWithFormatv<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
130
1
  void AppendErrorWithFormatv(const char *format, Args &&... args) {
131
1
    AppendError(llvm::formatv(format, std::forward<Args>(args)...).str());
132
1
  }
void lldb_private::CommandReturnObject::AppendErrorWithFormatv<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
130
4
  void AppendErrorWithFormatv(const char *format, Args &&... args) {
131
4
    AppendError(llvm::formatv(format, std::forward<Args>(args)...).str());
132
4
  }
void lldb_private::CommandReturnObject::AppendErrorWithFormatv<lldb_private::FileSpec const&>(char const*, lldb_private::FileSpec const&)
Line
Count
Source
130
1
  void AppendErrorWithFormatv(const char *format, Args &&... args) {
131
1
    AppendError(llvm::formatv(format, std::forward<Args>(args)...).str());
132
1
  }
Unexecuted instantiation: void lldb_private::CommandReturnObject::AppendErrorWithFormatv<unsigned long long&>(char const*, unsigned long long&)
void lldb_private::CommandReturnObject::AppendErrorWithFormatv<char const*&>(char const*, char const*&)
Line
Count
Source
130
2
  void AppendErrorWithFormatv(const char *format, Args &&... args) {
131
2
    AppendError(llvm::formatv(format, std::forward<Args>(args)...).str());
132
2
  }
Unexecuted instantiation: void lldb_private::CommandReturnObject::AppendErrorWithFormatv<unsigned long&, unsigned int const&>(char const*, unsigned long&, unsigned int const&)
Unexecuted instantiation: void lldb_private::CommandReturnObject::AppendErrorWithFormatv<llvm::detail::ErrorAdapter>(char const*, llvm::detail::ErrorAdapter&&)
133
134
  void SetError(const Status &error, const char *fallback_error_cstr = nullptr);
135
136
  void SetError(llvm::Error error);
137
138
  lldb::ReturnStatus GetStatus() const;
139
140
  void SetStatus(lldb::ReturnStatus status);
141
142
  bool Succeeded() const;
143
144
  bool HasResult() const;
145
146
  bool GetDidChangeProcessState() const;
147
148
  void SetDidChangeProcessState(bool b);
149
150
  bool GetInteractive() const;
151
152
  void SetInteractive(bool b);
153
154
  bool GetSuppressImmediateOutput() const;
155
156
  void SetSuppressImmediateOutput(bool b);
157
158
private:
159
  enum { eStreamStringIndex = 0, eImmediateStreamIndex = 1 };
160
161
  StreamTee m_out_stream;
162
  StreamTee m_err_stream;
163
164
  lldb::ReturnStatus m_status = lldb::eReturnStatusStarted;
165
166
  bool m_did_change_process_state = false;
167
  bool m_suppress_immediate_output = false;
168
169
  /// If true, then the input handle from the debugger will be hooked up.
170
  bool m_interactive = true;
171
};
172
173
} // namespace lldb_private
174
175
#endif // LLDB_INTERPRETER_COMMANDRETURNOBJECT_H