173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//===-- Property.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/Property.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/UserSettingsController.h"
1973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Interpreter/Args.h"
2073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Interpreter/CommandInterpreter.h"
2173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Interpreter/OptionValues.h"
2273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
2373844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonusing namespace lldb;
2473844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonusing namespace lldb_private;
2573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
2673844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonProperty::Property (const PropertyDefinition &definition) :
2773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    m_name (definition.name),
2873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    m_description (definition.description),
2973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    m_value_sp (),
3073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    m_is_global (definition.global)
3173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{
3273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    switch (definition.type)
3373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
3473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case OptionValue::eTypeInvalid:
3573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case OptionValue::eTypeProperties:
3673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
3773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case OptionValue::eTypeArch:
3873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_uint_value" is not used
3973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_cstr_value" as a string value that represents the default string value for the architecture/triple
4073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_value_sp.reset (new OptionValueArch(definition.default_cstr_value));
4173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
4273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
4373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case OptionValue::eTypeArgs:
4473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_uint_value" is always a OptionValue::Type
4573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_value_sp.reset (new OptionValueArgs());
4673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
4773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
4873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case OptionValue::eTypeArray:
4973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_uint_value" is always a OptionValue::Type
5073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_value_sp.reset (new OptionValueArray(OptionValue::ConvertTypeToMask((OptionValue::Type)definition.default_uint_value)));
5173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
5273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
5373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case OptionValue::eTypeBoolean:
5473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_uint_value" is the default boolean value if
5573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_cstr_value" is NULL, otherwise interpret
5673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_cstr_value" as a string value that represents the default
5773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // value.
5873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            if (definition.default_cstr_value)
5973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                m_value_sp.reset (new OptionValueBoolean(Args::StringToBoolean (definition.default_cstr_value, false, NULL)));
6073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            else
6173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                m_value_sp.reset (new OptionValueBoolean(definition.default_uint_value != 0));
6273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
6373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
6473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case OptionValue::eTypeDictionary:
6573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_uint_value" is always a OptionValue::Type
6673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_value_sp.reset (new OptionValueDictionary(OptionValue::ConvertTypeToMask((OptionValue::Type)definition.default_uint_value)));
6773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
6873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
6973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case OptionValue::eTypeEnum:
7073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_uint_value" is the default enumeration value if
7173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_cstr_value" is NULL, otherwise interpret
7273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_cstr_value" as a string value that represents the default
7373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // value.
7473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
7573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            OptionValueEnumeration *enum_value = new OptionValueEnumeration(definition.enum_values, definition.default_uint_value);
7673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_value_sp.reset (enum_value);
7773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            if (definition.default_cstr_value)
7873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            {
7973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                if (enum_value->SetValueFromCString(definition.default_cstr_value).Success())
8073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                {
8173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                    enum_value->SetDefaultValue(enum_value->GetCurrentValue());
8273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                    // Call Clear() since we don't want the value to appear as
8373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                    // having been set since we called SetValueFromCString() above.
8473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                    // Clear will set the current value to the default and clear
8573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                    // the boolean that says that the value has been set.
8673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                    enum_value->Clear();
8773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                }
8873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            }
8973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
9073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
9173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
9273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case OptionValue::eTypeFileSpec:
9373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_uint_value" represents if the "definition.default_cstr_value" should
9473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // be resolved or not
9573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_value_sp.reset (new OptionValueFileSpec(FileSpec(definition.default_cstr_value, definition.default_uint_value != 0)));
9673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
9773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
9873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case OptionValue::eTypeFileSpecList:
9973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_uint_value" is not used for a OptionValue::eTypeFileSpecList
10073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_value_sp.reset (new OptionValueFileSpecList());
10173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
10273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
10373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case OptionValue::eTypeFormat:
10473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_uint_value" is the default format enumeration value if
10573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_cstr_value" is NULL, otherwise interpret
10673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_cstr_value" as a string value that represents the default
10773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // value.
10873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
10973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            Format new_format = eFormatInvalid;
11073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            if (definition.default_cstr_value)
11173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                Args::StringToFormat (definition.default_cstr_value, new_format, NULL);
11273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            else
11373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                new_format = (Format)definition.default_uint_value;
11473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_value_sp.reset (new OptionValueFormat(new_format));
11573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
11673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
11773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
11873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case OptionValue::eTypePathMap:
11973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_uint_value" tells us if notifications should occur for
12073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // path mappings
12173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_value_sp.reset (new OptionValuePathMappings(definition.default_uint_value != 0));
12273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
12373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
12473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case OptionValue::eTypeRegex:
12573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_uint_value" is used to the regular expression flags
12673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_cstr_value" the default regular expression value
12773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // value.
12873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_value_sp.reset (new OptionValueRegex(definition.default_cstr_value, definition.default_uint_value));
12973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
13073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
13173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case OptionValue::eTypeSInt64:
13273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_uint_value" is the default integer value if
13373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_cstr_value" is NULL, otherwise interpret
13473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_cstr_value" as a string value that represents the default
13573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // value.
13673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_value_sp.reset (new OptionValueSInt64(definition.default_cstr_value ? Args::StringToSInt64 (definition.default_cstr_value) : definition.default_uint_value));
13773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
13873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
13973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case OptionValue::eTypeUInt64:
14073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_uint_value" is the default unsigned integer value if
14173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_cstr_value" is NULL, otherwise interpret
14273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_cstr_value" as a string value that represents the default
14373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // value.
14473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_value_sp.reset (new OptionValueUInt64(definition.default_cstr_value ? Args::StringToUInt64 (definition.default_cstr_value) : definition.default_uint_value));
14573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
14673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
14773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case OptionValue::eTypeUUID:
14873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_uint_value" is not used for a OptionValue::eTypeUUID
14973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_cstr_value" can contain a default UUID value
15073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
15173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            UUID uuid;
15273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            if (definition.default_cstr_value)
153437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton                uuid.SetFromCString (definition.default_cstr_value);
15473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_value_sp.reset (new OptionValueUUID(uuid));
15573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
15673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
15773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
15873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case OptionValue::eTypeString:
1593b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton            // "definition.default_uint_value" can contain the string option flags OR'ed together
16073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // "definition.default_cstr_value" can contain a default string value
1613b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton            {
1623b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton                OptionValueString *string_value = new OptionValueString(definition.default_cstr_value);
1633b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton                if (definition.default_uint_value != 0)
1643b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton                    string_value->GetOptions().Reset(definition.default_uint_value);
1653b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton                m_value_sp.reset (string_value);
1663b1afc6cc5689b749a48a1506f17ca593b1cda42Greg Clayton            }
16773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
16873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
16973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton}
17073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
17173844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonProperty::Property (const ConstString &name,
17273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                    const ConstString &desc,
17373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                    bool is_global,
17473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                    const lldb::OptionValueSP &value_sp) :
17573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    m_name (name),
17673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    m_description (desc),
17773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    m_value_sp (value_sp),
17873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    m_is_global (is_global)
17973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{
18073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton}
18173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
18273844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonbool
18373844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonProperty::DumpQualifiedName(Stream &strm) const
18473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{
18573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    if (m_name)
18673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
18773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        if (m_value_sp->DumpQualifiedName(strm))
18873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            strm.PutChar('.');
18973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        strm << m_name;
19073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        return true;
19173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
19273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    return false;
19373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton}
19473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
19573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
19673844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonvoid
19773844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonProperty::Dump (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask) const
19873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{
19973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    if (m_value_sp)
20073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
20173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const bool dump_desc = dump_mask & OptionValue::eDumpOptionDescription;
20273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const bool transparent = m_value_sp->ValueIsTransparent ();
20373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        if (dump_desc || !transparent)
20473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
20573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            if ((dump_mask & OptionValue::eDumpOptionName) && m_name)
20673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            {
20773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                DumpQualifiedName(strm);
20873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                if (dump_mask & ~OptionValue::eDumpOptionName)
20973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                    strm.PutChar(' ');
21073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            }
21173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
21273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        if (dump_desc)
21373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
21473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            const char *desc = GetDescription();
21573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            if (desc)
21673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                strm.Printf ("-- %s", desc);
21773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
21873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            if (transparent && (dump_mask == (OptionValue::eDumpOptionName | OptionValue::eDumpOptionDescription)))
21973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                strm.EOL();
22073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
22173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        m_value_sp->DumpValue(exe_ctx, strm, dump_mask);
22273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
22373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton}
22473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
22573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
22673844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonvoid
22773844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonProperty::DumpDescription (CommandInterpreter &interpreter,
22873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                           Stream &strm,
22973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                           uint32_t output_width,
23073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                           bool display_qualified_name) const
23173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{
23273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    if (m_value_sp)
23373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
23473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const char *desc = GetDescription();
23573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
23673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        if (desc)
23773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
23873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            StreamString qualified_name;
23973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            const OptionValueProperties *sub_properties = m_value_sp->GetAsProperties();
24073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            if (sub_properties)
24173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            {
24273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                strm.EOL();
24373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
24473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                if (m_value_sp->DumpQualifiedName(qualified_name))
24573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                    strm.Printf("'%s' variables:\n\n", qualified_name.GetString().c_str());
24673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                sub_properties->DumpAllDescriptions(interpreter, strm);
24773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            }
24873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            else
24973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            {
25073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                if (desc)
25173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                {
25273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                    if (display_qualified_name)
25373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                    {
25473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                        StreamString qualified_name;
25573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                        DumpQualifiedName(qualified_name);
25673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                        interpreter.OutputFormattedHelpText (strm,
25773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                                                             qualified_name.GetString().c_str(),
25873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                                                             "--",
25973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                                                             desc,
26073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                                                             output_width);
26173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                    }
26273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                    else
26373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                    {
26473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                        interpreter.OutputFormattedHelpText (strm,
26573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                                                             m_name.GetCString(),
26673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                                                             "--",
26773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                                                             desc,
26873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                                                             output_width);
26973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                    }
27073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                }
27173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            }
27273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
27373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
27473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton}
27573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
276