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