1//===-- OptionValueFormat.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/lldb-python.h"
11
12#include "lldb/Interpreter/OptionValueFormat.h"
13
14// C Includes
15// C++ Includes
16// Other libraries and framework includes
17// Project includes
18#include "lldb/Core/Stream.h"
19#include "lldb/DataFormatters/FormatManager.h"
20#include "lldb/Interpreter/Args.h"
21
22using namespace lldb;
23using namespace lldb_private;
24
25void
26OptionValueFormat::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask)
27{
28    if (dump_mask & eDumpOptionType)
29        strm.Printf ("(%s)", GetTypeAsCString ());
30    if (dump_mask & eDumpOptionValue)
31    {
32        if (dump_mask & eDumpOptionType)
33            strm.PutCString (" = ");
34        strm.PutCString (FormatManager::GetFormatAsCString (m_current_value));
35    }
36}
37
38Error
39OptionValueFormat::SetValueFromCString (const char *value_cstr, VarSetOperationType op)
40{
41    Error error;
42    switch (op)
43    {
44    case eVarSetOperationClear:
45        Clear();
46        break;
47
48    case eVarSetOperationReplace:
49    case eVarSetOperationAssign:
50        {
51            Format new_format;
52            error = Args::StringToFormat (value_cstr, new_format, NULL);
53            if (error.Success())
54            {
55                m_value_was_set = true;
56                m_current_value = new_format;
57            }
58        }
59        break;
60
61    case eVarSetOperationInsertBefore:
62    case eVarSetOperationInsertAfter:
63    case eVarSetOperationRemove:
64    case eVarSetOperationAppend:
65    case eVarSetOperationInvalid:
66        error = OptionValue::SetValueFromCString (value_cstr, op);
67        break;
68    }
69    return error;
70}
71
72
73lldb::OptionValueSP
74OptionValueFormat::DeepCopy () const
75{
76    return OptionValueSP(new OptionValueFormat(*this));
77}
78
79