1//===-- OptionValueRegex.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/OptionValueRegex.h"
11
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15// Project includes
16#include "lldb/Core/Stream.h"
17
18using namespace lldb;
19using namespace lldb_private;
20
21void
22OptionValueRegex::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask)
23{
24    if (dump_mask & eDumpOptionType)
25        strm.Printf ("(%s)", GetTypeAsCString ());
26    if (dump_mask & eDumpOptionValue)
27    {
28        if (dump_mask & eDumpOptionType)
29            strm.PutCString (" = ");
30        if (m_regex.IsValid())
31        {
32            const char *regex_text = m_regex.GetText();
33            if (regex_text && regex_text[0])
34                strm.Printf ("%s", regex_text);
35        }
36        else
37        {
38
39        }
40    }
41}
42
43Error
44OptionValueRegex::SetValueFromCString (const char *value_cstr,
45                                        VarSetOperationType op)
46{
47    Error error;
48    switch (op)
49    {
50    case eVarSetOperationInvalid:
51    case eVarSetOperationInsertBefore:
52    case eVarSetOperationInsertAfter:
53    case eVarSetOperationRemove:
54    case eVarSetOperationAppend:
55        error = OptionValue::SetValueFromCString (value_cstr, op);
56        break;
57
58    case eVarSetOperationClear:
59        Clear();
60        break;
61
62    case eVarSetOperationReplace:
63    case eVarSetOperationAssign:
64        if (m_regex.Compile (value_cstr, m_regex.GetCompileFlags()))
65        {
66            m_value_was_set = true;
67        }
68        else
69        {
70            char regex_error[1024];
71            if (m_regex.GetErrorAsCString(regex_error, sizeof(regex_error)))
72                error.SetErrorString (regex_error);
73            else
74                error.SetErrorStringWithFormat ("regex error %u", m_regex.GetErrorCode());
75        }
76        break;
77    }
78    return error;
79}
80
81
82lldb::OptionValueSP
83OptionValueRegex::DeepCopy () const
84{
85    return OptionValueSP(new OptionValueRegex(m_regex.GetText(), m_regex.GetCompileFlags()));
86}
87