OptionValueChar.cpp revision 278332
1278332Semaste//===-- OptionValueChar.cpp -------------------------------------*- C++ -*-===//
2278332Semaste//
3278332Semaste//                     The LLVM Compiler Infrastructure
4278332Semaste//
5278332Semaste// This file is distributed under the University of Illinois Open Source
6278332Semaste// License. See LICENSE.TXT for details.
7278332Semaste//
8278332Semaste//===----------------------------------------------------------------------===//
9278332Semaste
10278332Semaste#include "lldb/Interpreter/OptionValueChar.h"
11278332Semaste
12278332Semaste// C Includes
13278332Semaste// C++ Includes
14278332Semaste// Other libraries and framework includes
15278332Semaste// Project includes
16278332Semaste#include "lldb/Core/Stream.h"
17278332Semaste#include "lldb/Core/StringList.h"
18278332Semaste#include "lldb/Interpreter/Args.h"
19278332Semaste#include "llvm/ADT/STLExtras.h"
20278332Semaste
21278332Semasteusing namespace lldb;
22278332Semasteusing namespace lldb_private;
23278332Semaste
24278332Semastevoid
25278332SemasteOptionValueChar::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask)
26278332Semaste{
27278332Semaste    if (dump_mask & eDumpOptionType)
28278332Semaste        strm.Printf ("(%s)", GetTypeAsCString ());
29278332Semaste
30278332Semaste    if (dump_mask & eDumpOptionValue)
31278332Semaste    {
32278332Semaste        if (dump_mask & eDumpOptionType)
33278332Semaste            strm.PutCString (" = ");
34278332Semaste        if (m_current_value != '\0')
35278332Semaste            strm.PutChar(m_current_value);
36278332Semaste        else
37278332Semaste            strm.PutCString("(null)");
38278332Semaste    }
39278332Semaste}
40278332Semaste
41278332SemasteError
42278332SemasteOptionValueChar::SetValueFromCString (const char *value_cstr,
43278332Semaste                                      VarSetOperationType op)
44278332Semaste{
45278332Semaste    Error error;
46278332Semaste    switch (op)
47278332Semaste    {
48278332Semaste    case eVarSetOperationClear:
49278332Semaste        Clear();
50278332Semaste        break;
51278332Semaste
52278332Semaste    case eVarSetOperationReplace:
53278332Semaste    case eVarSetOperationAssign:
54278332Semaste        {
55278332Semaste            bool success = false;
56278332Semaste            char char_value = Args::StringToChar(value_cstr, '\0', &success);
57278332Semaste            if (success)
58278332Semaste            {
59278332Semaste                m_current_value = char_value;
60278332Semaste                m_value_was_set = true;
61278332Semaste            }
62278332Semaste            else
63278332Semaste                error.SetErrorStringWithFormat("'%s' cannot be longer than 1 character", value_cstr);
64278332Semaste        }
65278332Semaste        break;
66278332Semaste
67278332Semaste    default:
68278332Semaste        error = OptionValue::SetValueFromCString (value_cstr, op);
69278332Semaste        break;
70278332Semaste    }
71278332Semaste    return error;
72278332Semaste}
73278332Semaste
74278332Semastelldb::OptionValueSP
75278332SemasteOptionValueChar::DeepCopy () const
76278332Semaste{
77278332Semaste    return OptionValueSP(new OptionValueChar(*this));
78278332Semaste}
79278332Semaste
80278332Semaste
81