]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/tools/lldb-mi/MICmnMIResultRecord.cpp
MFV r353613: 10731 zfs: NULL pointer errors
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / tools / lldb-mi / MICmnMIResultRecord.cpp
1 //===-- MICmnMIResultRecord.cpp ---------------------------------*- 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 // Third Party Headers:
10 #include <assert.h>
11
12 // In-house headers:
13 #include "MICmnMIResultRecord.h"
14 #include "MICmnResources.h"
15
16 //++
17 // Details: Map a result class to the corresponding string.
18 // Args:    veType      - (R) A MI result class enumeration.
19 // Return:  const char* - The string corresponding to the result class.
20 // Throws:  None.
21 //--
22 static const char *
23 MapResultClassToResultClassText(CMICmnMIResultRecord::ResultClass_e veType) {
24   switch (veType) {
25   case CMICmnMIResultRecord::eResultClass_Done:
26     return "done";
27   case CMICmnMIResultRecord::eResultClass_Running:
28     return "running";
29   case CMICmnMIResultRecord::eResultClass_Connected:
30     return "connected";
31   case CMICmnMIResultRecord::eResultClass_Error:
32     return "error";
33   case CMICmnMIResultRecord::eResultClass_Exit:
34     return "exit";
35   }
36   assert(false && "unknown CMICmnMIResultRecord::ResultClass_e");
37   return nullptr;
38 }
39
40 //++
41 // Details: Build the result record's mandatory data part. The part up to the
42 // first
43 //          (additional) result i.e. result-record ==>  [ token ] "^"
44 //          result-class.
45 // Args:    vrToken     - (R) The command's transaction ID or token.
46 //          veType      - (R) A MI result class enumeration.
47 // Return:  CMIUtilString & - MI result record mandatory data
48 // Throws:  None.
49 //--
50 static const CMIUtilString
51 BuildResultRecord(const CMIUtilString &vrToken,
52                   CMICmnMIResultRecord::ResultClass_e veType) {
53   const char *pStrResultRecord = MapResultClassToResultClassText(veType);
54   return CMIUtilString::Format("%s^%s", vrToken.c_str(),
55                                CMIUtilString::WithNullAsEmpty(pStrResultRecord));
56 }
57
58 //++
59 // Details: CMICmnMIResultRecord constructor.
60 // Type:    Method.
61 // Args:    None.
62 // Return:  None.
63 // Throws:  None.
64 //--
65 CMICmnMIResultRecord::CMICmnMIResultRecord()
66     : m_strResultRecord(MIRSRC(IDS_CMD_ERR_CMD_RUN_BUT_NO_ACTION)) {}
67
68 //++
69 // Details: CMICmnMIResultRecord constructor.
70 // Type:    Method.
71 // Args:    vrToken - (R) The command's transaction ID or token.
72 //          veType  - (R) A MI result class enumeration.
73 // Return:  None.
74 // Throws:  None.
75 //--
76 CMICmnMIResultRecord::CMICmnMIResultRecord(const CMIUtilString &vrToken,
77                                            ResultClass_e veType)
78     : m_strResultRecord(BuildResultRecord(vrToken, veType)) {}
79
80 //++
81 // Details: CMICmnMIResultRecord constructor.
82 // Type:    Method.
83 // Args:    vrToken     - (R) The command's transaction ID or token.
84 //          veType      - (R) A MI result class enumeration.
85 //          vMIResult   - (R) A MI result object.
86 // Return:  None.
87 // Throws:  None.
88 //--
89 CMICmnMIResultRecord::CMICmnMIResultRecord(const CMIUtilString &vrToken,
90                                            ResultClass_e veType,
91                                            const CMICmnMIValueResult &vValue)
92     : m_strResultRecord(BuildResultRecord(vrToken, veType)) {
93   Add(vValue);
94 }
95
96 //++
97 // Details: CMICmnMIResultRecord destructor.
98 // Type:    Overrideable.
99 // Args:    None.
100 // Return:  None.
101 // Throws:  None.
102 //--
103 CMICmnMIResultRecord::~CMICmnMIResultRecord() {}
104
105 //++
106 // Details: Return the MI result record as a string. The string is a direct
107 // result of
108 //          work done on *this result record so if not enough data is added then
109 //          it is
110 //          possible to return a malformed result record. If nothing has been
111 //          set or
112 //          added to *this MI result record object then text "<Invalid>" will be
113 //          returned.
114 // Type:    Method.
115 // Args:    None.
116 // Return:  CMIUtilString & - MI output text.
117 // Throws:  None.
118 //--
119 const CMIUtilString &CMICmnMIResultRecord::GetString() const {
120   return m_strResultRecord;
121 }
122
123 //++
124 // Details: Add to *this result record additional information.
125 // Type:    Method.
126 // Args:    vMIValue    - (R) A MI value derived object.
127 // Return:  None.
128 // Throws:  None.
129 //--
130 void CMICmnMIResultRecord::Add(const CMICmnMIValue &vMIValue) {
131   m_strResultRecord += ",";
132   m_strResultRecord += vMIValue.GetString();
133 }