1 //===-- OptionValueString.cpp ------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "lldb/Interpreter/OptionValueString.h"
14 // Other libraries and framework includes
16 #include "lldb/Core/Stream.h"
17 #include "lldb/Interpreter/Args.h"
20 using namespace lldb_private;
23 OptionValueString::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask)
25 if (dump_mask & eDumpOptionType)
26 strm.Printf ("(%s)", GetTypeAsCString ());
27 if (dump_mask & eDumpOptionValue)
29 if (dump_mask & eDumpOptionType)
30 strm.PutCString (" = ");
31 if (!m_current_value.empty() || m_value_was_set)
33 if (m_options.Test (eOptionEncodeCharacterEscapeSequences))
35 std::string expanded_escape_value;
36 Args::ExpandEscapedCharacters(m_current_value.c_str(), expanded_escape_value);
37 if (dump_mask & eDumpOptionRaw)
38 strm.Printf ("%s", expanded_escape_value.c_str());
40 strm.Printf ("\"%s\"", expanded_escape_value.c_str());
44 if (dump_mask & eDumpOptionRaw)
45 strm.Printf ("%s", m_current_value.c_str());
47 strm.Printf ("\"%s\"", m_current_value.c_str());
54 OptionValueString::SetValueFromCString (const char *value_cstr,
55 VarSetOperationType op)
59 std::string value_str_no_quotes;
62 switch (value_cstr[0])
67 size_t len = strlen(value_cstr);
68 if (len <= 1 || value_cstr[len-1] != value_cstr[0])
70 error.SetErrorString("mismatched quotes");
73 value_str_no_quotes.assign (value_cstr + 1, len - 2);
74 value_cstr = value_str_no_quotes.c_str();
82 case eVarSetOperationInvalid:
83 case eVarSetOperationInsertBefore:
84 case eVarSetOperationInsertAfter:
85 case eVarSetOperationRemove:
88 error = m_validator(value_cstr,m_validator_baton);
92 error = OptionValue::SetValueFromCString (value_cstr, op);
95 case eVarSetOperationAppend:
97 std::string new_value(m_current_value);
98 if (value_cstr && value_cstr[0])
100 if (m_options.Test (eOptionEncodeCharacterEscapeSequences))
103 Args::EncodeEscapeSequences (value_cstr, str);
104 new_value.append(str);
107 new_value.append(value_cstr);
111 error = m_validator(new_value.c_str(),m_validator_baton);
115 m_current_value.assign(new_value);
116 NotifyValueChanged();
120 case eVarSetOperationClear:
122 NotifyValueChanged();
125 case eVarSetOperationReplace:
126 case eVarSetOperationAssign:
129 error = m_validator(value_cstr,m_validator_baton);
133 m_value_was_set = true;
134 if (m_options.Test (eOptionEncodeCharacterEscapeSequences))
136 Args::EncodeEscapeSequences (value_cstr, m_current_value);
140 SetCurrentValue (value_cstr);
142 NotifyValueChanged();
150 OptionValueString::DeepCopy () const
152 return OptionValueSP(new OptionValueString(*this));
156 OptionValueString::SetCurrentValue (const char *value)
160 Error error(m_validator(value,m_validator_baton));
164 if (value && value[0])
165 m_current_value.assign (value);
167 m_current_value.clear();
172 OptionValueString::AppendToCurrentValue (const char *value)
174 if (value && value[0])
178 std::string new_value(m_current_value);
179 new_value.append(value);
180 Error error(m_validator(value,m_validator_baton));
183 m_current_value.assign(new_value);
186 m_current_value.append (value);