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);
119 case eVarSetOperationClear:
123 case eVarSetOperationReplace:
124 case eVarSetOperationAssign:
127 error = m_validator(value_cstr,m_validator_baton);
131 m_value_was_set = true;
132 if (m_options.Test (eOptionEncodeCharacterEscapeSequences))
134 Args::EncodeEscapeSequences (value_cstr, m_current_value);
138 SetCurrentValue (value_cstr);
147 OptionValueString::DeepCopy () const
149 return OptionValueSP(new OptionValueString(*this));
153 OptionValueString::SetCurrentValue (const char *value)
157 Error error(m_validator(value,m_validator_baton));
161 if (value && value[0])
162 m_current_value.assign (value);
164 m_current_value.clear();
169 OptionValueString::AppendToCurrentValue (const char *value)
171 if (value && value[0])
175 std::string new_value(m_current_value);
176 new_value.append(value);
177 Error error(m_validator(value,m_validator_baton));
180 m_current_value.assign(new_value);
183 m_current_value.append (value);