1*80814287SRaphael Isemann //===-- OptionValueLanguage.cpp -------------------------------------------===//
28fdf7859SEnrico Granata //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
68fdf7859SEnrico Granata //
78fdf7859SEnrico Granata //===----------------------------------------------------------------------===//
88fdf7859SEnrico Granata
98fdf7859SEnrico Granata #include "lldb/Interpreter/OptionValueLanguage.h"
108fdf7859SEnrico Granata
118fdf7859SEnrico Granata #include "lldb/DataFormatters/FormatManager.h"
120e0984eeSJim Ingham #include "lldb/Target/Language.h"
13aa97a89dSAdrian Prantl #include "lldb/Symbol/TypeSystem.h"
14145d95c9SPavel Labath #include "lldb/Utility/Args.h"
15bf9a7730SZachary Turner #include "lldb/Utility/Stream.h"
168fdf7859SEnrico Granata
178fdf7859SEnrico Granata using namespace lldb;
188fdf7859SEnrico Granata using namespace lldb_private;
198fdf7859SEnrico Granata
DumpValue(const ExecutionContext * exe_ctx,Stream & strm,uint32_t dump_mask)20b9c1b51eSKate Stone void OptionValueLanguage::DumpValue(const ExecutionContext *exe_ctx,
21b9c1b51eSKate Stone Stream &strm, uint32_t dump_mask) {
228fdf7859SEnrico Granata if (dump_mask & eDumpOptionType)
238fdf7859SEnrico Granata strm.Printf("(%s)", GetTypeAsCString());
24b9c1b51eSKate Stone if (dump_mask & eDumpOptionValue) {
258fdf7859SEnrico Granata if (dump_mask & eDumpOptionType)
268fdf7859SEnrico Granata strm.PutCString(" = ");
27b76e25a2SJonas Devlieghere if (m_current_value != eLanguageTypeUnknown)
280e0984eeSJim Ingham strm.PutCString(Language::GetNameForLanguageType(m_current_value));
298fdf7859SEnrico Granata }
308fdf7859SEnrico Granata }
318fdf7859SEnrico Granata
SetValueFromString(llvm::StringRef value,VarSetOperationType op)3297206d57SZachary Turner Status OptionValueLanguage::SetValueFromString(llvm::StringRef value,
33b9c1b51eSKate Stone VarSetOperationType op) {
3497206d57SZachary Turner Status error;
35b9c1b51eSKate Stone switch (op) {
368fdf7859SEnrico Granata case eVarSetOperationClear:
378fdf7859SEnrico Granata Clear();
388fdf7859SEnrico Granata break;
398fdf7859SEnrico Granata
408fdf7859SEnrico Granata case eVarSetOperationReplace:
41b9c1b51eSKate Stone case eVarSetOperationAssign: {
4223b1decbSDawn Perchik ConstString lang_name(value.trim());
43aa97a89dSAdrian Prantl LanguageSet languages_for_types = Language::GetLanguagesSupportingTypeSystems();
44b9c1b51eSKate Stone LanguageType new_type =
456fa7681bSZachary Turner Language::GetLanguageTypeFromString(lang_name.GetStringRef());
46aa97a89dSAdrian Prantl if (new_type && languages_for_types[new_type]) {
478fdf7859SEnrico Granata m_value_was_set = true;
488fdf7859SEnrico Granata m_current_value = new_type;
49b9c1b51eSKate Stone } else {
5023b1decbSDawn Perchik StreamString error_strm;
5123b1decbSDawn Perchik error_strm.Printf("invalid language type '%s', ", value.str().c_str());
5223b1decbSDawn Perchik error_strm.Printf("valid values are:\n");
53aa97a89dSAdrian Prantl for (int bit : languages_for_types.bitvector.set_bits()) {
54aa97a89dSAdrian Prantl auto language = (LanguageType)bit;
55aa97a89dSAdrian Prantl error_strm.Printf(" %s\n",
56aa97a89dSAdrian Prantl Language::GetNameForLanguageType(language));
57fe38c850SSean Callanan }
58c156427dSZachary Turner error.SetErrorString(error_strm.GetString());
5923b1decbSDawn Perchik }
60b9c1b51eSKate Stone } break;
618fdf7859SEnrico Granata
628fdf7859SEnrico Granata case eVarSetOperationInsertBefore:
638fdf7859SEnrico Granata case eVarSetOperationInsertAfter:
648fdf7859SEnrico Granata case eVarSetOperationRemove:
658fdf7859SEnrico Granata case eVarSetOperationAppend:
668fdf7859SEnrico Granata case eVarSetOperationInvalid:
678fdf7859SEnrico Granata error = OptionValue::SetValueFromString(value, op);
688fdf7859SEnrico Granata break;
698fdf7859SEnrico Granata }
708fdf7859SEnrico Granata return error;
718fdf7859SEnrico Granata }
72