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