1254721Semaste//===-- OptionValueRegex.cpp ------------------------------------*- C++ -*-===//
2254721Semaste//
3254721Semaste//                     The LLVM Compiler Infrastructure
4254721Semaste//
5254721Semaste// This file is distributed under the University of Illinois Open Source
6254721Semaste// License. See LICENSE.TXT for details.
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#include "lldb/Interpreter/OptionValueRegex.h"
11254721Semaste
12254721Semaste// C Includes
13254721Semaste// C++ Includes
14254721Semaste// Other libraries and framework includes
15254721Semaste// Project includes
16254721Semaste#include "lldb/Core/Stream.h"
17254721Semaste
18254721Semasteusing namespace lldb;
19254721Semasteusing namespace lldb_private;
20254721Semaste
21254721Semastevoid
22254721SemasteOptionValueRegex::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask)
23254721Semaste{
24254721Semaste    if (dump_mask & eDumpOptionType)
25254721Semaste        strm.Printf ("(%s)", GetTypeAsCString ());
26254721Semaste    if (dump_mask & eDumpOptionValue)
27254721Semaste    {
28254721Semaste        if (dump_mask & eDumpOptionType)
29254721Semaste            strm.PutCString (" = ");
30254721Semaste        if (m_regex.IsValid())
31254721Semaste        {
32254721Semaste            const char *regex_text = m_regex.GetText();
33254721Semaste            if (regex_text && regex_text[0])
34254721Semaste                strm.Printf ("%s", regex_text);
35254721Semaste        }
36254721Semaste        else
37254721Semaste        {
38254721Semaste
39254721Semaste        }
40254721Semaste    }
41254721Semaste}
42254721Semaste
43254721SemasteError
44254721SemasteOptionValueRegex::SetValueFromCString (const char *value_cstr,
45254721Semaste                                        VarSetOperationType op)
46254721Semaste{
47254721Semaste    Error error;
48254721Semaste    switch (op)
49254721Semaste    {
50254721Semaste    case eVarSetOperationInvalid:
51254721Semaste    case eVarSetOperationInsertBefore:
52254721Semaste    case eVarSetOperationInsertAfter:
53254721Semaste    case eVarSetOperationRemove:
54254721Semaste    case eVarSetOperationAppend:
55254721Semaste        error = OptionValue::SetValueFromCString (value_cstr, op);
56254721Semaste        break;
57254721Semaste
58254721Semaste    case eVarSetOperationClear:
59254721Semaste        Clear();
60254721Semaste        break;
61254721Semaste
62254721Semaste    case eVarSetOperationReplace:
63254721Semaste    case eVarSetOperationAssign:
64254721Semaste        if (m_regex.Compile (value_cstr, m_regex.GetCompileFlags()))
65254721Semaste        {
66254721Semaste            m_value_was_set = true;
67254721Semaste        }
68254721Semaste        else
69254721Semaste        {
70254721Semaste            char regex_error[1024];
71254721Semaste            if (m_regex.GetErrorAsCString(regex_error, sizeof(regex_error)))
72254721Semaste                error.SetErrorString (regex_error);
73254721Semaste            else
74254721Semaste                error.SetErrorStringWithFormat ("regex error %u", m_regex.GetErrorCode());
75254721Semaste        }
76254721Semaste        break;
77254721Semaste    }
78254721Semaste    return error;
79254721Semaste}
80254721Semaste
81254721Semaste
82254721Semastelldb::OptionValueSP
83254721SemasteOptionValueRegex::DeepCopy () const
84254721Semaste{
85254721Semaste    return OptionValueSP(new OptionValueRegex(m_regex.GetText(), m_regex.GetCompileFlags()));
86254721Semaste}
87