//++ ------------------------------------------------------------------------------------
// Details: Extract the value's name and value or recurse into child value object.
// Type:    Method.
// Args:    vrValue         - (R)  LLDB value object.
//          vbInSimpleForm  - (R)  True = Get variable info in simple form (i.e. don't expand aggregates).
//                          -      False = Get variable info (and expand aggregates if any).
//          vwrStrValue  t  - (W)  The string representation of this value.
// Return:  MIstatus::success - Functional succeeded.
//          MIstatus::failure - Functional failed.
// Throws:  None.
//--
bool
CMICmnLLDBDebugSessionInfo::GetVariableInfo(const lldb::SBValue &vrValue, const bool vbInSimpleForm, CMIUtilString &vwrStrValue)
{
    const CMICmnLLDBUtilSBValue utilValue(vrValue, true, false);
    const bool bExpandAggregates = vbInSimpleForm ? false : true;
    vwrStrValue = utilValue.GetValue(bExpandAggregates);
    return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
// Details: Return the equivalent var value formatted string for the given value type,
//          which was prepared for printing (i.e. value was escaped and now it's ready
//          for wrapping into quotes).
//          The SBValue vrValue parameter is checked by LLDB private code for valid
//          scalar type via MI Driver proxy function as the valued returned can also be
//          an error condition. The proxy function determines if the check was valid
//          otherwise return an error condition state by other means saying so.
// Type:    Static method.
// Args:    vrValue     - (R) The var value object.
//          veVarFormat - (R) Var format enumeration.
// Returns: CMIUtilString   - Value formatted string.
// Throws:  None.
//--
CMIUtilString
CMICmnLLDBDebugSessionInfoVarObj::GetValueStringFormatted(const lldb::SBValue &vrValue,
                                                          const CMICmnLLDBDebugSessionInfoVarObj::varFormat_e veVarFormat)
{
    const CMICmnLLDBUtilSBValue utilValue(vrValue, true);
    if (utilValue.IsIntegerType())
    {
        MIuint64 nValue = 0;
        if (CMICmnLLDBProxySBValue::GetValueAsUnsigned(vrValue, nValue))
        {
            lldb::SBValue &rValue = const_cast<lldb::SBValue &>(vrValue);
            return GetStringFormatted(nValue, rValue.GetValue(), veVarFormat);
        }
    }

    return utilValue.GetValue().AddSlashes();
}