xref: /openbsd-src/gnu/llvm/lldb/source/Interpreter/OptionValueRegex.cpp (revision 061da546b983eb767bad15e67af1174fb0bcf31c)
1*061da546Spatrick //===-- OptionValueRegex.cpp ------------------------------------*- C++ -*-===//
2*061da546Spatrick //
3*061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
5*061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*061da546Spatrick //
7*061da546Spatrick //===----------------------------------------------------------------------===//
8*061da546Spatrick 
9*061da546Spatrick #include "lldb/Interpreter/OptionValueRegex.h"
10*061da546Spatrick 
11*061da546Spatrick #include "lldb/Utility/Stream.h"
12*061da546Spatrick 
13*061da546Spatrick using namespace lldb;
14*061da546Spatrick using namespace lldb_private;
15*061da546Spatrick 
16*061da546Spatrick void OptionValueRegex::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
17*061da546Spatrick                                  uint32_t dump_mask) {
18*061da546Spatrick   if (dump_mask & eDumpOptionType)
19*061da546Spatrick     strm.Printf("(%s)", GetTypeAsCString());
20*061da546Spatrick   if (dump_mask & eDumpOptionValue) {
21*061da546Spatrick     if (dump_mask & eDumpOptionType)
22*061da546Spatrick       strm.PutCString(" = ");
23*061da546Spatrick     if (m_regex.IsValid()) {
24*061da546Spatrick       llvm::StringRef regex_text = m_regex.GetText();
25*061da546Spatrick       strm.Printf("%s", regex_text.str().c_str());
26*061da546Spatrick     }
27*061da546Spatrick   }
28*061da546Spatrick }
29*061da546Spatrick 
30*061da546Spatrick Status OptionValueRegex::SetValueFromString(llvm::StringRef value,
31*061da546Spatrick                                             VarSetOperationType op) {
32*061da546Spatrick   Status error;
33*061da546Spatrick   switch (op) {
34*061da546Spatrick   case eVarSetOperationInvalid:
35*061da546Spatrick   case eVarSetOperationInsertBefore:
36*061da546Spatrick   case eVarSetOperationInsertAfter:
37*061da546Spatrick   case eVarSetOperationRemove:
38*061da546Spatrick   case eVarSetOperationAppend:
39*061da546Spatrick     error = OptionValue::SetValueFromString(value, op);
40*061da546Spatrick     break;
41*061da546Spatrick 
42*061da546Spatrick   case eVarSetOperationClear:
43*061da546Spatrick     Clear();
44*061da546Spatrick     NotifyValueChanged();
45*061da546Spatrick     break;
46*061da546Spatrick 
47*061da546Spatrick   case eVarSetOperationReplace:
48*061da546Spatrick   case eVarSetOperationAssign:
49*061da546Spatrick     m_regex = RegularExpression(value);
50*061da546Spatrick     if (m_regex.IsValid()) {
51*061da546Spatrick       m_value_was_set = true;
52*061da546Spatrick       NotifyValueChanged();
53*061da546Spatrick     } else if (llvm::Error err = m_regex.GetError()) {
54*061da546Spatrick       error.SetErrorString(llvm::toString(std::move(err)));
55*061da546Spatrick     } else {
56*061da546Spatrick       error.SetErrorString("regex error");
57*061da546Spatrick     }
58*061da546Spatrick     break;
59*061da546Spatrick   }
60*061da546Spatrick   return error;
61*061da546Spatrick }
62*061da546Spatrick 
63*061da546Spatrick lldb::OptionValueSP OptionValueRegex::DeepCopy() const {
64*061da546Spatrick   return OptionValueSP(new OptionValueRegex(m_regex.GetText().str().c_str()));
65*061da546Spatrick }
66