173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//===-- OptionValueFormat.cpp -----------------------------------*- C++ -*-===//
273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//
373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//                     The LLVM Compiler Infrastructure
473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//
573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// This file is distributed under the University of Illinois Open Source
673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// License. See LICENSE.TXT for details.
773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//
873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//===----------------------------------------------------------------------===//
973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
10d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea#include "lldb/lldb-python.h"
11d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea
1273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Interpreter/OptionValueFormat.h"
1373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
1473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// C Includes
1573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// C++ Includes
1673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// Other libraries and framework includes
1773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// Project includes
1873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Core/Stream.h"
19f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/DataFormatters/FormatManager.h"
2073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Interpreter/Args.h"
2173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
2273844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonusing namespace lldb;
2373844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonusing namespace lldb_private;
2473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
2573844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonvoid
2673844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonOptionValueFormat::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask)
2773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{
2873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    if (dump_mask & eDumpOptionType)
2973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        strm.Printf ("(%s)", GetTypeAsCString ());
3073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    if (dump_mask & eDumpOptionValue)
3173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
3273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        if (dump_mask & eDumpOptionType)
3373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            strm.PutCString (" = ");
3473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        strm.PutCString (FormatManager::GetFormatAsCString (m_current_value));
3573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
3673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton}
3773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
3873844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonError
3973844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonOptionValueFormat::SetValueFromCString (const char *value_cstr, VarSetOperationType op)
4073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{
4173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    Error error;
4273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    switch (op)
4373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
4473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    case eVarSetOperationClear:
4573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        Clear();
4673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        break;
4773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
4873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    case eVarSetOperationReplace:
4973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    case eVarSetOperationAssign:
5073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
5173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            Format new_format;
5273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            error = Args::StringToFormat (value_cstr, new_format, NULL);
5373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            if (error.Success())
5473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            {
5573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                m_value_was_set = true;
5673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                m_current_value = new_format;
5773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            }
5873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
5973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        break;
6073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
6173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    case eVarSetOperationInsertBefore:
6273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    case eVarSetOperationInsertAfter:
6373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    case eVarSetOperationRemove:
6473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    case eVarSetOperationAppend:
6573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    case eVarSetOperationInvalid:
6673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        error = OptionValue::SetValueFromCString (value_cstr, op);
6773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        break;
6873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
6973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    return error;
7073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton}
7173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
7273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
7373844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonlldb::OptionValueSP
7473844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonOptionValueFormat::DeepCopy () const
7573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{
7673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    return OptionValueSP(new OptionValueFormat(*this));
7773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton}
7873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
79