1*80814287SRaphael Isemann //===-- OptionValueChar.cpp -----------------------------------------------===//
23e7442b6SZachary Turner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
63e7442b6SZachary Turner //
73e7442b6SZachary Turner //===----------------------------------------------------------------------===//
83e7442b6SZachary Turner
93e7442b6SZachary Turner #include "lldb/Interpreter/OptionValueChar.h"
103e7442b6SZachary Turner
1147cbf4a0SPavel Labath #include "lldb/Interpreter/OptionArgParser.h"
12bf9a7730SZachary Turner #include "lldb/Utility/Stream.h"
13573ab909SZachary Turner #include "lldb/Utility/StringList.h"
143e7442b6SZachary Turner #include "llvm/ADT/STLExtras.h"
153e7442b6SZachary Turner
163e7442b6SZachary Turner using namespace lldb;
173e7442b6SZachary Turner using namespace lldb_private;
183e7442b6SZachary Turner
DumpValue(const ExecutionContext * exe_ctx,Stream & strm,uint32_t dump_mask)19b9c1b51eSKate Stone void OptionValueChar::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
20b9c1b51eSKate Stone uint32_t dump_mask) {
213e7442b6SZachary Turner if (dump_mask & eDumpOptionType)
223e7442b6SZachary Turner strm.Printf("(%s)", GetTypeAsCString());
233e7442b6SZachary Turner
24b9c1b51eSKate Stone if (dump_mask & eDumpOptionValue) {
253e7442b6SZachary Turner if (dump_mask & eDumpOptionType)
263e7442b6SZachary Turner strm.PutCString(" = ");
273e7442b6SZachary Turner if (m_current_value != '\0')
283e7442b6SZachary Turner strm.PutChar(m_current_value);
293e7442b6SZachary Turner else
303e7442b6SZachary Turner strm.PutCString("(null)");
313e7442b6SZachary Turner }
323e7442b6SZachary Turner }
333e7442b6SZachary Turner
SetValueFromString(llvm::StringRef value,VarSetOperationType op)3497206d57SZachary Turner Status OptionValueChar::SetValueFromString(llvm::StringRef value,
35b9c1b51eSKate Stone VarSetOperationType op) {
3697206d57SZachary Turner Status error;
37b9c1b51eSKate Stone switch (op) {
383e7442b6SZachary Turner case eVarSetOperationClear:
393e7442b6SZachary Turner Clear();
403e7442b6SZachary Turner break;
413e7442b6SZachary Turner
423e7442b6SZachary Turner case eVarSetOperationReplace:
43b9c1b51eSKate Stone case eVarSetOperationAssign: {
443e7442b6SZachary Turner bool success = false;
4547cbf4a0SPavel Labath char char_value = OptionArgParser::ToChar(value, '\0', &success);
46b9c1b51eSKate Stone if (success) {
473e7442b6SZachary Turner m_current_value = char_value;
483e7442b6SZachary Turner m_value_was_set = true;
49b9c1b51eSKate Stone } else
50b9c1b51eSKate Stone error.SetErrorStringWithFormat("'%s' cannot be longer than 1 character",
51b9c1b51eSKate Stone value.str().c_str());
52b9c1b51eSKate Stone } break;
533e7442b6SZachary Turner
543e7442b6SZachary Turner default:
558cef4b0bSZachary Turner error = OptionValue::SetValueFromString(value, op);
563e7442b6SZachary Turner break;
573e7442b6SZachary Turner }
583e7442b6SZachary Turner return error;
593e7442b6SZachary Turner }
60