627 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			627 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===-- OptionValue.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/OptionValue.h"
 | |
| 
 | |
| // C Includes
 | |
| // C++ Includes
 | |
| // Other libraries and framework includes
 | |
| // Project includes
 | |
| #include "lldb/Interpreter/OptionValues.h"
 | |
| #include "lldb/Utility/StringList.h"
 | |
| 
 | |
| using namespace lldb;
 | |
| using namespace lldb_private;
 | |
| 
 | |
| //-------------------------------------------------------------------------
 | |
| // Get this value as a uint64_t value if it is encoded as a boolean,
 | |
| // uint64_t or int64_t. Other types will cause "fail_value" to be
 | |
| // returned
 | |
| //-------------------------------------------------------------------------
 | |
| uint64_t OptionValue::GetUInt64Value(uint64_t fail_value, bool *success_ptr) {
 | |
|   if (success_ptr)
 | |
|     *success_ptr = true;
 | |
|   switch (GetType()) {
 | |
|   case OptionValue::eTypeBoolean:
 | |
|     return static_cast<OptionValueBoolean *>(this)->GetCurrentValue();
 | |
|   case OptionValue::eTypeSInt64:
 | |
|     return static_cast<OptionValueSInt64 *>(this)->GetCurrentValue();
 | |
|   case OptionValue::eTypeUInt64:
 | |
|     return static_cast<OptionValueUInt64 *>(this)->GetCurrentValue();
 | |
|   default:
 | |
|     break;
 | |
|   }
 | |
|   if (success_ptr)
 | |
|     *success_ptr = false;
 | |
|   return fail_value;
 | |
| }
 | |
| 
 | |
| Status OptionValue::SetSubValue(const ExecutionContext *exe_ctx,
 | |
|                                 VarSetOperationType op, llvm::StringRef name,
 | |
|                                 llvm::StringRef value) {
 | |
|   Status error;
 | |
|   error.SetErrorStringWithFormat("SetSubValue is not supported");
 | |
|   return error;
 | |
| }
 | |
| 
 | |
| OptionValueBoolean *OptionValue::GetAsBoolean() {
 | |
|   if (GetType() == OptionValue::eTypeBoolean)
 | |
|     return static_cast<OptionValueBoolean *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValueBoolean *OptionValue::GetAsBoolean() const {
 | |
|   if (GetType() == OptionValue::eTypeBoolean)
 | |
|     return static_cast<const OptionValueBoolean *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValueChar *OptionValue::GetAsChar() const {
 | |
|   if (GetType() == OptionValue::eTypeChar)
 | |
|     return static_cast<const OptionValueChar *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| OptionValueChar *OptionValue::GetAsChar() {
 | |
|   if (GetType() == OptionValue::eTypeChar)
 | |
|     return static_cast<OptionValueChar *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| OptionValueFileSpec *OptionValue::GetAsFileSpec() {
 | |
|   if (GetType() == OptionValue::eTypeFileSpec)
 | |
|     return static_cast<OptionValueFileSpec *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValueFileSpec *OptionValue::GetAsFileSpec() const {
 | |
|   if (GetType() == OptionValue::eTypeFileSpec)
 | |
|     return static_cast<const OptionValueFileSpec *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| OptionValueFileSpecList *OptionValue::GetAsFileSpecList() {
 | |
|   if (GetType() == OptionValue::eTypeFileSpecList)
 | |
|     return static_cast<OptionValueFileSpecList *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValueFileSpecList *OptionValue::GetAsFileSpecList() const {
 | |
|   if (GetType() == OptionValue::eTypeFileSpecList)
 | |
|     return static_cast<const OptionValueFileSpecList *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| OptionValueArch *OptionValue::GetAsArch() {
 | |
|   if (GetType() == OptionValue::eTypeArch)
 | |
|     return static_cast<OptionValueArch *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValueArch *OptionValue::GetAsArch() const {
 | |
|   if (GetType() == OptionValue::eTypeArch)
 | |
|     return static_cast<const OptionValueArch *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| OptionValueArray *OptionValue::GetAsArray() {
 | |
|   if (GetType() == OptionValue::eTypeArray)
 | |
|     return static_cast<OptionValueArray *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValueArray *OptionValue::GetAsArray() const {
 | |
|   if (GetType() == OptionValue::eTypeArray)
 | |
|     return static_cast<const OptionValueArray *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| OptionValueArgs *OptionValue::GetAsArgs() {
 | |
|   if (GetType() == OptionValue::eTypeArgs)
 | |
|     return static_cast<OptionValueArgs *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValueArgs *OptionValue::GetAsArgs() const {
 | |
|   if (GetType() == OptionValue::eTypeArgs)
 | |
|     return static_cast<const OptionValueArgs *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| OptionValueDictionary *OptionValue::GetAsDictionary() {
 | |
|   if (GetType() == OptionValue::eTypeDictionary)
 | |
|     return static_cast<OptionValueDictionary *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValueDictionary *OptionValue::GetAsDictionary() const {
 | |
|   if (GetType() == OptionValue::eTypeDictionary)
 | |
|     return static_cast<const OptionValueDictionary *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| OptionValueEnumeration *OptionValue::GetAsEnumeration() {
 | |
|   if (GetType() == OptionValue::eTypeEnum)
 | |
|     return static_cast<OptionValueEnumeration *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValueEnumeration *OptionValue::GetAsEnumeration() const {
 | |
|   if (GetType() == OptionValue::eTypeEnum)
 | |
|     return static_cast<const OptionValueEnumeration *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| OptionValueFormat *OptionValue::GetAsFormat() {
 | |
|   if (GetType() == OptionValue::eTypeFormat)
 | |
|     return static_cast<OptionValueFormat *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValueFormat *OptionValue::GetAsFormat() const {
 | |
|   if (GetType() == OptionValue::eTypeFormat)
 | |
|     return static_cast<const OptionValueFormat *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| OptionValueLanguage *OptionValue::GetAsLanguage() {
 | |
|   if (GetType() == OptionValue::eTypeLanguage)
 | |
|     return static_cast<OptionValueLanguage *>(this);
 | |
|   return NULL;
 | |
| }
 | |
| 
 | |
| const OptionValueLanguage *OptionValue::GetAsLanguage() const {
 | |
|   if (GetType() == OptionValue::eTypeLanguage)
 | |
|     return static_cast<const OptionValueLanguage *>(this);
 | |
|   return NULL;
 | |
| }
 | |
| 
 | |
| OptionValueFormatEntity *OptionValue::GetAsFormatEntity() {
 | |
|   if (GetType() == OptionValue::eTypeFormatEntity)
 | |
|     return static_cast<OptionValueFormatEntity *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValueFormatEntity *OptionValue::GetAsFormatEntity() const {
 | |
|   if (GetType() == OptionValue::eTypeFormatEntity)
 | |
|     return static_cast<const OptionValueFormatEntity *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| OptionValuePathMappings *OptionValue::GetAsPathMappings() {
 | |
|   if (GetType() == OptionValue::eTypePathMap)
 | |
|     return static_cast<OptionValuePathMappings *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValuePathMappings *OptionValue::GetAsPathMappings() const {
 | |
|   if (GetType() == OptionValue::eTypePathMap)
 | |
|     return static_cast<const OptionValuePathMappings *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| OptionValueProperties *OptionValue::GetAsProperties() {
 | |
|   if (GetType() == OptionValue::eTypeProperties)
 | |
|     return static_cast<OptionValueProperties *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValueProperties *OptionValue::GetAsProperties() const {
 | |
|   if (GetType() == OptionValue::eTypeProperties)
 | |
|     return static_cast<const OptionValueProperties *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| OptionValueRegex *OptionValue::GetAsRegex() {
 | |
|   if (GetType() == OptionValue::eTypeRegex)
 | |
|     return static_cast<OptionValueRegex *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValueRegex *OptionValue::GetAsRegex() const {
 | |
|   if (GetType() == OptionValue::eTypeRegex)
 | |
|     return static_cast<const OptionValueRegex *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| OptionValueSInt64 *OptionValue::GetAsSInt64() {
 | |
|   if (GetType() == OptionValue::eTypeSInt64)
 | |
|     return static_cast<OptionValueSInt64 *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValueSInt64 *OptionValue::GetAsSInt64() const {
 | |
|   if (GetType() == OptionValue::eTypeSInt64)
 | |
|     return static_cast<const OptionValueSInt64 *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| OptionValueString *OptionValue::GetAsString() {
 | |
|   if (GetType() == OptionValue::eTypeString)
 | |
|     return static_cast<OptionValueString *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValueString *OptionValue::GetAsString() const {
 | |
|   if (GetType() == OptionValue::eTypeString)
 | |
|     return static_cast<const OptionValueString *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| OptionValueUInt64 *OptionValue::GetAsUInt64() {
 | |
|   if (GetType() == OptionValue::eTypeUInt64)
 | |
|     return static_cast<OptionValueUInt64 *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValueUInt64 *OptionValue::GetAsUInt64() const {
 | |
|   if (GetType() == OptionValue::eTypeUInt64)
 | |
|     return static_cast<const OptionValueUInt64 *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| OptionValueUUID *OptionValue::GetAsUUID() {
 | |
|   if (GetType() == OptionValue::eTypeUUID)
 | |
|     return static_cast<OptionValueUUID *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const OptionValueUUID *OptionValue::GetAsUUID() const {
 | |
|   if (GetType() == OptionValue::eTypeUUID)
 | |
|     return static_cast<const OptionValueUUID *>(this);
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| bool OptionValue::GetBooleanValue(bool fail_value) const {
 | |
|   const OptionValueBoolean *option_value = GetAsBoolean();
 | |
|   if (option_value)
 | |
|     return option_value->GetCurrentValue();
 | |
|   return fail_value;
 | |
| }
 | |
| 
 | |
| bool OptionValue::SetBooleanValue(bool new_value) {
 | |
|   OptionValueBoolean *option_value = GetAsBoolean();
 | |
|   if (option_value) {
 | |
|     option_value->SetCurrentValue(new_value);
 | |
|     return true;
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| char OptionValue::GetCharValue(char fail_value) const {
 | |
|   const OptionValueChar *option_value = GetAsChar();
 | |
|   if (option_value)
 | |
|     return option_value->GetCurrentValue();
 | |
|   return fail_value;
 | |
| }
 | |
| 
 | |
| char OptionValue::SetCharValue(char new_value) {
 | |
|   OptionValueChar *option_value = GetAsChar();
 | |
|   if (option_value) {
 | |
|     option_value->SetCurrentValue(new_value);
 | |
|     return true;
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| int64_t OptionValue::GetEnumerationValue(int64_t fail_value) const {
 | |
|   const OptionValueEnumeration *option_value = GetAsEnumeration();
 | |
|   if (option_value)
 | |
|     return option_value->GetCurrentValue();
 | |
|   return fail_value;
 | |
| }
 | |
| 
 | |
| bool OptionValue::SetEnumerationValue(int64_t value) {
 | |
|   OptionValueEnumeration *option_value = GetAsEnumeration();
 | |
|   if (option_value) {
 | |
|     option_value->SetCurrentValue(value);
 | |
|     return true;
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| FileSpec OptionValue::GetFileSpecValue() const {
 | |
|   const OptionValueFileSpec *option_value = GetAsFileSpec();
 | |
|   if (option_value)
 | |
|     return option_value->GetCurrentValue();
 | |
|   return FileSpec();
 | |
| }
 | |
| 
 | |
| bool OptionValue::SetFileSpecValue(const FileSpec &file_spec) {
 | |
|   OptionValueFileSpec *option_value = GetAsFileSpec();
 | |
|   if (option_value) {
 | |
|     option_value->SetCurrentValue(file_spec, false);
 | |
|     return true;
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| FileSpecList OptionValue::GetFileSpecListValue() const {
 | |
|   const OptionValueFileSpecList *option_value = GetAsFileSpecList();
 | |
|   if (option_value)
 | |
|     return option_value->GetCurrentValue();
 | |
|   return FileSpecList();
 | |
| }
 | |
| 
 | |
| lldb::Format OptionValue::GetFormatValue(lldb::Format fail_value) const {
 | |
|   const OptionValueFormat *option_value = GetAsFormat();
 | |
|   if (option_value)
 | |
|     return option_value->GetCurrentValue();
 | |
|   return fail_value;
 | |
| }
 | |
| 
 | |
| bool OptionValue::SetFormatValue(lldb::Format new_value) {
 | |
|   OptionValueFormat *option_value = GetAsFormat();
 | |
|   if (option_value) {
 | |
|     option_value->SetCurrentValue(new_value);
 | |
|     return true;
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| lldb::LanguageType
 | |
| OptionValue::GetLanguageValue(lldb::LanguageType fail_value) const {
 | |
|   const OptionValueLanguage *option_value = GetAsLanguage();
 | |
|   if (option_value)
 | |
|     return option_value->GetCurrentValue();
 | |
|   return fail_value;
 | |
| }
 | |
| 
 | |
| bool OptionValue::SetLanguageValue(lldb::LanguageType new_language) {
 | |
|   OptionValueLanguage *option_value = GetAsLanguage();
 | |
|   if (option_value) {
 | |
|     option_value->SetCurrentValue(new_language);
 | |
|     return true;
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| const FormatEntity::Entry *OptionValue::GetFormatEntity() const {
 | |
|   const OptionValueFormatEntity *option_value = GetAsFormatEntity();
 | |
|   if (option_value)
 | |
|     return &option_value->GetCurrentValue();
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| const RegularExpression *OptionValue::GetRegexValue() const {
 | |
|   const OptionValueRegex *option_value = GetAsRegex();
 | |
|   if (option_value)
 | |
|     return option_value->GetCurrentValue();
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| int64_t OptionValue::GetSInt64Value(int64_t fail_value) const {
 | |
|   const OptionValueSInt64 *option_value = GetAsSInt64();
 | |
|   if (option_value)
 | |
|     return option_value->GetCurrentValue();
 | |
|   return fail_value;
 | |
| }
 | |
| 
 | |
| bool OptionValue::SetSInt64Value(int64_t new_value) {
 | |
|   OptionValueSInt64 *option_value = GetAsSInt64();
 | |
|   if (option_value) {
 | |
|     option_value->SetCurrentValue(new_value);
 | |
|     return true;
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| llvm::StringRef OptionValue::GetStringValue(llvm::StringRef fail_value) const {
 | |
|   const OptionValueString *option_value = GetAsString();
 | |
|   if (option_value)
 | |
|     return option_value->GetCurrentValueAsRef();
 | |
|   return fail_value;
 | |
| }
 | |
| 
 | |
| bool OptionValue::SetStringValue(llvm::StringRef new_value) {
 | |
|   OptionValueString *option_value = GetAsString();
 | |
|   if (option_value) {
 | |
|     option_value->SetCurrentValue(new_value);
 | |
|     return true;
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| uint64_t OptionValue::GetUInt64Value(uint64_t fail_value) const {
 | |
|   const OptionValueUInt64 *option_value = GetAsUInt64();
 | |
|   if (option_value)
 | |
|     return option_value->GetCurrentValue();
 | |
|   return fail_value;
 | |
| }
 | |
| 
 | |
| bool OptionValue::SetUInt64Value(uint64_t new_value) {
 | |
|   OptionValueUInt64 *option_value = GetAsUInt64();
 | |
|   if (option_value) {
 | |
|     option_value->SetCurrentValue(new_value);
 | |
|     return true;
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| UUID OptionValue::GetUUIDValue() const {
 | |
|   const OptionValueUUID *option_value = GetAsUUID();
 | |
|   if (option_value)
 | |
|     return option_value->GetCurrentValue();
 | |
|   return UUID();
 | |
| }
 | |
| 
 | |
| bool OptionValue::SetUUIDValue(const UUID &uuid) {
 | |
|   OptionValueUUID *option_value = GetAsUUID();
 | |
|   if (option_value) {
 | |
|     option_value->SetCurrentValue(uuid);
 | |
|     return true;
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| const char *OptionValue::GetBuiltinTypeAsCString(Type t) {
 | |
|   switch (t) {
 | |
|   case eTypeInvalid:
 | |
|     return "invalid";
 | |
|   case eTypeArch:
 | |
|     return "arch";
 | |
|   case eTypeArgs:
 | |
|     return "arguments";
 | |
|   case eTypeArray:
 | |
|     return "array";
 | |
|   case eTypeBoolean:
 | |
|     return "boolean";
 | |
|   case eTypeChar:
 | |
|     return "char";
 | |
|   case eTypeDictionary:
 | |
|     return "dictionary";
 | |
|   case eTypeEnum:
 | |
|     return "enum";
 | |
|   case eTypeFileSpec:
 | |
|     return "file";
 | |
|   case eTypeFileSpecList:
 | |
|     return "file-list";
 | |
|   case eTypeFormat:
 | |
|     return "format";
 | |
|   case eTypeFormatEntity:
 | |
|     return "format-string";
 | |
|   case eTypeLanguage:
 | |
|     return "language";
 | |
|   case eTypePathMap:
 | |
|     return "path-map";
 | |
|   case eTypeProperties:
 | |
|     return "properties";
 | |
|   case eTypeRegex:
 | |
|     return "regex";
 | |
|   case eTypeSInt64:
 | |
|     return "int";
 | |
|   case eTypeString:
 | |
|     return "string";
 | |
|   case eTypeUInt64:
 | |
|     return "unsigned";
 | |
|   case eTypeUUID:
 | |
|     return "uuid";
 | |
|   }
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| lldb::OptionValueSP OptionValue::CreateValueFromCStringForTypeMask(
 | |
|     const char *value_cstr, uint32_t type_mask, Status &error) {
 | |
|   // If only 1 bit is set in the type mask for a dictionary or array
 | |
|   // then we know how to decode a value from a cstring
 | |
|   lldb::OptionValueSP value_sp;
 | |
|   switch (type_mask) {
 | |
|   case 1u << eTypeArch:
 | |
|     value_sp.reset(new OptionValueArch());
 | |
|     break;
 | |
|   case 1u << eTypeBoolean:
 | |
|     value_sp.reset(new OptionValueBoolean(false));
 | |
|     break;
 | |
|   case 1u << eTypeChar:
 | |
|     value_sp.reset(new OptionValueChar('\0'));
 | |
|     break;
 | |
|   case 1u << eTypeFileSpec:
 | |
|     value_sp.reset(new OptionValueFileSpec());
 | |
|     break;
 | |
|   case 1u << eTypeFormat:
 | |
|     value_sp.reset(new OptionValueFormat(eFormatInvalid));
 | |
|     break;
 | |
|   case 1u << eTypeFormatEntity:
 | |
|     value_sp.reset(new OptionValueFormatEntity(NULL));
 | |
|     break;
 | |
|   case 1u << eTypeLanguage:
 | |
|     value_sp.reset(new OptionValueLanguage(eLanguageTypeUnknown));
 | |
|     break;
 | |
|   case 1u << eTypeSInt64:
 | |
|     value_sp.reset(new OptionValueSInt64());
 | |
|     break;
 | |
|   case 1u << eTypeString:
 | |
|     value_sp.reset(new OptionValueString());
 | |
|     break;
 | |
|   case 1u << eTypeUInt64:
 | |
|     value_sp.reset(new OptionValueUInt64());
 | |
|     break;
 | |
|   case 1u << eTypeUUID:
 | |
|     value_sp.reset(new OptionValueUUID());
 | |
|     break;
 | |
|   }
 | |
| 
 | |
|   if (value_sp)
 | |
|     error = value_sp->SetValueFromString(
 | |
|         llvm::StringRef::withNullAsEmpty(value_cstr), eVarSetOperationAssign);
 | |
|   else
 | |
|     error.SetErrorString("unsupported type mask");
 | |
|   return value_sp;
 | |
| }
 | |
| 
 | |
| bool OptionValue::DumpQualifiedName(Stream &strm) const {
 | |
|   bool dumped_something = false;
 | |
|   lldb::OptionValueSP m_parent_sp(m_parent_wp.lock());
 | |
|   if (m_parent_sp) {
 | |
|     if (m_parent_sp->DumpQualifiedName(strm))
 | |
|       dumped_something = true;
 | |
|   }
 | |
|   ConstString name(GetName());
 | |
|   if (name) {
 | |
|     if (dumped_something)
 | |
|       strm.PutChar('.');
 | |
|     else
 | |
|       dumped_something = true;
 | |
|     strm << name;
 | |
|   }
 | |
|   return dumped_something;
 | |
| }
 | |
| 
 | |
| size_t OptionValue::AutoComplete(CommandInterpreter &interpreter,
 | |
|                                  llvm::StringRef s, int match_start_point,
 | |
|                                  int max_return_elements, bool &word_complete,
 | |
|                                  StringList &matches) {
 | |
|   word_complete = false;
 | |
|   matches.Clear();
 | |
|   return matches.GetSize();
 | |
| }
 | |
| 
 | |
| Status OptionValue::SetValueFromString(llvm::StringRef value,
 | |
|                                        VarSetOperationType op) {
 | |
|   Status error;
 | |
|   switch (op) {
 | |
|   case eVarSetOperationReplace:
 | |
|     error.SetErrorStringWithFormat(
 | |
|         "%s objects do not support the 'replace' operation",
 | |
|         GetTypeAsCString());
 | |
|     break;
 | |
|   case eVarSetOperationInsertBefore:
 | |
|     error.SetErrorStringWithFormat(
 | |
|         "%s objects do not support the 'insert-before' operation",
 | |
|         GetTypeAsCString());
 | |
|     break;
 | |
|   case eVarSetOperationInsertAfter:
 | |
|     error.SetErrorStringWithFormat(
 | |
|         "%s objects do not support the 'insert-after' operation",
 | |
|         GetTypeAsCString());
 | |
|     break;
 | |
|   case eVarSetOperationRemove:
 | |
|     error.SetErrorStringWithFormat(
 | |
|         "%s objects do not support the 'remove' operation", GetTypeAsCString());
 | |
|     break;
 | |
|   case eVarSetOperationAppend:
 | |
|     error.SetErrorStringWithFormat(
 | |
|         "%s objects do not support the 'append' operation", GetTypeAsCString());
 | |
|     break;
 | |
|   case eVarSetOperationClear:
 | |
|     error.SetErrorStringWithFormat(
 | |
|         "%s objects do not support the 'clear' operation", GetTypeAsCString());
 | |
|     break;
 | |
|   case eVarSetOperationAssign:
 | |
|     error.SetErrorStringWithFormat(
 | |
|         "%s objects do not support the 'assign' operation", GetTypeAsCString());
 | |
|     break;
 | |
|   case eVarSetOperationInvalid:
 | |
|     error.SetErrorStringWithFormat("invalid operation performed on a %s object",
 | |
|                                    GetTypeAsCString());
 | |
|     break;
 | |
|   }
 | |
|   return error;
 | |
| }
 |