blob: bbe3fa71501994170f061948343577ffc9cfb394 [file] [log] [blame]
Greg Clayton67cc0632012-08-22 17:17:09 +00001//===-- OptionValueRegex.cpp ------------------------------------*- C++ -*-===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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
Greg Clayton67cc0632012-08-22 17:17:09 +00006//
7//===----------------------------------------------------------------------===//
8
9#include "lldb/Interpreter/OptionValueRegex.h"
10
Zachary Turnerbf9a7732017-02-02 21:39:50 +000011#include "lldb/Utility/Stream.h"
Greg Clayton67cc0632012-08-22 17:17:09 +000012
13using namespace lldb;
14using namespace lldb_private;
15
Kate Stoneb9c1b512016-09-06 20:57:50 +000016void 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) {
Greg Clayton67cc0632012-08-22 17:17:09 +000021 if (dump_mask & eDumpOptionType)
Kate Stoneb9c1b512016-09-06 20:57:50 +000022 strm.PutCString(" = ");
23 if (m_regex.IsValid()) {
Zachary Turner95eae422016-09-21 16:01:28 +000024 llvm::StringRef regex_text = m_regex.GetText();
25 strm.Printf("%s", regex_text.str().c_str());
Greg Clayton67cc0632012-08-22 17:17:09 +000026 }
Kate Stoneb9c1b512016-09-06 20:57:50 +000027 }
Greg Clayton67cc0632012-08-22 17:17:09 +000028}
29
Zachary Turner97206d52017-05-12 04:51:55 +000030Status OptionValueRegex::SetValueFromString(llvm::StringRef value,
31 VarSetOperationType op) {
32 Status error;
Kate Stoneb9c1b512016-09-06 20:57:50 +000033 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;
Greg Clayton67cc0632012-08-22 17:17:09 +000041
Kate Stoneb9c1b512016-09-06 20:57:50 +000042 case eVarSetOperationClear:
43 Clear();
44 NotifyValueChanged();
45 break;
Greg Clayton67cc0632012-08-22 17:17:09 +000046
Kate Stoneb9c1b512016-09-06 20:57:50 +000047 case eVarSetOperationReplace:
48 case eVarSetOperationAssign:
Zachary Turner95eae422016-09-21 16:01:28 +000049 if (m_regex.Compile(value)) {
Kate Stoneb9c1b512016-09-06 20:57:50 +000050 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());
Greg Clayton67cc0632012-08-22 17:17:09 +000059 }
Kate Stoneb9c1b512016-09-06 20:57:50 +000060 break;
61 }
62 return error;
Greg Clayton67cc0632012-08-22 17:17:09 +000063}
64
Kate Stoneb9c1b512016-09-06 20:57:50 +000065lldb::OptionValueSP OptionValueRegex::DeepCopy() const {
Zachary Turner95eae422016-09-21 16:01:28 +000066 return OptionValueSP(new OptionValueRegex(m_regex.GetText().str().c_str()));
Greg Clayton67cc0632012-08-22 17:17:09 +000067}