173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//===-- OptionValueBoolean.cpp ------------------------------------*- C++ -*-===// 273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// 373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// The LLVM Compiler Infrastructure 473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// 573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// This file is distributed under the University of Illinois Open Source 673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// License. See LICENSE.TXT for details. 773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// 873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//===----------------------------------------------------------------------===// 973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 1073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Interpreter/OptionValueBoolean.h" 1173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 1273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// C Includes 1373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// C++ Includes 1473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// Other libraries and framework includes 1573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// Project includes 1673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Core/Stream.h" 179f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton#include "lldb/Core/StringList.h" 1873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Interpreter/Args.h" 1973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 2073844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonusing namespace lldb; 2173844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonusing namespace lldb_private; 2273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 2373844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonvoid 2473844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonOptionValueBoolean::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask) 2573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{ 2673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton if (dump_mask & eDumpOptionType) 2773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton strm.Printf ("(%s)", GetTypeAsCString ()); 2873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// if (dump_mask & eDumpOptionName) 2973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// DumpQualifiedName (strm); 3073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton if (dump_mask & eDumpOptionValue) 3173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton { 3273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton if (dump_mask & eDumpOptionType) 3373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton strm.PutCString (" = "); 3473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton strm.PutCString (m_current_value ? "true" : "false"); 3573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton } 3673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton} 3773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 3873844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonError 3973844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonOptionValueBoolean::SetValueFromCString (const char *value_cstr, 4073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton VarSetOperationType op) 4173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{ 4273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton Error error; 4373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton switch (op) 4473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton { 4573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton case eVarSetOperationClear: 4673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton Clear(); 4773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton break; 4873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 4973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton case eVarSetOperationReplace: 5073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton case eVarSetOperationAssign: 5173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton { 5273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton bool success = false; 5373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton bool value = Args::StringToBoolean(value_cstr, false, &success); 5473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton if (success) 5573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton { 5673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton m_value_was_set = true; 5773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton m_current_value = value; 5873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton } 5973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton else 6073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton { 6173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton if (value_cstr == NULL) 6273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton error.SetErrorString ("invalid boolean string value: NULL"); 6373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton else if (value_cstr[0] == '\0') 6473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton error.SetErrorString ("invalid boolean string value <empty>"); 6573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton else 6673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton error.SetErrorStringWithFormat ("invalid boolean string value: '%s'", value_cstr); 6773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton } 6873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton } 6973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton break; 7073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 7173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton case eVarSetOperationInsertBefore: 7273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton case eVarSetOperationInsertAfter: 7373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton case eVarSetOperationRemove: 7473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton case eVarSetOperationAppend: 7573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton case eVarSetOperationInvalid: 7673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton error = OptionValue::SetValueFromCString (value_cstr, op); 7773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton break; 7873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton } 7973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton return error; 8073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton} 8173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 8273844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonlldb::OptionValueSP 8373844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonOptionValueBoolean::DeepCopy () const 8473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{ 8573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton return OptionValueSP(new OptionValueBoolean(*this)); 8673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton} 8773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 889f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Claytonsize_t 899f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg ClaytonOptionValueBoolean::AutoComplete (CommandInterpreter &interpreter, 909f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton const char *s, 919f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton int match_start_point, 929f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton int max_return_elements, 939f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton bool &word_complete, 949f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton StringList &matches) 959f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton{ 969f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton word_complete = false; 979f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton matches.Clear(); 989f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton struct StringEntry { 999f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton const char *string; 1009f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton const size_t length; 1019f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton }; 1029f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton static const StringEntry g_autocomplete_entries[] = 1039f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton { 1049f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton { "true" , 4 }, 1059f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton { "false", 5 }, 1069f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton { "on" , 2 }, 1079f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton { "off" , 3 }, 1089f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton { "yes" , 3 }, 1099f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton { "no" , 2 }, 1109f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton { "1" , 1 }, 1119f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton { "0" , 1 }, 1129f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton }; 1139f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton const size_t k_num_autocomplete_entries = sizeof(g_autocomplete_entries)/sizeof(StringEntry); 1149f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton 1159f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton if (s && s[0]) 1169f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton { 1179f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton const size_t s_len = strlen(s); 1189f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton for (size_t i=0; i<k_num_autocomplete_entries; ++i) 1199f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton { 1209f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton if (s_len <= g_autocomplete_entries[i].length) 1219f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton if (::strncasecmp(s, g_autocomplete_entries[i].string, s_len) == 0) 1229f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton matches.AppendString(g_autocomplete_entries[i].string); 1239f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton } 1249f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton } 1259f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton else 1269f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton { 1279f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton // only suggest "true" or "false" by default 1289f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton for (size_t i=0; i<2; ++i) 1299f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton matches.AppendString(g_autocomplete_entries[i].string); 1309f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton } 1319f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton return matches.GetSize(); 1329f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton} 1339f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton 1349f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton 13573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 136