1 //===-- OptionValueSInt64.cpp ---------------------------------------------===// 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/OptionValueSInt64.h" 10 11 #include "lldb/Host/StringConvert.h" 12 #include "lldb/Utility/Stream.h" 13 14 using namespace lldb; 15 using namespace lldb_private; 16 17 void OptionValueSInt64::DumpValue(const ExecutionContext *exe_ctx, Stream &strm, 18 uint32_t dump_mask) { 19 // printf ("%p: DumpValue (exe_ctx=%p, strm, mask) m_current_value = %" 20 // PRIi64 21 // "\n", this, exe_ctx, m_current_value); 22 if (dump_mask & eDumpOptionType) 23 strm.Printf("(%s)", GetTypeAsCString()); 24 // if (dump_mask & eDumpOptionName) 25 // DumpQualifiedName (strm); 26 if (dump_mask & eDumpOptionValue) { 27 if (dump_mask & eDumpOptionType) 28 strm.PutCString(" = "); 29 strm.Printf("%" PRIi64, m_current_value); 30 } 31 } 32 33 Status OptionValueSInt64::SetValueFromString(llvm::StringRef value_ref, 34 VarSetOperationType op) { 35 Status error; 36 switch (op) { 37 case eVarSetOperationClear: 38 Clear(); 39 NotifyValueChanged(); 40 break; 41 42 case eVarSetOperationReplace: 43 case eVarSetOperationAssign: { 44 bool success = false; 45 std::string value_str = value_ref.trim().str(); 46 int64_t value = StringConvert::ToSInt64(value_str.c_str(), 0, 0, &success); 47 if (success) { 48 if (value >= m_min_value && value <= m_max_value) { 49 m_value_was_set = true; 50 m_current_value = value; 51 NotifyValueChanged(); 52 } else 53 error.SetErrorStringWithFormat( 54 "%" PRIi64 " is out of range, valid values must be between %" PRIi64 55 " and %" PRIi64 ".", 56 value, m_min_value, m_max_value); 57 } else { 58 error.SetErrorStringWithFormat("invalid int64_t string value: '%s'", 59 value_ref.str().c_str()); 60 } 61 } break; 62 63 case eVarSetOperationInsertBefore: 64 case eVarSetOperationInsertAfter: 65 case eVarSetOperationRemove: 66 case eVarSetOperationAppend: 67 case eVarSetOperationInvalid: 68 error = OptionValue::SetValueFromString(value_ref, op); 69 break; 70 } 71 return error; 72 } 73