| //===-- 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, | 
 |                                  CompletionRequest &request) { | 
 |   request.SetWordComplete(false); | 
 |   return request.GetNumberOfMatches(); | 
 | } | 
 |  | 
 | 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; | 
 | } |