blob: 21fe88014724b1b9ddaafda554824c7a60b0eb83 [file] [log] [blame]
Zachary Turner3e7442b2015-01-12 20:44:02 +00001//===-- OptionValueChar.cpp -------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/Interpreter/OptionValueChar.h"
11
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15// Project includes
Pavel Labath47cbf4a2018-04-10 09:03:59 +000016#include "lldb/Interpreter/OptionArgParser.h"
Zachary Turnerbf9a7732017-02-02 21:39:50 +000017#include "lldb/Utility/Stream.h"
Zachary Turner573ab902017-03-21 18:25:04 +000018#include "lldb/Utility/StringList.h"
Zachary Turner3e7442b2015-01-12 20:44:02 +000019#include "llvm/ADT/STLExtras.h"
20
21using namespace lldb;
22using namespace lldb_private;
23
Kate Stoneb9c1b512016-09-06 20:57:50 +000024void OptionValueChar::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
25 uint32_t dump_mask) {
26 if (dump_mask & eDumpOptionType)
27 strm.Printf("(%s)", GetTypeAsCString());
28
29 if (dump_mask & eDumpOptionValue) {
Zachary Turner3e7442b2015-01-12 20:44:02 +000030 if (dump_mask & eDumpOptionType)
Kate Stoneb9c1b512016-09-06 20:57:50 +000031 strm.PutCString(" = ");
32 if (m_current_value != '\0')
33 strm.PutChar(m_current_value);
34 else
35 strm.PutCString("(null)");
36 }
Zachary Turner3e7442b2015-01-12 20:44:02 +000037}
38
Zachary Turner97206d52017-05-12 04:51:55 +000039Status OptionValueChar::SetValueFromString(llvm::StringRef value,
40 VarSetOperationType op) {
41 Status error;
Kate Stoneb9c1b512016-09-06 20:57:50 +000042 switch (op) {
43 case eVarSetOperationClear:
44 Clear();
45 break;
Zachary Turner3e7442b2015-01-12 20:44:02 +000046
Kate Stoneb9c1b512016-09-06 20:57:50 +000047 case eVarSetOperationReplace:
48 case eVarSetOperationAssign: {
49 bool success = false;
Pavel Labath47cbf4a2018-04-10 09:03:59 +000050 char char_value = OptionArgParser::ToChar(value, '\0', &success);
Kate Stoneb9c1b512016-09-06 20:57:50 +000051 if (success) {
52 m_current_value = char_value;
53 m_value_was_set = true;
54 } else
55 error.SetErrorStringWithFormat("'%s' cannot be longer than 1 character",
56 value.str().c_str());
57 } break;
Zachary Turner3e7442b2015-01-12 20:44:02 +000058
Kate Stoneb9c1b512016-09-06 20:57:50 +000059 default:
Zachary Turner8cef4b02016-09-23 17:48:13 +000060 error = OptionValue::SetValueFromString(value, op);
Kate Stoneb9c1b512016-09-06 20:57:50 +000061 break;
62 }
63 return error;
Zachary Turner3e7442b2015-01-12 20:44:02 +000064}
65
Kate Stoneb9c1b512016-09-06 20:57:50 +000066lldb::OptionValueSP OptionValueChar::DeepCopy() const {
67 return OptionValueSP(new OptionValueChar(*this));
Zachary Turner3e7442b2015-01-12 20:44:02 +000068}