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