xref: /freebsd-src/contrib/llvm-project/lldb/source/Interpreter/OptionValueRegex.cpp (revision 0b57cec536236d46e3dba9bd041533462f33dbb7)
1 //===-- OptionValueRegex.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 #include "lldb/Interpreter/OptionValueRegex.h"
10 
11 #include "lldb/Utility/Stream.h"
12 
13 using namespace lldb;
14 using namespace lldb_private;
15 
16 void OptionValueRegex::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
17                                  uint32_t dump_mask) {
18   if (dump_mask & eDumpOptionType)
19     strm.Printf("(%s)", GetTypeAsCString());
20   if (dump_mask & eDumpOptionValue) {
21     if (dump_mask & eDumpOptionType)
22       strm.PutCString(" = ");
23     if (m_regex.IsValid()) {
24       llvm::StringRef regex_text = m_regex.GetText();
25       strm.Printf("%s", regex_text.str().c_str());
26     }
27   }
28 }
29 
30 Status OptionValueRegex::SetValueFromString(llvm::StringRef value,
31                                             VarSetOperationType op) {
32   Status error;
33   switch (op) {
34   case eVarSetOperationInvalid:
35   case eVarSetOperationInsertBefore:
36   case eVarSetOperationInsertAfter:
37   case eVarSetOperationRemove:
38   case eVarSetOperationAppend:
39     error = OptionValue::SetValueFromString(value, op);
40     break;
41 
42   case eVarSetOperationClear:
43     Clear();
44     NotifyValueChanged();
45     break;
46 
47   case eVarSetOperationReplace:
48   case eVarSetOperationAssign:
49     if (m_regex.Compile(value)) {
50       m_value_was_set = true;
51       NotifyValueChanged();
52     } else {
53       char regex_error[1024];
54       if (m_regex.GetErrorAsCString(regex_error, sizeof(regex_error)))
55         error.SetErrorString(regex_error);
56       else
57         error.SetErrorStringWithFormat("regex error %u",
58                                        m_regex.GetErrorCode());
59     }
60     break;
61   }
62   return error;
63 }
64 
65 lldb::OptionValueSP OptionValueRegex::DeepCopy() const {
66   return OptionValueSP(new OptionValueRegex(m_regex.GetText().str().c_str()));
67 }
68