| 6854 | } |
| 6855 | |
| 6856 | String WinDebugger::DbgTypedValueToString(const DbgTypedValue& origTypedValue, const StringImpl& expr, DwFormatInfo& formatInfo, DbgExprEvaluator* optEvaluator, bool fullPrecision) |
| 6857 | { |
| 6858 | BP_ZONE("WinDebugger::DbgTypedValueToString"); |
| 6859 | |
| 6860 | DbgTypedValue typedValue = origTypedValue; |
| 6861 | auto dbgCompileUnit = typedValue.mType->mCompileUnit; |
| 6862 | auto dbgModule = typedValue.mType->GetDbgModule(); |
| 6863 | auto language = origTypedValue.mType->GetLanguage(); |
| 6864 | if (language == DbgLanguage_Unknown) |
| 6865 | language = formatInfo.mLanguage; |
| 6866 | formatInfo.mLanguage = language; |
| 6867 | bool isBeef = language == DbgLanguage_Beef; |
| 6868 | |
| 6869 | char str[32]; |
| 6870 | bool readFailed = false; |
| 6871 | bool isCompositeType = false; |
| 6872 | bool isSizedArray = false; |
| 6873 | bool isEnum = false; |
| 6874 | int64 enumVal = 0; |
| 6875 | String result; |
| 6876 | String stringViewData; |
| 6877 | |
| 6878 | DwDisplayInfo* displayInfo = GetDisplayInfo(formatInfo.mReferenceId); |
| 6879 | bool wantStringView = (displayInfo->mFormatStr == "str") && (formatInfo.mAllowStringView); |
| 6880 | |
| 6881 | DbgType* origValueType = typedValue.mType; |
| 6882 | bool origHadRef = false; |
| 6883 | DbgType* dwValueType = typedValue.mType->RemoveModifiers(&origHadRef); |
| 6884 | |
| 6885 | if (dwValueType == NULL) |
| 6886 | dwValueType = dbgModule->GetPrimitiveType(DbgType_Void, language); |
| 6887 | else |
| 6888 | dwValueType = dwValueType->GetPrimaryType(); |
| 6889 | |
| 6890 | if (dwValueType->mTypeCode == DbgType_TypeDef) |
| 6891 | { |
| 6892 | DbgTypedValue realTypedVal = typedValue; |
| 6893 | realTypedVal.mType = dwValueType->mTypeParam; |
| 6894 | return DbgTypedValueToString(realTypedVal, expr, formatInfo, optEvaluator); |
| 6895 | } |
| 6896 | |
| 6897 | if (formatInfo.mRawString) |
| 6898 | { |
| 6899 | if ((dwValueType->mTypeCode != DbgType_Struct) && (dwValueType->mTypeCode != DbgType_Class) && (dwValueType->mTypeCode != DbgType_Ptr) && (dwValueType->mTypeCode != DbgType_SizedArray)) |
| 6900 | return ""; |
| 6901 | } |
| 6902 | |
| 6903 | auto _ShowArraySummary = [&](String& retVal, addr_target ptrVal, int64 arraySize, DbgType* innerType) |
| 6904 | { |
| 6905 | String displayString; |
| 6906 | displayString += "{"; |
| 6907 | for (int idx = 0; idx < arraySize; idx++) |
| 6908 | { |
| 6909 | if (formatInfo.mTotalSummaryLength + retVal.length() + displayString.length() > 255) |
| 6910 | { |
| 6911 | displayString += "..."; |
| 6912 | break; |
| 6913 | } |
nothing calls this directly
no test coverage detected