1 //===-- OptionValueFormat.cpp -----------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include "lldb/Interpreter/OptionValueLanguage.h"
11 
12 // C Includes
13 // C++ Includes
14 // Other libraries and framework includes
15 // Project includes
16 #include "lldb/Core/Stream.h"
17 #include "lldb/DataFormatters/FormatManager.h"
18 #include "lldb/Interpreter/Args.h"
19 #include "lldb/Target/Language.h"
20 
21 using namespace lldb;
22 using namespace lldb_private;
23 
24 void
25 OptionValueLanguage::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask)
26 {
27     if (dump_mask & eDumpOptionType)
28         strm.Printf ("(%s)", GetTypeAsCString ());
29     if (dump_mask & eDumpOptionValue)
30     {
31         if (dump_mask & eDumpOptionType)
32             strm.PutCString (" = ");
33         strm.PutCString (Language::GetNameForLanguageType(m_current_value));
34     }
35 }
36 
37 Error
38 OptionValueLanguage::SetValueFromString (llvm::StringRef value, VarSetOperationType op)
39 {
40     Error error;
41     switch (op)
42     {
43     case eVarSetOperationClear:
44         Clear();
45         break;
46 
47     case eVarSetOperationReplace:
48     case eVarSetOperationAssign:
49         {
50             ConstString lang_name(value.trim());
51             LanguageType new_type = Language::GetLanguageTypeFromString(lang_name.GetCString());
52             if (new_type)
53             {
54                 m_value_was_set = true;
55                 m_current_value = new_type;
56             }
57             else
58             {
59                 StreamString error_strm;
60                 error_strm.Printf("invalid language type '%s', ", value.str().c_str());
61                 error_strm.Printf("valid values are:\n");
62                 Language::PrintAllLanguages(error_strm, "    ", "\n");
63                 error.SetErrorString(error_strm.GetData());
64             }
65         }
66         break;
67 
68     case eVarSetOperationInsertBefore:
69     case eVarSetOperationInsertAfter:
70     case eVarSetOperationRemove:
71     case eVarSetOperationAppend:
72     case eVarSetOperationInvalid:
73         error = OptionValue::SetValueFromString(value, op);
74         break;
75     }
76     return error;
77 }
78 
79 
80 lldb::OptionValueSP
81 OptionValueLanguage::DeepCopy () const
82 {
83     return OptionValueSP(new OptionValueLanguage(*this));
84 }
85 
86