blob: 9a19b842f6e28c643f7805e44bf757f3bedcc61f [file] [log] [blame]
Greg Clayton67cc0632012-08-22 17:17:09 +00001//===-- OptionValueRegex.cpp ------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/Interpreter/OptionValueRegex.h"
11
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15// Project includes
16#include "lldb/Core/Stream.h"
17
18using namespace lldb;
19using namespace lldb_private;
20
Kate Stoneb9c1b512016-09-06 20:57:50 +000021void OptionValueRegex::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
22 uint32_t dump_mask) {
23 if (dump_mask & eDumpOptionType)
24 strm.Printf("(%s)", GetTypeAsCString());
25 if (dump_mask & eDumpOptionValue) {
Greg Clayton67cc0632012-08-22 17:17:09 +000026 if (dump_mask & eDumpOptionType)
Kate Stoneb9c1b512016-09-06 20:57:50 +000027 strm.PutCString(" = ");
28 if (m_regex.IsValid()) {
29 const char *regex_text = m_regex.GetText();
30 if (regex_text && regex_text[0])
31 strm.Printf("%s", regex_text);
32 } else {
Greg Clayton67cc0632012-08-22 17:17:09 +000033 }
Kate Stoneb9c1b512016-09-06 20:57:50 +000034 }
Greg Clayton67cc0632012-08-22 17:17:09 +000035}
36
Kate Stoneb9c1b512016-09-06 20:57:50 +000037Error OptionValueRegex::SetValueFromString(llvm::StringRef value,
38 VarSetOperationType op) {
39 Error error;
40 switch (op) {
41 case eVarSetOperationInvalid:
42 case eVarSetOperationInsertBefore:
43 case eVarSetOperationInsertAfter:
44 case eVarSetOperationRemove:
45 case eVarSetOperationAppend:
46 error = OptionValue::SetValueFromString(value, op);
47 break;
Greg Clayton67cc0632012-08-22 17:17:09 +000048
Kate Stoneb9c1b512016-09-06 20:57:50 +000049 case eVarSetOperationClear:
50 Clear();
51 NotifyValueChanged();
52 break;
Greg Clayton67cc0632012-08-22 17:17:09 +000053
Kate Stoneb9c1b512016-09-06 20:57:50 +000054 case eVarSetOperationReplace:
55 case eVarSetOperationAssign:
56 if (m_regex.Compile(value.str().c_str())) {
57 m_value_was_set = true;
58 NotifyValueChanged();
59 } else {
60 char regex_error[1024];
61 if (m_regex.GetErrorAsCString(regex_error, sizeof(regex_error)))
62 error.SetErrorString(regex_error);
63 else
64 error.SetErrorStringWithFormat("regex error %u",
65 m_regex.GetErrorCode());
Greg Clayton67cc0632012-08-22 17:17:09 +000066 }
Kate Stoneb9c1b512016-09-06 20:57:50 +000067 break;
68 }
69 return error;
Greg Clayton67cc0632012-08-22 17:17:09 +000070}
71
Kate Stoneb9c1b512016-09-06 20:57:50 +000072lldb::OptionValueSP OptionValueRegex::DeepCopy() const {
73 return OptionValueSP(new OptionValueRegex(m_regex.GetText()));
Greg Clayton67cc0632012-08-22 17:17:09 +000074}