forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			136 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===-- OptionValueBoolean.cpp ------------------------------------*- C++ -*-===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #include "lldb/Interpreter/OptionValueBoolean.h"
 | |
| 
 | |
| // C Includes
 | |
| // C++ Includes
 | |
| // Other libraries and framework includes
 | |
| // Project includes
 | |
| #include "lldb/Core/Stream.h"
 | |
| #include "lldb/Core/StringList.h"
 | |
| #include "lldb/Interpreter/Args.h"
 | |
| 
 | |
| using namespace lldb;
 | |
| using namespace lldb_private;
 | |
| 
 | |
| void
 | |
| OptionValueBoolean::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask)
 | |
| {
 | |
|     if (dump_mask & eDumpOptionType)
 | |
|         strm.Printf ("(%s)", GetTypeAsCString ());
 | |
| //    if (dump_mask & eDumpOptionName)
 | |
| //        DumpQualifiedName (strm);
 | |
|     if (dump_mask & eDumpOptionValue)
 | |
|     {
 | |
|         if (dump_mask & eDumpOptionType)
 | |
|             strm.PutCString (" = ");
 | |
|         strm.PutCString (m_current_value ? "true" : "false");
 | |
|     }
 | |
| }
 | |
| 
 | |
| Error
 | |
| OptionValueBoolean::SetValueFromCString (const char *value_cstr,
 | |
|                                          VarSetOperationType op)
 | |
| {
 | |
|     Error error;
 | |
|     switch (op)
 | |
|     {
 | |
|     case eVarSetOperationClear:
 | |
|         Clear();
 | |
|         break;
 | |
| 
 | |
|     case eVarSetOperationReplace:
 | |
|     case eVarSetOperationAssign:
 | |
|         {
 | |
|             bool success = false;
 | |
|             bool value = Args::StringToBoolean(value_cstr, false, &success);
 | |
|             if (success)
 | |
|             {
 | |
|                 m_value_was_set = true;
 | |
|                 m_current_value = value;
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 if (value_cstr == NULL)
 | |
|                     error.SetErrorString ("invalid boolean string value: NULL");
 | |
|                 else if (value_cstr[0] == '\0')
 | |
|                     error.SetErrorString ("invalid boolean string value <empty>");
 | |
|                 else
 | |
|                     error.SetErrorStringWithFormat ("invalid boolean string value: '%s'", value_cstr);
 | |
|             }
 | |
|         }
 | |
|         break;
 | |
| 
 | |
|     case eVarSetOperationInsertBefore:
 | |
|     case eVarSetOperationInsertAfter:
 | |
|     case eVarSetOperationRemove:
 | |
|     case eVarSetOperationAppend:
 | |
|     case eVarSetOperationInvalid:
 | |
|         error = OptionValue::SetValueFromCString (value_cstr, op);
 | |
|         break;
 | |
|     }
 | |
|     return error;
 | |
| }
 | |
| 
 | |
| lldb::OptionValueSP
 | |
| OptionValueBoolean::DeepCopy () const
 | |
| {
 | |
|     return OptionValueSP(new OptionValueBoolean(*this));
 | |
| }
 | |
| 
 | |
| size_t
 | |
| OptionValueBoolean::AutoComplete (CommandInterpreter &interpreter,
 | |
|                                   const char *s,
 | |
|                                   int match_start_point,
 | |
|                                   int max_return_elements,
 | |
|                                   bool &word_complete,
 | |
|                                   StringList &matches)
 | |
| {
 | |
|     word_complete = false;
 | |
|     matches.Clear();
 | |
|     struct StringEntry {
 | |
|         const char *string;
 | |
|         const size_t length;
 | |
|     };
 | |
|     static const StringEntry g_autocomplete_entries[] =
 | |
|     {
 | |
|         { "true" , 4 },
 | |
|         { "false", 5 },
 | |
|         { "on"   , 2 },
 | |
|         { "off"  , 3 },
 | |
|         { "yes"  , 3 },
 | |
|         { "no"   , 2 },
 | |
|         { "1"    , 1 },
 | |
|         { "0"    , 1 },
 | |
|     };
 | |
|     const size_t k_num_autocomplete_entries = sizeof(g_autocomplete_entries)/sizeof(StringEntry);
 | |
|     
 | |
|     if (s && s[0])
 | |
|     {
 | |
|         const size_t s_len = strlen(s);
 | |
|         for (size_t i=0; i<k_num_autocomplete_entries; ++i)
 | |
|         {
 | |
|             if (s_len <= g_autocomplete_entries[i].length)
 | |
|                 if (::strncasecmp(s, g_autocomplete_entries[i].string, s_len) == 0)
 | |
|                     matches.AppendString(g_autocomplete_entries[i].string);
 | |
|         }
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         // only suggest "true" or "false" by default
 | |
|         for (size_t i=0; i<2; ++i)
 | |
|             matches.AppendString(g_autocomplete_entries[i].string);
 | |
|     }
 | |
|     return matches.GetSize();
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 |