From 0feaaded22bfcdb3b8fc592fb76d6eaccc21ed0b Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Thu, 17 Mar 2022 17:04:32 -0700 Subject: [PATCH] Display type name in System.Type debug summary string --- IDEHelper/Compiler/CeDebugger.cpp | 41 +++++++++++++++++-------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/IDEHelper/Compiler/CeDebugger.cpp b/IDEHelper/Compiler/CeDebugger.cpp index 90335313..85a7cf0b 100644 --- a/IDEHelper/Compiler/CeDebugger.cpp +++ b/IDEHelper/Compiler/CeDebugger.cpp @@ -3544,7 +3544,29 @@ String CeDebugger::TypedValueToString(const BfTypedValue& origTypedValue, const if (formatInfo.mRawString) return ""; - if ((!isNull) && (!formatInfo.mNoVisualizers) && (!hadCustomDisplayString)) + String reflectedTypeName; + if (displayType->IsInstanceOf(mCompiler->mTypeTypeDef)) + { + auto typeInst = displayType->ToTypeInstance(); + auto typeIdField = typeInst->mTypeDef->GetFieldByName("mTypeId"); + if (typeIdField != NULL) + { + auto& fieldInstance = typeInst->mFieldInstances[typeIdField->mIdx]; + int typeId = 0; + memcpy(&typeId, data + fieldInstance.mDataOffset, fieldInstance.mResolvedType->mSize); + auto typeType = mCompiler->mContext->FindTypeById(typeId); + if (typeType != NULL) + reflectedTypeName = module->TypeToString(typeType); + } + } + + if (!reflectedTypeName.IsEmpty()) + { + displayString += "{ "; + displayString += reflectedTypeName; + displayString += " }"; + } + else if ((!isNull) && (!formatInfo.mNoVisualizers) && (!hadCustomDisplayString)) { // Create our own custom display @@ -3783,23 +3805,6 @@ String CeDebugger::TypedValueToString(const BfTypedValue& origTypedValue, const } else if ((!isNull) && (!isBadSrc)) { - if (memberListType->IsInstanceOf(mCompiler->mTypeTypeDef)) - { - auto typeInst = memberListType->ToTypeInstance(); - auto typeIdField = typeInst->mTypeDef->GetFieldByName("mTypeId"); - if (typeIdField != NULL) - { - auto& fieldInstance = typeInst->mFieldInstances[typeIdField->mIdx]; - int typeId = 0; - memcpy(&typeId, data + fieldInstance.mDataOffset, fieldInstance.mResolvedType->mSize); - auto typeType = mCompiler->mContext->FindTypeById(typeId); - if (typeType != NULL) - { - retVal += "\n[Type]\t" + module->TypeToString(typeType); - } - } - } - retVal += "\n" + GetMemberList(memberListType, addr, dataAddr, false); }